You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 04:15:02