【发布时间】:2020-12-19 07:22:56
【问题描述】:
我对 discord.js 还很陌生,只是边走边学。我想创建一个 !purge 命令,它将删除聊天中指定数量的消息。我该怎么做呢?
非常感谢!
【问题讨论】:
标签: discord discord.js
我对 discord.js 还很陌生,只是边走边学。我想创建一个 !purge 命令,它将删除聊天中指定数量的消息。我该怎么做呢?
非常感谢!
【问题讨论】:
标签: discord discord.js
您可以使用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
【讨论】: