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
相关产品推荐
相关产品推荐

