discord.js如何将clear命令限制在14天以内而不抛出任何错误

discord.js如何将clear命令限制在14天以内而不抛出任何错误,discord.js,Discord.js,有人能告诉我们如何避开14天内发出的清算信息吗 示例:如果清除命令purge 50 MSG,但在14天内只有20 MSG,则即使不输入数字,我也只需要清除20 MSG client.on('message', async message => { if (!message.content.startsWith(prefix) || message.author.bot) return; let command = message.content.split(' ')[0];

有人能告诉我们如何避开14天内发出的清算信息吗 示例:如果清除命令purge 50 MSG,但在14天内只有20 MSG,则即使不输入数字,我也只需要清除20 MSG

client.on('message', async message => {
    if (!message.content.startsWith(prefix) || message.author.bot) return;
    let command = message.content.split(' ')[0];
    const args = message.content.split(' ').slice(1);
    const deleteCount = parseInt(args[0], 10);
    command = command.slice(prefix.length);
    if(command === 'clear') {
        message.delete();
        if (!message.member.hasPermission('MANAGE_MESSAGES')) return message.channel.send('```You don\'t have the permission```').then(mes => mes.delete(3000)) .catch();
        const fetched = await message.channel.fetchMessages({ limit: deleteCount });
        message.channel.bulkDelete(fetched);
        const messagesDeleted = fetched.array().length;
        message.channel.send('```php\n' + messagesDeleted + ' messages have been deleted\n```').then(mes => mes.delete(3000)) .catch();
    }
});

谢谢。

要捕获发生的任何错误,请执行message.channel.bulkDeletefetched.catchconsole.error

这将捕获发生的任何错误

希望这有帮助。

您可以在中看到,that channel.bulkDelete接受第二个参数filterOld,它应该是一个布尔值,指示函数是否应自动过滤超过2周的消息,以避免因不一致而出现错误

您还可以利用bulkDelete可以接受一个数字而不是一组消息这一事实来简化您的命令,这样您就不必手动获取要删除的消息。它解析为实际删除的邮件集合,所以您可以将此集合的大小返回给用户

这样的方法应该更有效:

    if(command === 'clear') {
        message.delete();
        if (!message.member.hasPermission('MANAGE_MESSAGES')) return message.channel.send('```You don\'t have the permission```').then(mes => mes.delete(3000)) .catch();
        const messagesDeleted = await message.channel.bulkDelete(deleteCount, true);
        message.channel.send('```php\n' + messagesDeleted.size + ' messages have been deleted\n```').then(mes => mes.delete(3000)).catch();
    }

起初,我不知道我可以使用deleteCount,这是活动的filterOld。但现在,使用此代码后,它对我很有效:

    if(command === 'clear') {
        message.delete();
        if (!message.member.hasPermission('MANAGE_MESSAGES')) return message.channel.send('```You don\'t have the permission```').then(mes => mes.delete(3000)) .catch();
        const fetched = await message.channel.fetchMessages({ limit:deleteCount }, true);
        const msgsDeleted = await message.channel.bulkDelete(fetched, true);
        message.channel.send('```php\n' + msgsDeleted.size + ' messages have been deleted\n```').then(mes => mes.delete(3000)) .catch();
    }
});