DiscordAPIError: Unknown Message 问题:删除消息前如何判断其是否已被删除?
解决方案
方案1:捕获删除操作的错误(优先推荐)
该方案没有额外API开销,也不存在检查与删除操作间的竞态问题,是最稳妥的处理方式:
message.reply({ embeds: [embed] }) .then((msg) => { setTimeout(() => { // 捕获删除操作抛出的错误,仅忽略消息已删除的报错 msg.delete().catch(err => { if (err.code !== 10008) throw err }) }, 3000) })
说明:你日志中抛出的Unknown Message错误对应错误码10008,代码中仅忽略该类型错误,其他错误(如机器人无删除消息权限、API请求失败等)仍会正常抛出,不影响其他问题的排查。
方案2:提前检测消息存在性
如果你需要先确认消息存在再执行删除,可以主动拉取最新的消息状态做判断:
message.reply({ embeds: [embed] }) .then((msg) => { setTimeout(async () => { try { // 从频道接口拉取消息确认是否存在,避免本地缓存状态不准 await msg.channel.messages.fetch(msg.id) await msg.delete() } catch (err) { // 同样捕获消息不存在的错误 if (err.code !== 10008) throw err } }, 3000) })
说明:该方案会产生额外的API请求,性能低于方案1,且本质仍需要做错误捕获处理,因此无特殊需求优先选择方案1即可。
内容的提问来源于stack exchange,提问作者FinallyComplete
相关产品推荐
相关产品推荐

