discord.js如何将清除命令限制在14天之内而不会引发任何错误

时间:2020-06-18 09:49:34

标签: discord.js

有人可以显示如何逃避清除14天以下的邮件 例如:如果清除命令清除了50 msg,但是在14天之内我只需要清除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();
    }
});

谢谢。

3 个答案:

答案 0 :(得分:0)

要捕获发生的任何错误,请执行message.channel.bulkDelete(fetched).catch(console.error);

这将捕获发生的任何错误。

希望这会有所帮助。

答案 1 :(得分:0)

您可以在docs中看到channel.bulkDelete()接受第二个参数filterOld,该参数应该是一个布尔值,指示该函数是否应自动过滤出超过2周的消息为避免Discord出错。

您还可以利用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();
    }

答案 2 :(得分:0)

最初,我不知道我可以使用(deleteCount, true)来激活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();
    }
});