所以,我已经为我的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
来跳过的所有消息