Добавьте роль людям, которые реагируют определенным смайликом в определенном канале

#discord.js

#discord.js

Вопрос:

Я пытаюсь создать discord.js бот для моего сервера, который я создал для людей в моей школе. Я пытаюсь создать #classes канал, и если вы реагируете на определенные сообщения, это дает вам роль (которая дает вам доступ к текстовому каналу для этого класса).

 client.on('messageReactionAdd', (reaction, user) => {
  console.log("client.on completed.")
  if (message.channel.name === 'classes') {
    console.log("if(message) completed.")
    if (reaction.emoji.name === "reminder_ribbon") {
      console.log("emoji test completed.")
      const guildMember = reaction.message.guild.members.get(user.id);
      const role = reaction.message.guild.roles.find(role => role.name === "FACS");
      guildMember.addRole(role);
    }
  }
});
  

Это то, что я пробовал до сих пор, однако это не дает мне / другим людям, отреагировавшим на это, роли и не возвращает сообщение об ошибке.

P.S. Кроме того, как бы я мог сделать так, чтобы, когда они не реагировали, это удаляло роль?

Редактировать: Кажется, что он получает реакции только из кэшированных сообщений / сообщений, отправленных после запуска бота. Кроме того, сообщение не определено в первом, если(message.channel.id ) сообщение.

Комментарии:

1. Вы также используете, <message> хотя это не определено в вашей области, просто reaction и user . При удалении реакции генерируется messageReactionRemove событие, после чего вы можете использовать .removeRole('id');

2. Как бы мне убедиться, что канал является каналом #classes?

Ответ №1:

Попробуйте использовать следующий код:

 client.on('messageReactionAdd', (reaction, user) => {
  if (reaction.message.channel.id === '552708152232116224') {
    if (reaction.emoji.name === "reminder_ribbon") {
      const guildMember = reaction.message.guild.members.get(user.id);
      const role = reaction.message.guild.roles.get('552709290427940875');
      guildMember.addRole(role);
    }
  }
});
  

Прежде всего, reaction.users это объект со всеми пользователями, которые отреагировали на сообщение, поэтому сначала вам нужно определить, какому пользователю вы хотите назначить роль. Я исправил эту выборку guildMember с user.id помощью.

Вторая ошибка заключалась в том, что вы пытались присвоить идентификатор роли a guildMember , хотя сначала вам нужно получить роль, а затем назначить объект роли guildMember .

Комментарии:

1. Это сделало то же самое, что и мой другой код; ничего не делать. Я не уверен, что делать дальше. Возможно, если (сообщение …. и т.д. неверно? Если да, то как мне это исправить? Предполагается, что реакция была в #classes

2. Вы также можете проверить это с помощью message.channel.name === 'classes' (Работает, только если у вас есть только один текстовый канал гильдии с таким названием)

3. Но есть ли какая-либо ошибка, которая выдается в вашей консоли? Я не могу вам помочь, не зная, где мне искать ошибки…

4. Ошибок нет. Возможно, это не запускается? Означает ли это, что это будет проблемой в первом из 2 «if() {«ов? В противном случае это будет работать или возвращать / регистрировать ошибки.

5. Попробуйте установить разные журналы консоли после каждой строки, чтобы увидеть, где мы должны искать проблемы