Discord Bot - ограничение до одной реакции - PullRequest
0 голосов
/ 26 апреля 2020

В настоящее время я работаю над бот-диссонансом и столкнулся с проблемой, когда мне нужно ограничить реакцию. Я пытаюсь достичь следующей цели - если пользователь выбирает реакцию, ее следует заменить самой новой реакцией. Может кто-нибудь посоветовать, как это сделать?

Вот мой снимок экрана и код того, что у меня есть на данный момент.

Мой код:

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");
    }
  }
});

Спасибо за руководство!

1 Ответ

0 голосов
/ 26 апреля 2020

Вы можете проверить messageReactionAdd, если у них уже есть другая цветовая роль, при этом вам потребуется либо каждая цветовая роль, чтобы иметь префикс, либо массив существующих цветовых ролей.

heres начало

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");
        }
    }
});
...