Как мне заставить своего бота обнаружить реакцию, а затем отправить сообщение, если реакция является специфической c реакцией? - PullRequest
1 голос
/ 31 марта 2020

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

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

message.awaitReactions(filter, { max: 1, time: 5000, errors: ['time'] })
    .then(collected => {
        const reaction = collected.first();
        if (reaction.emoji.name === ':zany_face:') {
            message.reply('test.');
        }
    })
    .catch(collected => {
        message.reply('You didn\'t react in time');
    });

любая помощь получена с благодарностью:)

Ps: я использую это от задняя часть встраивания, поэтому я хочу, чтобы встраивание имело реакцию на это, хотя я сделал это немного, но просто не уверен, как эффективно связать код между встраиванием и ожидающей реакцией

1 Ответ

1 голос
/ 31 марта 2020

Это должно сработать:

const filter = (reaction, user) => !user.bot && user.id ==usr.id; //makes sure only the message author can react

let msg = message.channel.send("React to me!")

//creates a collector on the message for 5 seconds
let collector = msg.createReactionCollector(filter, { time: 5000 });
//opens the reaction collector
collector.on('collect', async (reaction, collector) => {
    //checks which reaction was given
    const chosen = reaction.emoji.name;

    if(chosen == "EMOJIHERE"){
        //removes the user's reaction
        msg.reactions.get("EMOJIHERE").remove(message.author.id).catch(allerrors)
        //sends a message back
        message.channel.send("This is an answer.")
    }
})
...