Discord.js嵌入消息带按钮报错:Cannot send an empty message
Discord机器人发送带按钮嵌入消息时出现DiscordAPIError[50006]错误排查
尝试让Discord机器人检测到特定消息时发送附带按钮的嵌入消息,但持续出现以下错误:DiscordAPIError[50006]: Cannot send an empty message
已在网上查找解决方案但未找到适配方案,附上代码请求帮忙排查问题。
错误栈信息
throw new DiscordAPIError.DiscordAPIError(data, "code" in data ? data.code : data.error, status, method, url, requestData); ^ DiscordAPIError[50006]: Cannot send an empty message
代码示例
const exampleEmbed = { color: 0xff0000, title: '◄◄ ‼ help request ‼ ►►', fields: [ { name: `user:`, value: `${msg.author}` }, { name: 'reason:', value: msg.content.slice(3) || 'no reason specified', inline: true } ], timestamp: new Date().toISOString() }; const row = new ActionRowBuilder() .addComponents( new ButtonBuilder() .setCustomId('primary') .setLabel('Click me!') .setStyle(ButtonStyle.Primary), ); const msgData = { content : `<@&${StaffRoleID}>`, embeds: [ exampleEmbed ], components: [ row ], } console.log(msgData); await msg.reply({data: msgData});
问题原因及解决方案
- 问题根源:在Discord.js v14及以上版本中,
reply()方法不需要将消息参数嵌套在data字段里。当前写法{data: msgData}会导致Discord API无法识别传入的content、embeds等参数,误以为要发送空消息。 - 修复方案:直接传递
msgData对象给reply()方法,修改最后一行代码:
或者使用对象展开语法(效果一致):await msg.reply(msgData);await msg.reply({...msgData});
修改后,content、嵌入消息和按钮组件都会被正确传递,即可避免空消息错误。
内容的提问来源于stack exchange,提问作者Daniel Ben Ari
相关产品推荐
相关产品推荐

