Бот отправляет сообщение о реакции без реакции - PullRequest
1 голос
/ 19 апреля 2020

Таким образом, мой бот теперь мгновенно отправляет сообщение о реакции «А» после первого сообщения, но без реакции пользователя. Это не должно делать это. Почему? У меня нет ошибок.

client.on("guildMemberAdd", member => {
    try {
        member.send(`Hello ${member}, welcome to the PotatoHost Server! 
I want to help you and so my question is: Do you want to buy a server or do you need more informations first? \n
A: I want to buy a server
B: I need more informations first \n
Please react to this message with A or B.`)

        .then(function (message) {
            message.react("?")
            message.react("?")

            const filter = (reaction, user) => {
                return ['?', 'B'].includes(reaction.emoji.name) && user.id === message.author.id;
            };

            message.awaitReactions(filter, { max: 1, time: 3600000, errors: ['time'] })
                .then(collected => {
                    const reaction = collected.first();

                    if (reaction.emoji.name === '?') {
                        message.channel.send('Ok, so you want to buy a server. Let me recommend you to visit <#699374469977735208>.');
                    }
                    else {
                        message.channel.send('Ok, so you need more informations first. Let me recommend you to visit <#699374469977735208>.');
                    }    
                })
                .catch(collected => {
                    message.channel.send('You reacted with neither A or B.');
                })
        });
    }catch (err) {
         console.log(err)
    }
})

1 Ответ

0 голосов
/ 19 апреля 2020

кажется, что вы перезаписываете исходный message объект. В своем фильтре вы хотите убедиться, что это идентификатор участника, поэтому никто другой не может его запросить,

&& user.id === message.author.id

Однако message в данном случае относится к сообщению, которое отправляет ваш бот - .then(function (message) {. Поэтому ваш код считывает фильтр, так как идентификатор должен соответствовать вашему боту, и, поскольку ваш бот реагирует с A, он выдает сообщение о реакции A.

Чтобы исправить это, измените указанный выше фильтр на

&& user.id === member.id

РЕДАКТИРОВАТЬ

Вторая проблема: B. Ваш фильтр только находит ? или B, вам нужно изменить B на версию Emoji в return ['?', 'B'].

...