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

discord.js执行embed命令报Cannot send an empty message错误如何解决

错误原因
  • 该报错DiscordAPIError: Cannot send an empty message是Discord开放接口返回的错误,discord.js仅做了错误透传,并非node_modules目录本身存在问题。从返回的请求参数可以看到,最终提交的embeds字段为undefined,接口判定本次消息无有效内容,因此返回报错。
  • 触发该问题的常见原因有3个:
    1. 客户端实例名写错:代码中调用的是clients.channels.cache.get(),如果初始化Discord客户端时使用的是常规命名client,多写的s会导致获取的频道对象无效,传参无法被正确解析
    2. Embed构造失败:message.author.avatarURL()在用户无自定义头像时会返回null,空值会导致整个MessageEmbed实例构造异常,最终传入的embed对象被discord.js自动过滤
    3. 频道权限/ID错误:填写的频道ID不存在、机器人没有对应频道的发消息权限,也会导致参数解析异常,被接口判定为空消息
修复方案
  1. 修正多余的await逻辑:toLocaleString是Date对象的同步方法,不需要加await调用
  2. 给头像链接添加兜底值,避免空值导致Embed构造失败
  3. 增加频道存在性校验,确认获取到有效频道对象后再执行发送操作
  4. 确认客户端实例名和初始化时的命名一致

修复后的参考代码如下:

var CommandName1 = message.content
var CommandName2 = CommandName1.replace(prefix, "") 
let time = new Date().toLocaleString('en-US');
var user = message.author.tag
var UserProfile = message.author.avatarURL() ?? '无自定义头像'
var UserID = message.author.id
var MessageID = message.channel.id

let report = new Discord.MessageEmbed()
.setTitle("Report From Main Core File")
.setColor("DARK_BUT_NOT_BLACK")
.setDescription(`command: \`${CommandName2}\` \nexecution: \`successful\` \nreport path: \`Bot Core Assets/SCP bot assets/main.js\` \ntime: \`${time}\` \nuser: \`${user}\`\nuser profile: \`${UserProfile}\`\nuser ID: \`${UserID}\`\nmessage ID: \`${MessageID}\``)

const notifyChannel = client.channels.cache.get("890166184979361792")
if (notifyChannel) {
  notifyChannel.send({embeds: [report]})
} else {
  console.error("报告频道获取失败,请检查频道ID是否正确、机器人是否拥有该频道的访问及发消息权限")
}

额外注意:如果你使用的是discord.js v14及以上版本,MessageEmbed已被弃用,需要替换为EmbedBuilder,你需要先从discord.js中导入该类再进行实例化,其余配置逻辑不变。

内容的提问来源于stack exchange,提问作者some kid playing js

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 16:45:03