Как я могу заставить сборщик реакций выбрать первые 2 реакции?

#javascript #discord.js

#javascript #discord.js

Вопрос:

Итак, я пытаюсь создать сборщик реакций, который приостанавливает / воспроизводит музыку после реакции пользователя на реакцию, но мой сборщик останавливается, когда пользователь реагирует 1 раз (пользователь не может реагировать дважды, только один раз), как я могу это исправить? это мой код:

  queue.textChannel.send(thing).then((question) => {
          question.react('⏸');
          question.react('▶️');
          question.react('⬅️');
          question.react('⏹️');


          const filter = (reaction, user) => {
             return ['⏹️', '⬅️','⏸','▶️'].includes(reaction.emoji.name) amp;amp; !user.bot;
          };

          const collector = question.createReactionCollector(filter, {
             max: 1,
             time: 0
          }); 


          collector.on('end', (collected, reason) => {
             if (reason === 'time') {
                msg.reply('Times Up');
             } else {

                const userReaction = collected.array()[0];
 
                const emoji = userReaction._emoji.name;
 

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

1. Почему вы используете эту max: 1 опцию, если хотите получить более одного сообщения?

2. Я использовал max: 2, и это не работает даже для одной реакции.

3. Что ж, если вы только прослушиваете end событие, оно не сработает, если вы соберете одну реакцию. end срабатывает только тогда, когда сборщик закончил сбор (т.е. достиг max или time ). Вместо этого вы должны использовать collect событие.

4. Спасибо за помощь: D

5. Пожалуйста 🙂

Ответ №1:

Я исправил это, изменив сборщик с «end» на «collect» и удалил параметр max:.

             queue.textChannel.send(thing).then((question) => {
          question.react('⏸');
          question.react('▶️');
          question.react('⬅️');
          question.react('⏹️');


          const filter = (reaction, user) => {
             return ['⏹️', '⬅️','⏸','▶️'].includes(reaction.emoji.name) amp;amp; !user.bot;
          };

      const collector = question.createReactionCollector(filter, { time: 400000 });



      collector.on('collect', (reaction, reactionCollector) => {

 
                const emoji = reaction.emoji.name;

 

@ZsoltMeszaros помог мне с правильным ответом.