messageReactionAdd无法添加角色

时间:2018-06-17 01:08:56

标签: javascript node.js discord.js

我正在为服务器制作私人争用机器人。我见过像SweeperBot这样的机器人,还有一些机器人使用反应收集器来分配角色。他们中的大多数都不是discord.js,所以我自己编码。

我有messageReactionAdd事件设置,整个代码块工作,我测试了每一行。每行一行,特别是错误。

exports.run = (bot, reaction, user) => {
  const rmsg = reaction.message;
  if (rmsg.channel === rmsg.guild.channels.find('name', 'rules') && rmsg.id === '457681660708651010' && reaction.emoji.name === '') {
    const member = rmsg.guild.fetchMember(user)
    const MemberRole = rmsg.guild.roles.find('name', 'Mythical Member');
    member.addRole(MemberRole).catch(console.error);
  }
};

最后一行member.addRole(MemberRole).catch(console.error);是错误的行,每次添加反应时发送TypeError: member.addRole is not a function

其他一切都有效,就像我之前测试过的那样。

我已尝试测试此member变量的不同方法,因为我知道user不是GuildMember对象。

我正在尝试使用const member = rmsg.guild.fetchMember(user)将其转换为一个并且它确实有效,返回GuildMember对象,但是当放入addRole行时,它会出错。我以同样的方式在许多其他命令中使用addRole,但也许事件根本无法使用它?我只是遗漏了一些明显的东西吗我已多次查看文档,并在如此多的不和谐服务器中询问,但无济于事。

1 个答案:

答案 0 :(得分:1)

guild.fetchMember()没有返回Guild会员。相反,它返回一个Promise。你需要等到你有Promise的响应(这将是一个GuildMember),然后给出这个角色。
有几种方法可以做到这一点:
使用.then()

const MemberRole = rmsg.guild.roles.find('name', 'Mythical Member');
rmsg.guild.fetchMember(user).then(member => {
    member.addRole(MemberRole).catch(console.error);
})

或者将整个方法切换为异步:

exports.run = async (bot, reaction, user) => {

然后等到fetchMember收到回复:

const member = await rmsg.guild.fetchMember(user);