【问题标题】:Discord Bot - limit to one reactionDiscord Bot - 仅限于一种反应
【发布时间】:2020-08-10 03:25:30
【问题描述】:

我目前正在开发 Discord 机器人,但遇到了需要限制反应的问题。我正在努力实现以下目标 - 如果用户选择反应,则应将其替换为最新反应。有人可以建议如何做吗?

这是我的screenshot 和我目前拥有的代码。

我的代码:

client.on('raw', event => {
  console.log(event);
  const eventName = event.t;
  if(eventName === 'MESSAGE_REACTION_ADD') {
    if(event.d.message_id === '70цw3748527414706191') {
      var reactionChannel = client.channels.get(event.d.channel_id);
      if(reactionChannel.messages.has(event.d.message_id))
      return;
      else {
        reactionChannel.fetchMessage(event.d.message_id)
        .then(msg => {
          var msgReaction = msg.reactions.get(event.d.emoji.name + ":" + event.d.emoji.id);
          var user = client.users.get(event.d.user_id);
          client.emit('messageReactionAdd', msgReation, user);
        })
        .catch(err => console.log(err));
      }
    }
  }
  else if(eventName === 'MESSAGE_REACTION_ADD') {
    if(event.d.message_id === '703748527414706191') {
      var reactionChannel = client.channels.get(event.d.channel_id);
      if(reactionChannel.messages.has(event.d.message_id))
      return;
      else {
        reactionChannel.fetchMessage(event.d.message_id)
        .then(msg => {
          var msgReaction = msg.reactions.get(event.d.emoji.name + ":" + event.d.emoji.id);
          var user = client.users.get(event.d.user_id);
          client.emit('messageReactionRemove', msgReation, user);
        })
        .catch(err => console.log(err));
      }
    }
  }
});

client.on('messageReactionAdd', (messageReaction, user) => {

  var roleName = messageReaction.emoji.name;
  console.log(roleName);
  var role = messageReaction.message.guild.roles.find(role => role.name.toLowerCase() ===
  roleName.toLowerCase());

  if(role) {
    var member = messageReaction.message.guild.members.find(member => member.id === user.id);
    if(member) {
      member.addRole(role.id);
      console.log("Success");
    }
  }
});

client.on('messageReactionRemove', (messageReaction, user) => {
  var roleName = messageReaction.emoji.name;
  var role = messageReaction.message.guild.roles.find(role => role.name.toLowerCase() ===
  roleName.toLowerCase());

  if(role) {
    var member = messageReaction.message.guild.members.find(member => member.id === user.id);
    if(member) {
      member.removeRole(role.id);
      console.log("Success");
    }
  }
});

感谢您的指导!

【问题讨论】:

    标签: node.js discord discord.js


    【解决方案1】:

    您可以检查 messageReactionAdd,如果他们已经有另一个颜色角色,那么您需要每个颜色角色都有一个前缀或有一个存在哪些颜色角色的数组。

    开始

    client.on('messageReactionAdd', (reaction, user) => {
        const guild = reaction.message.guild;
        const roleName = reaction.emoji.name.toLowerCase();
        console.log(roleName);
        const role = guild.roles.cache.find(r => r.name.toLowerCase() === roleName);
    
        if (role) {
            const member = guild.members.cache.find(m => m.id === user.id);
    
            //check if they already have a color role
            if (alreadyColorRole) {
                //either make it so he cant react until he unreacts to the role
                //or automatically remove the other reaction.
                reaction.remove();
            } else {
                member.addRole(role.id);
                console.log("Success");
            }
        }
    });
    

    【讨论】:

    • 不起作用 :( 真的没有其他东西要写了
    • 它的哪一部分不起作用?该代码不是完整的部分,您必须添加自己的变量以查看它们是否已经具有颜色角色。阅读代码里面的cmets
    猜你喜欢
    • 2022-01-24
    • 2020-06-29
    • 2020-08-16
    • 2020-04-01
    • 2020-08-02
    • 1970-01-01
    • 2020-07-16
    • 2021-05-12
    • 2021-08-10
    相关资源
    最近更新 更多