【问题标题】:Discord.js manage roles with only idDiscord.js 管理只有 id 的角色
【发布时间】:2018-03-14 20:53:24
【问题描述】:

我正在尝试编写一个 discord.js 机器人。现在我正在开发一个临时系统,但似乎无法找到一种方法来从用户中删除角色 他们的身份证一起工作!我在互联网上搜索过,但似乎找不到任何对我有帮助的东西。
前任。 Discord.js docsAn idiots guide

我的代码:

exports.run = (client, message, args, config) => { if(!message.member.roles.some(r=>[config.BotMaster].includes(r.name))) return message.reply("Du behöver en högre rank!");
const mysql = require('mysql');
const con = mysql.createConnection({
    host: config.host,
    user: config.user,
    password: config.password,
    database: config.database
});

    let role = message.guild.roles.find("name", config.Muted);
    let member = message.mentions.members.first();
    let sql = "SELECT * FROM TempMute WHERE Time<=" + Date.now() + ' AND Unmuted!="True"'
    con.query(sql, function (err, rows) {
        if (err) return console.log(err);
        for (var i = 0; i < rows.length; i++) {
            var row = rows[i];
            var sql2 = "UPDATE TempMute SET Unmuted = 'True' WHERE Id = " + row.Id + ";";
            con.query(sql2, function (err, result) {
                if (err) return console.log(err);
                var Id = row.Name
                var unmute = client.fetchUser(Id)
                unmute.removeRole(role).catch(console.error);
            });
        };
    });
};

错误:

/home/pi/Documents/PinkBot/node_modules/mysql/lib/protocol/Parser.js:80
    throw err; // Rethrow non-MySQL errors
    ^

TypeError: unmute.removeRole is not a function
at Query._callback (/home/pi/Documents/PinkBot/commands/rm.js:22:24)
at Query.Sequence.end (/home/pi/Documents/PinkBot/node_modules/mysql/lib/protocol/sequences/Sequence.js:88:24)
at Query._handleFinalResultPacket (/home/pi/Documents/PinkBot/node_modules/mysql/lib/protocol/sequences/Query.js:139:8)
at Query.OkPacket (/home/pi/Documents/PinkBot/node_modules/mysql/lib/protocol/sequences/Query.js:72:10)
at Protocol._parsePacket (/home/pi/Documents/PinkBot/node_modules/mysql/lib/protocol/Protocol.js:279:23)
at Parser.write (/home/pi/Documents/PinkBot/node_modules/mysql/lib/protocol/Parser.js:76:12)
at Protocol.write (/home/pi/Documents/PinkBot/node_modules/mysql/lib/protocol/Protocol.js:39:16)
at Socket.<anonymous> (/home/pi/Documents/PinkBot/node_modules/mysql/lib/Connection.js:103:28)
at Socket.emit (events.js:160:13)
at addChunk (_stream_readable.js:269:12)

【问题讨论】:

  • 有错误吗?发生了什么事出乎你的意料?

标签: javascript node.js discord discord.js


【解决方案1】:

client.fetchUser(id) 返回一个承诺,从该承诺中您将获得一个用户。 您不能从用户中删除角色。您需要 GuildMember 才能删除角色。
而不是:var unmute = client.fetchUser(Id),你需要这样的东西:

message.guild.fetchMember(Id).then(guildMember => {
    guildMember.removeRole(role).catch(console.error);
})

【讨论】:

  • 没有消息对象是否可以做到这一点?
  • 你需要有一个公会ID。如果您将其用于多台服务器,则需要将公会 ID 保存到数据库中。如果你有公会ID,你可以这样做:client.guilds.get('123').fetchMember()
  • 有可能从用户 ID 中找到公会(查找该用户所在的所有公会),但如果该用户在多个服务器上,则可能会中断
猜你喜欢
  • 2021-04-16
  • 2021-08-26
  • 2021-11-02
  • 1970-01-01
  • 2020-11-23
  • 1970-01-01
  • 2023-03-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多