我正在尝试测试有人对机器人在嵌入物中发布的2种表情符号之一做出反应的时间,但是当机器人在嵌入物中做出反应时,它会触发if(reaction.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 :(得分:0)
我能想到的最快的解决方法是使用MessageReaction.count
属性,该属性计算消息中有问题的反应的数量。就您而言,您可能会说
if (reaction.emoji.name === '✅' && reaction.count > 1) {. . .}
答案 1 :(得分:0)
我认为这将是最好的。过滤器检查检查表情符号和作者或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});
这很好用,因为AND(&&)在OR(||)之前执行。
我还稍微调整了格式以使其更易于阅读。 (分成一个过滤器变量)