Javascript 如何使用ARGS[]在discord.js v12.5.3中编写clear命令
我正在尝试为我的自定义discord bot创建一个清晰的命令,我已经编写了一些代码,它工作得非常完美!问题是,该命令删除的消息比通知的消息少1条,例如:Javascript 如何使用ARGS[]在discord.js v12.5.3中编写clear命令,javascript,discord.js,Javascript,Discord.js,我正在尝试为我的自定义discord bot创建一个清晰的命令,我已经编写了一些代码,它工作得非常完美!问题是,该命令删除的消息比通知的消息少1条,例如:>clear 5删除4条消息,我知道这是因为为启动批量删除而编写的命令本身是一条消息,但我不希望发生这种情况,args[0]+1似乎不起作用 这是我目前的代码: module.exports = { name: 'clear', description: "Delete/Clear messages with a si
>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!");
}
}
}
module.exports={
名称:“清除”,
description:“使用简单命令删除/清除消息”,
异步执行(消息、参数){
if(message.member.permissions.has(“KICK_MEMBERS”)){
如果(!args[0])返回消息。回复(“请输入要清除的消息数量!”);
if(isNaN(args[0])返回消息。回复(“请键入一个实数!”);
if(args[0]>100)返回message.reply(“一次删除的邮件不能超过100条!”);
if(args[0]<1)返回消息。回复(“您必须删除至少一条消息!”);
等待message.channel.messages.fetch({limit:args[0]})。然后(messages=>{
message.channel.bulkDelete(消息);
message.channel.send(“**已成功删除”+“`+args[0]+”消息“**”)
。然后(msg=>{
msg.delete({timeout:3000})
})
});
}否则{
message.channel.send(“您没有足够的权限使用此命令!”);
}
}
}
提前感谢!:) 在您的情况下,您正在删除包含命令的消息。例如:如果其
>清除3
,则包括您的命令消息在内的消息将被清除。因此,为了删除命令消息之外的消息,有3种情况
第一个是像你说的那样删除+1条消息。如果您不想将+1添加到消息数,则可以按照第二个命令,在该命令消息发送后立即删除消息。
例如:
第三个是您可以使用before
参数,以便在特定消息之前删除消息
例如:
第三种方法是唯一一种不删除命令的方法,而在另外两种方法中删除命令。
此外,如果使用then()
来解决承诺,则不需要使用wait
。了解更多关于。在即将发布的版本中,timeout参数将被弃用。所以最好使用setTimeout()
方法
EDIT:正如Lioness100所说,除非您要在fetch中使用
before
选项,否则您不需要获取消息,因为bulkdellte()
已经获取了消息。另外,除非您正在使用before
选项,实际上获取消息是没有意义的,因为如果您只需将数字直接传递到bulkDelete
中,则需要花费大量时间。是的,您是对的。我的错。让我把它删掉。谢谢
if(args[0]==='clear'){
message.delete(); //deletes the message that has been sent by user.
message.channel.bulkDelete(messages);
}
if(args[0]==='clear'){
message.channel.messages.fetch({ limit: args[0],before:message.id }).then(messages => {
message.channel.bulkDelete(messages);
})
}