Discord.js从表情符号提取的集合中过滤某些消息



所以,我已经为我的discordbot创建了一个delete命令,到目前为止,它几乎可以正常工作。

//stuff that checks permission and validation of inputs, not important now
const messages = await channel.messages.fetch({ limit: limiter });
const { size } = messages;
messages.forEach((message) => message.delete().catch((error) => logchannel.send(`Irgendwas ist schiefgelaufen ${message.author} :sob:`)));
channel.send(`${size} Nachrichten wurden gelöscht :wastebasket:`);
logchannel.send(`${size} Nachrichten wurden von ${message.member.displayName} aus ${channel} gelöscht.`);

//stuff sending out various errormessages for wrong permissions or inputs

非常直接:获取消息,计算在哪里获取的消息数量,删除获取的消息,发出logmessage"X个amout消息已从信道Y〃中删除;

下面是我不知道该怎么办的部分:我想过滤掉所有有特定表情符号作为反应的消息,这样它们就可以跳过删除,并发出类似"表情符号"的日志消息;删除的X个消息、跳过的Y个消息";但我做不到这样的工作。唯一有效的方法是使用message.forEach(message(将删除过程外包给另一个函数,该函数使用if语句逐个检查每条消息,而不是删除或不删除它们。但那样的话,我就无法获得日志消息的正确计数。。。

有人知道怎么做吗?

一个简单的方法是过滤您获取的每条消息的反应:

const messages = await message.channel.messages.fetch({limit: limiter});
// Use Array.from(); on the fetched messages to filter stuff easily
const filteredMessages = Array.from(messages.values()).filter(m => !m.reactions.resolve("your emote's ID"));

// Use bulkDelete(); to delete all messages at once. You're limited at 100 messages per bulk
// but you can bypass this with a while loop
message.channel.bulkDelete(filteredMessages, true);

您可以使用filteredMessages.length获取所有已删除的消息

以及通过执行messages.size - filteredMessages.length来跳过的所有消息

最新更新