Discord.js:如何在操作前检测消息是否已删除?
解决Discord机器人检测消息是否已删除的问题
直接使用channel.messages.fetch时会优先读取本地缓存,导致机器人运行中被删除的消息仍会返回缓存对象,无法提前检测。解决方法是调用fetch时强制跳过缓存,直接请求Discord API获取最新状态:
try { const message = await channel.messages.fetch({ snowflake, force: true }); // 消息存在,可执行后续操作 } catch (error) { if (error.code === 10008) { // 消息已被删除 } }
原理说明:
- 添加
{ force: true }参数后,Discord.js会绕过本地缓存,直接向Discord服务器查询该消息的实时状态 - 若消息已删除,API会立即抛出代码为10008的
DiscordAPIError,无需等到执行delete/edit等操作才触发错误
注意:该方式每次检测都会发起API请求,会占用一定的请求额度,适合需要精准判断消息状态的场景。
内容的提问来源于stack exchange,提问作者TNTzx
相关产品推荐
相关产品推荐

