Discord.js工单系统button.reply.send带true参数运行异常问题问询
问题原因分析
- 你遇到的
Discord.js: [object Object]报错核心是交互回复的参数格式不符合当前Discord.js版本要求,具体有两处错误:- 配置项键名不规范:Discord.js v13及以上版本中,发送带嵌入消息和交互组件的消息时,参数键名为
embeds(数组格式,存放所有Embed实例)和components(数组格式,存放所有动作行/组件实例),你代码中写的embed、component属于无效键名,API无法正常识别。 - 静默消息传参方式错误:旧版本Discord.js的交互回复支持传入第二个布尔参数,标记回复是否为仅触发用户可见的ephemeral(静默)消息,但该写法早已废弃。新版本要求将
ephemeral: true配置项整合到第一个参数对象中,你额外传入的第二个参数true属于无效参数,触发API报错,报错对象未被正确序列化就输出为[object Object]。
- 配置项键名不规范:Discord.js v13及以上版本中,发送带嵌入消息和交互组件的消息时,参数键名为
- 你修改为
button.channel.send({ component: bu1tton, embed: embed })后正常运行的原因是:channel.send方法本身不接受第二个布尔参数,你去掉了无效的第二个参数后,虽然键名仍不规范,但部分低版本Discord.js做了向下兼容所以能正常运行,而channel.send是往当前频道发送公开消息,自然所有人可见。
正确实现方案
如果要实现仅点击按钮的用户可见确认消息,又不触发报错,使用如下写法即可:
// 注意:按钮需要放在动作行实例中才能正常渲染 const actionRow = new Discord.MessageActionRow().addComponents(bu1tton) await button.reply.send({ embeds: [embed], components: [actionRow], ephemeral: true })
补充说明:Discord.js v13及以上版本中,按钮自定义ID的设置方法为setCustomId("sure"),原setID方法已废弃,如后续触发按钮交互识别失败可以修改此处。
内容的提问来源于stack exchange,提问作者8less
相关产品推荐
相关产品推荐

