我对discord.js还是个新手,只是边学边学。我想创建一个!purge命令来删除聊天中指定数量的消息。我该怎么做呢?
非常感谢!
发布于 2020-12-19 07:22:57
您可以使用message.channel.bulkDelete()来完成此操作。假设您已经设置了client.on("message"),以便可以将命令与args分开,那么清除给定数量的消息的方法相当简单。
下面是一个直接取自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权限,使用if (message.member.hasPermission("MANAGE_MESSAGES")) doPurge(...)之类的命令。
相关资源:
https://discord.js.org/#/docs/main/stable/class/TextChannel?scrollTo=bulkDelete
https://stackoverflow.com/questions/65365034
复制相似问题