机器人将反应用户分配到 Discord 中的角色

时间:2021-07-29 07:24:01

标签: javascript discord.js bots

我正在尝试制作一个 Discord Bot,它可以读取服务器中的每个表情符号反应,并为做出反应的用户分配特定于表情符号的特定角色。

我的代码应该 将角色 红色 分配给在服务器中的任何消息中对 ? 做出反应的用户。 将角色 蓝色 分配给在服务器中的任何消息中对 ? 做出反应的用户。 将角色 黄色 分配给在服务器中的任何消息中对 ? 做出反应的用户。

以下是这些角色的 ID:

Red: <@&870162738561814578>
Blue: <@&870162842983206922>
Yellow: <@&870162885412810773>

这是机器人的代码片段:

const RYellow = '<@&870162885412810773>';
const RBlue = '<@&870162842983206922>';
const RRed = '<@&870162738561814578>';

const RRedEmoji = '?';
const RBlueEmoji = '?';
const RYellowEmoji = '?';

client.on('messageReactionAdd', async (reaction, user) => {
  if (reaction) await reaction.fetch();
  if (user.bot) return;
  console.log(reaction);
  if (reaction.emoji.name === RYellowEmoji) {
    await reaction.message.guild.members.cache.get(user.id).roles.add(RYellow);
    await reaction.message.guild.members.cache.get(user.id).roles.remove(RRed);
    await reaction.message.guild.members.cache.get(user.id).roles.remove(RBlue);
  }
  if (reaction.emoji.name === RRedEmoji) {
    await reaction.message.guild.members.cache.get(user.id).roles.add(RRed);
    await reaction.message.guild.members.cache
      .get(user.id)
      .roles.remove(RYellow);
    await reaction.message.guild.members.cache.get(user.id).roles.remove(RBlue);
  }
  if (reaction.emoji.name === RBlueEmoji) {
    await reaction.message.guild.members.cache.get(user.id).roles.add(RBlue);
    await reaction.message.guild.members.cache.get(user.id).roles.remove(RRed);
    await reaction.message.guild.members.cache
      .get(user.id)
      .roles.remove(RYellow);
  }
});

这里是错误:

<块引用>

E:\Projects\DBot\node_modules\discord.js\src\managers\GuildMemberRoleManager.js:93 throw new TypeError('INVALID_TYPE', 'roles', 'Role, Snowflake or Array or Collection of Roles or Snowflake'); ^

TypeError [INVALID_TYPE]: 提供的角色不是角色、雪花或 角色或雪花的数组或集合。 在 GuildMemberRoleManager.add (E:\Projects\DBot\node_modules\discord.js\src\managers\GuildMemberRoleManager.js:93:15) 在客户端。 (E:\Projects\DBot\index.js:49:71) 在 processTicksAndRejections (node:internal/process/task_queues:96:5) { [Symbol(code)]: 'INVALID_TYPE' }

那么,我做错了什么?

1 个答案:

答案 0 :(得分:0)

<@&870162885412810773> 不是 snowflake 或 ID。您需要删除 <@&>

const RYellow = '870162885412810773'
const RBlue = '870162842983206922'
const RRed = '870162738561814578'

// ...