我正在尝试为我的自定义 discord bot 制定一个明确的命令,并且我已经编写了一些代码并且它运行良好!问题是该命令删除的消息比它说的少 1 条消息,例如:>clear 5
删除 4 条消息,我知道这是因为编写用于启动批量删除的命令本身是一条消息,但我没有不希望发生这种情况,args[0] + 1
似乎不起作用!
这是我当前的代码:
module.exports = {
name: 'clear',
description: "Delete/Clear messages with a simple command",
async execute(message, args) {
if (message.member.permissions.has("KICK_MEMBERS")) {
if (!args[0]) return message.reply("Please enter the amount of messages to clear!");
if (isNaN(args[0])) return message.reply("Please type a real number!");
if (args[0] > 100) return message.reply("You can't remove more than 100 messages at once!");
if (args[0] < 1) return message.reply("You have to delete at least one message!");
await message.channel.messages.fetch({ limit: args[0] }).then(messages => {
message.channel.bulkDelete(messages);
message.channel.send("<a:ces_Tick:774694116042342411> **Successfully deleted " + "`" + args[0] + " messages`**")
.then(msg => {
msg.delete({ timeout: 3000 })
})
});
} else {
message.channel.send("You don't have sufficient permissions to use this command!");
}
}
}
提前致谢! :)
答案 0 :(得分:1)
在您的情况下,您正在删除包含您的命令的消息。例如:如果是 >clear 3
,则清除包含您的命令消息的消息。所以为了删除命令消息之外的消息有3种情况。
第一个是像您说的那样删除 +1 消息。如果您不想在消息数量上增加 +1,那么您可以按照 second 在发送命令消息后立即删除消息。 例如:
if(args[0]==='clear'){
message.delete(); //deletes the message that has been sent by user.
message.channel.bulkDelete(messages);
}
第三是您可以使用 before
参数,以便在特定消息之前删除消息。
例如:
if(args[0]==='clear'){
message.channel.messages.fetch({ limit: args[0],before:message.id }).then(messages => {
message.channel.bulkDelete(messages);
})
}
第三种方法是唯一不删除命令而在其他两种方法中删除命令的方法。
此外,如果您使用 await
来解决 promise,则不需要使用 then()
。了解有关 promise 的更多信息。并且 timeout 参数 将在即将发布的版本中弃用。所以最好使用 setTimeout()
方法。
编辑:就像 Lioness100 所说的,除非您打算在 fetch 中使用 before
选项,否则您不需要提取消息,因为 bulkDelelte()
已经提取了消息。