Discord.js v13运行指令触发DiscordAPIError空消息报错如何解决
问题原因及解决方法
Discord.js v13 针对 Embed 构造、消息收发逻辑做了多处破坏性更新,你遇到的DiscordAPIError: Cannot send an empty message错误可按以下优先级排查修复:
- 补全 Discord 模块导入
你提供的-help指令代码中直接调用了Discord.MessageEmbed构造实例,但文件开头没有引入discord.js模块,会导致Embed构造失败变为undefined,发送时无有效内容触发空消息报错,在文件顶部补充导入即可:
const Discord = require('discord.js')
- 修正
setFooter写法
v13 中MessageEmbed.setFooter不再支持直接传入文本参数,必须使用对象格式传参,原代码的写法会导致Embed构造失效,将对应代码修改为:
.setFooter({ text: `Demandé par ${message.author.tag}` })
如果需要附带用户头像作为footer图标,可补充iconURL字段:
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() })
- 确认客户端初始化已声明必要权限意图
v13 强制要求显式声明机器人需要的权限意图,若初始化时未开启对应权限会导致消息收发异常,检查主文件中客户端初始化代码是否符合规范:
const { Client, Intents } = require('discord.js'); const client = new Client({ intents: [ Intents.FLAGS.GUILDS, // 服务器基础权限,必选 Intents.FLAGS.GUILD_MESSAGES, // 服务器消息收发权限,必选 // 其他业务所需权限可按需添加 ] });
- 开启开发者面板的Message Content Intent
登录Discord开发者门户,进入对应机器人应用的设置页,在「Bot」选项卡的「Privileged Gateway Intents」分区,开启Message Content Intent开关,否则机器人无法读取消息内容触发前缀指令,也会引发消息发送异常。
如果修改后仍有问题,可临时在发送参数中添加content字段测试:message.reply({ content: '测试内容', embeds: [HelpEmbed] }),若能正常发送文本但无Embed,说明Embed构造逻辑仍有异常,可打印HelpEmbed实例排查具体字段问题。
内容的提问来源于stack exchange,提问作者Fuzar
相关产品推荐
相关产品推荐

