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

discord.js v13 点击Interaction按钮删除私信原消息报错如何解决

解决方案

错误原因

  • 变量拼写错误:事件回调中把interaction误写为interation,导致取值异常
  • 调用不存在的属性:discord.js v13的Client实例没有messages属性,client.messages.fetch属于无效调用,直接触发你遇到的TypeError
  • 不必要的手动查询逻辑:按钮交互对象本身就携带了触发交互的原消息引用,不需要手动拉取频道和消息

正确实现步骤

1. 初始化Client时补充必要配置

处理私信场景的交互需要开启对应意图和partial配置:

const client = new Discord.Client({
  intents: [
    Discord.Intents.FLAGS.GUILDS,
    Discord.Intents.FLAGS.DIRECT_MESSAGES
  ],
  // 必须配置CHANNEL类型的partial,否则私信频道无法被正确识别
  partials: ['CHANNEL']
});

2. 替换按钮事件监听逻辑

使用discord.js封装的interactionCreate事件处理交互,不要直接监听底层ws事件:

client.on('interactionCreate', async interaction => {
  // 过滤非按钮交互事件
  if (!interaction.isButton()) return;
  // 匹配自定义按钮ID
  if (interaction.customId !== 'deletable') return;

  try {
    // 直接删除交互对应的原消息,私信/公屏场景通用
    await interaction.message.delete();
  } catch (err) {
    // 可选:捕获无权限、消息已被删除等异常
    console.error('删除消息失败', err);
  }
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 21:36:03