为在特定频道中对特定表情符号有反应的人添加角色

时间:2019-03-09 14:40:17

标签: discord.js

我正在尝试为我为学校里的人们制作的服务器制作discord.js机器人。我正在尝试建立一个#classes频道,如果您对某些消息做出反应,它将给您一个角色(使您可以访问该类的文本频道)。

client.on('messageReactionAdd', (reaction, user) => {
  console.log("client.on completed.")
  if (message.channel.name === 'classes') {
    console.log("if(message) completed.")
    if (reaction.emoji.name === "reminder_ribbon") {
      console.log("emoji test completed.")
      const guildMember = reaction.message.guild.members.get(user.id);
      const role = reaction.message.guild.roles.find(role => role.name === "FACS");
      guildMember.addRole(role);
    }
  }
});

这是我到目前为止尝试过的方法,但是,它没有使我/其他人对此角色做出反应,也没有返回错误消息。

P.S。另外,当他们不反应时,我怎么能做到这一点呢?

编辑:看来,它只会从bot启动后发送的缓存消息/消息中获得反应。另外,在第一条if(message.channel.id)消息上未定义消息。

1 个答案:

答案 0 :(得分:0)

尝试使用以下代码:

client.on('messageReactionAdd', (reaction, user) => {
  if (message.channel.id === '552708152232116224') {
    if (reaction.emoji.name === "reminder_ribbon") {
      const guildMember = reaction.message.guild.members.get(user.id);
      const role = reaction.message.guild.roles.get('552709290427940875');
      guildMember.addRole(role);
    }
  }
});

首先,reaction.users是一个对象,其中包含所有对该消息做出反应的用户,因此您首先必须定义要将角色分配给哪个用户。我修复了使用guildMember来获取user.id的问题。

第二个错误是您尝试为guildMember分配角色ID,尽管您首先必须获取角色,然后再将角色Object分配给guildMember