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

Discord.js V13的interactionCreate事件出现reading 'delete'类型错误如何解决

错误成因
  • 报错核心原因是setTimeout回调中访问的m对象为undefined,调用其delete方法触发类型错误,且该异步错误未被捕获导致进程退出。
  • 具体触发场景包括:
    1. 你调用interaction.reply时设置了ephemeral: true,这类仅发起用户可见的临时消息本身不支持机器人主动删除,且未指定fetchReply: true参数时,interaction.reply的Promise返回值不是有效的消息实例,导致m为空。
    2. 15秒的延迟删除逻辑超过了Discord交互的有效响应窗口期,回复操作失效未返回消息对象。
    3. 该交互在执行当前代码前已经被其他逻辑回复/延迟处理过,导致本次interaction.reply调用异常,返回值为空。
修复方案

根据你的使用场景选择对应修复方式:

场景1:需要保留ephemeral临时消息特性

ephemeral消息仅用户可见,不会留存到公共频道,不需要主动删除,直接移除延迟删除逻辑即可:

if (aBoolean) return interaction.reply({ content: `<:x_:677580192641843222>`, ephemeral: true });

场景2:确实需要消息发送15秒后自动删除

关闭ephemeral属性,显式要求返回消息实例,同时添加空值判断和错误兜底:

if (aBoolean) return interaction.reply({ 
  content: `<:x_:677580192641843222>`, 
  ephemeral: false, // 非临时消息才可被机器人删除
  fetchReply: true // 显式指定返回可操作的消息实例
}).then(m => {
  // 先判断消息实例和delete方法存在再执行删除
  if (m && typeof m.delete === 'function') {
    setTimeout(() => m.delete().catch(() => {}), 15000);
  }
}).catch(() => {}); // 兜底捕获回复操作的所有异常,避免进程崩溃

额外全局防崩溃优化

给Node.js进程添加全局未处理异步错误监听,避免单个业务错误导致机器人直接退出:

process.on('unhandledRejection', (error) => {
  console.error('未捕获的异步错误:', error);
});

内容的提问来源于stack exchange,提问作者user16284023

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 03:57:03