Discord.js:只有一种反应

时间:2020-07-16 17:43:05

标签: node.js discord bots discord.js

我正在创建Discord机器人,当用户在消息上添加特定的表情符号反应时,该角色将发挥特定的作用。

我只想让用户选择一种反应;

如果用户选择另一个,则应该删除同一用户的其他反应。

我只找到两种情况的代码:

  1. 删除一条消息上的所有表情符号反应。
    message.reactions.cache.get('emojiId').remove()
  1. 删除用户的反应。
    const userReactions = message.reactions.cache.filter(reaction => reaction.users.cache.has(userId));
try {
    for (const reaction of userReactions.values()) {
        await reaction.users.remove(userId);
    }
} catch (error) {
    console.error('Failed to remove reactions.');
}

他们都不适合我,因为他们删除了对邮件的所有反应。

我的代码的一部分:

client.on('messageReactionAdd', async (reaction, user) => {
    if(reaction.partial) await reaction.fetch()
    const { message } = reaction
    if (message.id === rulesMessageId) {
        const member = message.channel.guild.members.cache.get(user.id)
        if (reaction.emoji.id === emojiIds.HEAVEN ) {
          for (var i = 0 in guildRoles) {
            if (guildRoles[i] != guildRoles.HEAVEN)
            member.roles.remove(guildRoles[i])
          }
          member.roles.add(guildRoles.HEAVEN)   
        }

1 个答案:

答案 0 :(得分:0)

我不知道如何在答案中使用您的部分代码,所以我自己做:

client.on("messageReactionAdd", (reaction, Member) => {
    if(Member.bot) return;
    reaction.message.reactions.cache.map(x=>{
        if(x._emoji.name != reaction._emoji.name&&x.users.cache.has(Member.id)) x.users.remove(Member.id)
    })
});

我得到消息中的所有反应并映射它们以检查用户是否有反应。我还检查反应是否与当前反应以仅删除其他反应相同。 希望即使晚了10个月也能帮到你^^