我如何确保只有一个反应可以添加到邮件中?

时间:2020-10-09 20:08:02

标签: discord.js

我正在创建一个角色反应机器人,我希望如果一个成员已经单击一个反应并单击另一个,它会删除前一个反应和与之关联的角色,并为他提供与最后一个单击的角色相对应的角色(有15种反应),我正在编写类似于以下代码:

free

是否有一种更简便快捷的方法来完成我想做的事情,而无需为每个角色创建let msg = reaction.message; let msgGuild = msg.guild; let userGuild = msgGuild.members.cache.get(user.id); let userRole = userGuild.roles; if(reaction.message.channel.id === "764148072498200589") { if(reaction.emoji.name === "RedRoleID") { if(userRole.cache.has("BaseRoleID")) { userRole.remove("BaseRoleID"); userRole.add("RedRoleID"); } else if(userRole.cache.has("OrangeRoleID")) { userRole.remove("OrangeRoleID"); userRole.add("RedRoleID"); } }; };

1 个答案:

答案 0 :(得分:0)

我认为您可以将所有表情符号名称组成一个数组,然后使用Array.prototype.forEach检查所有这些表情符号。

let { emoji, message, message: { guild, channel }} = reaction;
let { roles } = guild.member(user.id);
const emojis = ['BaseRoleID', 'RedRoleID', 'OrangeRoleID', 'etc'];
if (channel.id === '764148072498200589') {
 emojis.forEach((id) => (roles.cache.has(id) ? roles.remove(id) : id));
 roles.add(emoji.name);
}

编辑:我的错误,我以为您已将表情符号命名为相应的角色ID。如果您不想这样做,可以使用以下替代方法:

let { emoji, message, message: { guild, channel }} = reaction;
let { roles } = guild.member(user.id);
const emojis = [
  { emote: 'EmojiID', role: 'RoleID' }, 
  'continue this pattern for all roles and emotes'
];

if (channel.id === '764148072498200589') {
  emojis.forEach(({ emote, role }) => {
    if (roles.cache.has(role))
      return roles.remove(role)
    if (emoji.id === emote) roles.add(role)
  });
};