Как добавить роль, основанную на реакции сообщения? - PullRequest
0 голосов
/ 19 января 2020

Что-нибудь удаленно не так с этим кодом? ошибки не появляются, и нет реакции, как только бот отправляет сообщения. любая помощь будет оценена, спасибо заранее!

const a = msg.guild.roles.get('666712822985654322'); //Verified User
// the role constants are in the same chronological order as below.
const filter = (reaction,user) => ['668236468384169986'].includes(reaction.emoji.name);

const embed = new Discord.RichEmbed()
  .setColor(0x00FF00)
  .setTitle('Rules')
  .setDescription(`
    In order to gain access to the rest of the server you must read and abide by these rules: 
    By reacting with :white_check_mark: you agree to these rules
    Roles:
    :white_check_mark: ${a.toString()}`)
  .setThumbnail(msg.author.avatarURL)
  .addField('Rule #1:You do not talk about fight club', 'Second Rule: You do not TALK about fight club')
  .setFooter("Use \'!command list\' to get aquainted with Peb 3000");

  msg.channel.send(embed).then(async message => {

    await message.react('668236468384169986'); //white check mark

    message.awaitReaction(filter, {})
      .then(collected =>{

        const reaction = collected.first();

        switch(reaction.emoji.name) {
          case('\:white_check_mark:'):
            message.member.addRole(a).catch(err => {
              console.log(err);
              return message.channel.send(`Error adding you to this role: **${err.message}**`);
            });
            message.channel.send(`You have been added to the **${a.name}** role!`).then(m => m.delete(3000));
            break;
        }
      }).catch(collected => {
        return msg.collected.send(`I couldn't add you to this role!`)
      })
});

Ответы [ 2 ]

0 голосов
/ 20 января 2020

Собранные опции сработают, когда сборщик завершит сбор, вы не предоставите никаких опций, чтобы остановить сборщик, поэтому его никогда не произойдет. 1 способ дать роль члену реагировать, следовать этому коду. Но когда бот перезапустится, вам нужно снова использовать эту команду и создать коллектор.

const roleToAdd = msg.guild.roles.get('666712822985654322'); //Verified Role
if(!roleToAdd) return

          let embed = new Discord.RichEmbed()
            .setColor(0x00FF00)
            .setTitle('Rules')
            .setDescription(`
            In order to gain access to the rest of the server you must read and abide by these rules: 
            By reacting with :white_check_mark: you agree to these rules
            Roles:
            :white_check_mark: ${a.toString()}`)
            .setThumbnail(msg.author.avatarURL)
            .addField('Rule #1:You do not talk about fight club', 'Second Rule: You do not TALK about fight club')
            .setFooter("Use \'!command list\' to get aquainted with Peb 3000");
            msg.channel.send(embed).then(message => {
                const filter = (reaction, user) => reaction.emoji.name === '✅' && user.id === msg.author.id && reaction.message.id = message.id
                const collector = message.createReactionCollector(filter, {});
                collector.on('collect', r => {
                    if(r.emoji.name === '✅') {
                        let member = message.guild.members.get(reaction.users.last().id)
                        member.addRole(roleToAdd)
                        .then( member => {
                            message.channel.send(`You have been added to the **${roleToAdd.name}** role!`).then(m => m.delete(3000));
                        })
                        .catch(console.error)
                    }
                })
                collector.on('end', collected => console.log(`Collected ${collected.size} items`));
            })

Способ № 2 - это событие listen responseadd. После перезапуска его будет работать.

    bot.on('messageReactionAdd', (reaction, user) => {
        if(reaction.message.id === 'YOUR MESSAGE ID' && reaction.emoji.name === 'youreactionname') {
let meber = reaction.message.guild.members.get(user.id)
member.addRole('yourRole')
} 

        .catch(console.error)
      });
0 голосов
/ 20 января 2020

Я бы порекомендовал прочитать оба Руководство для идиота - Использование Emojis , а также Discord. js Руководство - Реакции , так как ваш нынешний подход к смайликам Unicode не будет работать .

В вашем случае :white_check_mark: должно быть или эквивалентным.

...