Голосование за повторную рассылку сообщения в Discord.js

#javascript #node.js #discord #discord.js #chatbot

#javascript #node.js #Discord #discord.js #чат-бот

Вопрос:

Я довольно новичок в программировании и discord.js в общем, поэтому я использовал обработчик команд из руководства. Я пытаюсь создать бота, который, когда вы делаете!при запуске он выдает вам игру из gameList массива, который я создал. Это работает так, как задумано, и отправляется в виде расширенной вставки.

Я хотел сделать так, чтобы, если группа не была удовлетворена этой игрой, они могли повторно запустить ее, проголосовав не менее чем за 3. Для этого я попытался использовать реакции на сообщение, но не смог заставить что-либо действительно работать.

 module.exports = {
  name: 'spin',
  description: 'Spins the wheel!',
  execute(message) {
    const gameList = ['Games inside array'];
    var x = Math.floor(Math.random() * gameList.length);
    var games = gameList[x];

    const voteEmbed = new Discord.MessageEmbed()
      .setColor('#F8AA2A')
      .setTitle('🎲Game Spinner🎲')
      .addField(games, ' was the chosen game!');

    message.channel.send(voteEmbed).then((voteEmbed) => {
      voteEmbed.react('👎');
    });

    var noCount = 0;

    const filter = (reaction, user) => {
      return [`👎`].includes(reaction.emoji.name);
    };

    const collector = message.createReactionCollector(filter, { time: 10000 });
    collector.on('collect', (reaction, reactionCollector) => {
      if (reaction.emoji.name === `👎`) {
        noCount  = 1;
      }
    });

    collector.on('end', (reaction, reactionCollector) => {
      if (noCount >= 3) {
        message.channel.send(voteEmbed).then((voteEmbed) => {
          voteEmbed.react('👎');
        });
      }
    });
  },
};
  

Никаких ошибок не отображается, оно просто никогда не отправляет новое voteEmbed после того, как набрано три голоса. Извините, если это глупый вопрос.

Ответ №1:

Ваша ошибка находится здесь: const collector = message.createReactionCollector(filter, {time: 10000});

Вы создаете сборщик реакций на сообщение, полученное в конце, когда хотите прослушать реакции на отправленное сообщение.

Вам нужно заменить свой код чем-то вроде:

Основная правка заключается в изменении reactionCollector для прослушивания встроенного сообщения ^

 const Discord = require('discord.js');


module.exports = {
  name: "spin",
  description: "Spins the wheel!",
  execute(message) {
    const gameList = [Games inside array]
        var x = Math.floor(Math.random() * gameList.length);
        var games = gameList[x];

        const voteEmbed = new Discord.MessageEmbed()
        .setColor("#F8AA2A")
        .setTitle("🎲Game Spinner🎲")
        .addField(games, " was the chosen game!");


        message.channel.send(voteEmbed).then(voteEmbed => {
            voteEmbed.react('👎')

            var noCount = 0;
            
            const filter = (reaction, user) => {
                return [`👎`].includes(reaction.emoji.name);

            const collector = voteEmbed.createReactionCollector(filter, {time: 10000});
            collector.on('collect', (reaction, reactionCollector) => {
                if (reaction.emoji.name === `👎`) {
                    noCount =1
                }
            });

            collector.on('end', (reaction, reactionCollector) => {
                if (noCount >= 3){
                    message.channel.send(voteEmbed).then(voteEmbed => {
                        voteEmbed.react('👎')
                    })
                 }
            });
        })
      };
    }
};
  

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

1. Спасибо за ответ! Я попробовал приведенный выше код, и я по-прежнему не получал никаких ошибок, но после достижения требуемого количества голосов он не будет повторно отправлять новый voteEmbed. Если у вас есть какие-либо идеи о том, почему это не работает, я весь внимание.