有人可以显示如何逃避清除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();
}
});
谢谢。
答案 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();
}
});