Discord .js 清除命令 v12(稳定版)

时间:2020-12-18 23:03:45

标签: discord discord.js

我对 discord.js 相当陌生,并且正在学习。我想创建一个 !purge 命令,它将删除聊天中指定数量的消息。我该怎么做?

非常感谢!

1 个答案:

答案 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