Я пытаюсь проверить, когда кто-то реагирует на один из двух смайлов, которые бот публикует во встраивании, но когда бот реагирует с во встраивании, он запускает оператор if (response.emoji.name === '🇩') и я не уверен, как игнорировать первые две реакции бота, на которые люди могут реагировать.

let msg2 = await orderChannel.send({embed: embed});
msg2.react('✅');
msg2.react('🇩');
 const reactions = await msg2.awaitReactions(reaction => reaction.emoji.name == '✅' || reaction.emoji.name == '🇩', {time: 86400000, max: 1});
 let reaction = await reactions.first();

if (reaction.emoji.name === '✅') {
    await msg2.delete();
    await msg.author.send(`Your order was completed. Please come to the pharmacy with $ ${howmany}000`);
    return;
};

if (reaction.emoji.name === '🇩') {
    await msg2.delete();
    await msg.author.send(`Your order has been delayed, please message Pixel for info.`);
    return;
};

} ;

0
Pixel 24 Окт 2018 в 01:46

2 ответа

Лучший ответ

На мой взгляд, это сработает лучше всего. Фильтр проверяет смайлы и автора или смайлы D и автора. Таким образом, если бот или кто-либо другой в этом отношении реагирует, он игнорирует его.

let filter = (reaction, user) => reaction.emoji.name == '✅' && user.id == msg.author.id || reaction.emoji.name == '🇩' && user.id == msg.author.id;
const reactions = await msg2.awaitReactions(filter, {time: 86400000, max: 1});

Это работает хорошо, поскольку И (&&) выполняется перед ИЛИ (||).

Я также немного изменил форматирование, чтобы его было легче читать. (разделен на переменную фильтра)

0
lieuwe_berg 24 Окт 2018 в 15:54

Самым быстрым обходным решением, которое я мог придумать, было использование свойства MessageReaction.count, которое подсчитывает количество рассматриваемых реакций в сообщении. В вашем случае вы, вероятно, могли бы сказать if (reaction.emoji.name === '✅' && reaction.count > 1) {. . .}

0
TheLuckyRobot 24 Окт 2018 в 00:12
52958801