我对 discord.js 相当陌生,并且正在学习。我想创建一个 !purge 命令,它将删除聊天中指定数量的消息。我该怎么做?
非常感谢!
答案 0 :(得分:0)
您可以使用 message.channel.bulkDelete()
来执行此操作。假设您已经设置了 client.on("message")
,以便您可以将命令与参数分开,那么清除给定数量的消息的方法非常简单。
这是一个直接取自 my own discord bot 的示例(因此经过全面测试):
//Mass-deletes messages
function doPurge(message, args) {
var purgeamnt = args[0];
var purgelimit = Number(purgeamnt) + 1;
message.channel.messages.fetch({ limit: purgelimit }).then(messages => {
message.channel.bulkDelete(messages);
message.reply("deleted " + messages.array().length + " messages, including deletion command.");
}).catch(err => {
message.channel.send("Failed to delete messages. This may be caused by attempting to delete messages that are over 2 weeks old.");
});
}
同样,这是假设您已经创建了某种 args
变量,它是您命令的所有参数的数组。例如,如果您想清除 5 条消息,您可以执行 !purge 5
。在这种情况下,"5"
应该是 args[0]
。如果您以这种方式设置了 args 变量,则只需调用上述方法 (doPurge(message, args);
) 即可清除消息。
请注意两点:
a) bulkDelete()
将只允许您删除超过两周的消息。如果不删除频道中的所有消息,或者不牺牲速度和效率,就无法绕过这一点。
b) 在允许他们使用此命令之前,您应该检查用户的权限。确保他们拥有 MANAGE_MESSAGES
权限或 ADMINISTRATOR
perm,使用类似 if (message.member.hasPermission("MANAGE_MESSAGES")) doPurge(...)
的内容。
相关资源:
https://discord.js.org/#/docs/main/stable/class/TextChannel?scrollTo=bulkDelete