Discord.js v13 版本中 .then(m => m.delete({timeout:3000})) 延时删除写法替换方案
Discord.js v13 消息定时删除替代方案
核心变动说明
Discord.js v13 已正式移除Message.delete()方法的timeout配置参数,你原先v12版本的m.delete({ timeout: 3000 })写法已失效,需要手动通过setTimeout实现延迟删除逻辑。
一对一替代写法
将原先的链式调用写法:
.then(m => m.delete({ timeout: 3000 }))
替换为以下v13兼容写法即可:
.then(m => setTimeout(() => m.delete(), 3000))
修正后可直接运行的v13版本完整代码
case 'c': case 'C': let parts = message.content.split(" "); // 注意:清理消息需要的是MANAGE_MESSAGES权限,你原先写的MANAGE_ROLES是管理角色权限,不符合需求 if (!message.member.permissions.has(Discord.Permissions.FLAGS.MANAGE_MESSAGES)) { return message.channel.send("You don't have permission to do that!") .then(m => setTimeout(() => m.delete(), 3000)) } if (!parts[1]) { return message.channel.send('You forgot the number') .then(m => setTimeout(() => m.delete(), 3000)) } if (isNaN(parts[1])) { return message.channel.send('You need a number') .then(m => setTimeout(() => m.delete(), 3000)) } const deleteCount = Number(parts[1]) if (deleteCount > 100) { return message.channel.send("You can't delete more than 100 messages") .then(m => setTimeout(() => m.delete(), 3000)) } if (deleteCount < 2) { return message.channel.send('You need to delete at least 2 messages') .then(m => setTimeout(() => m.delete(), 3000)) } await message.channel.bulkDelete(deleteCount) message.channel.send(`I deleted ${deleteCount} messages`) .then(m => setTimeout(() => m.delete(), 3000)) break;
额外注意事项
bulkDelete方法仅支持删除发送时间在14天以内的消息,超出时间范围的消息无法批量删除,需要单独调用删除接口处理- 如果你的项目已开启ESLint校验,建议为
setTimeout添加清除逻辑避免内存泄漏,普通小型机器人可以忽略该要求
内容的提问来源于stack exchange,提问作者I need Help
相关产品推荐
相关产品推荐

