我正在尝试使用Discord.js机器人在JavaScript中创建菜单。到目前为止,除我应用删除消息的响应外,其他所有操作均正常。该消息被删除,但是此错误在控制台中被发送垃圾邮件:
DiscordAPIError: Unknown Message
我在其他区域进行了检查,并小心地只删除了一次消息,但是即使如此,我仍然感觉到该漫游器试图多次删除它。我还尝试过return来尝试停止代码,并为delete方法设置一个计时器。这些尝试都没有解决错误。
这是我正在使用的代码:
message.channel.send(exampleEmbed2).then(sentEmbed => {
sentEmbed.react('?');
sentEmbed.react('✅');
sentEmbed.react('❌');
client.on('messageReactionAdd', (reaction, user) => {
if (!user.bot && reaction.emoji.name === '?') {
sentEmbed.delete();
}
});
});
答案 0 :(得分:2)
正如Gruntzy所解释的...
...使用此代码,每当有人对任何带有message的消息作出反应时,都会运行您的代码。
与将另一个侦听器附加到嵌套的message.channel.send(exampleEmbed2)
.then(async sentEmbed => { // Somewhat awkward to switch to async/await here, but much cleaner.
await sentEmbed.react('?');
await sentEmbed.react('✅');
await sentEmbed.react('❌');
const filter = (reaction, user) => ['?', '✅', '❌'].includes(reaction.emoji.name) && user.id === message.author.id
const [reaction] = await sentEmbed.awaitReactions(filter, { maxMatches: 1 });
// ^^^^^^^^^^
// This is a destructuring
// assignment. It takes the
// first (and only) element
// from the Collection/Map.
if (reaction.emoji.name === '?') await sentEmbed.delete();
// Do stuff with the other reactions...
})
.catch(console.error);
事件相反,请使用Reaction Collectors。这些是用于此目的的,并且只会在您将其附加到邮件上的反应时触发。
请考虑以下示例,该示例使用基于承诺的收集器版本(请参见Message.awaitReactions()
)...
{{1}}