Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用ARGS[]在discord.js v12.5.3中编写clear命令_Javascript_Discord.js - Fatal编程技术网

Javascript 如何使用ARGS[]在discord.js v12.5.3中编写clear命令

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

我正在尝试为我的自定义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!");
        }
    }
}
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);
        })
}