Search code examples
javascriptdiscord.jsbots

Discord Bot in JS not reading reactions


I am currently developing a Discord bot and I am trying to add a kind of menu as the bot is supposed to be a guide for a game. To make that work I am trying to add bot messages after reacting to the prior message. I am testing it on a test message and the bot is supposed to send Test1 if a user reacts with 👍

After reacting, the bot simply does nothing. It doesn't crash nor does it send the intended message.

My code:

case 'Testembed': //Testembed mit Reactions
    message.channel.send({embeds: [Testembed.de.data]}).then((question) => {
        question.react('🙃')
        question.react('👍')
      
        const filter = (reaction, user) => {
            return ['👍','🙃'].includes(reaction.emoji.name) && !user.bot;
        };
        const collector = question.createReactionCollector(filter, { //<-- Here it stops working
            max: 1,
            time: 15000
        });

        collector.on('end', (collected, reason) => {
            if (reason === 'time') {
                message.channel.send('Ran out of time...');
            } else {
                let userReaction = collected.array()[0];
                let emoji = userReaction._emoji.name;

                if (emoji === '👍'){
                    message.channel.send('Test1');
                } else if (emoji === '🙃') {
                    message.channel.send('Test2');
                } else {
                    message.channel.send("I don't understand ${emoji}...");
                }
            }
        });
    });
    break;

Edit: Bot now throws new error:

throw er; // Unhandled 'error' event
      ^

TypeError: collected.array is not a function

Solution

  • In [email protected], the method to create a reaction collector changed. Now, the collector would only take one argument and the filter variable would have to be passed in the object. An example would look like this:

    const filter = (reaction, user) => {
        return ['👍','🙃'].includes(reaction.emoji.name) && !user.bot;
    };
    const collector = question.createReactionCollector({ 
        max: 1,
        time: 15000,
        filter
    });