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

Discord.js发送Embed提示description字段必填错误排查

问题根因

从错误栈可以定位到,抛出50035错误的是TextChannel.send方法(对应代码中target.send(...)行,向general频道发消息的逻辑),和前面interaction.reply的embed配置无关。
触发错误的核心原因有2个:

  • 你将MessageEmbed类型的返回值错误传入了仅支持交互组件(按钮、选择菜单等)的components字段,discord.js序列化参数时无法识别该非法值,自动生成了一个所有字段均为null的空embed对象,空embed缺少必填的description字段,触发Discord接口校验失败。
  • 代码存在两处语法/传参隐患,会在其他分支触发同类错误:
    • interactionCreate事件回调未加async关键字,内部使用await会直接抛出语法错误
    • else分支中setWaitTime()已经返回了带embeds字段的完整消息结构,你又额外套了一层embeds: [],会导致传入的embed结构非法

你感知到“未修改逻辑却突然报错”,通常是本地npm依赖自动升级了discord.js版本,新版本对消息传参的校验更严格,之前容错的非法传参现在会直接触发错误。

修复步骤
  • 修正target.send的传参,将embed放入对应字段,如果defaultMessage(serverState)返回的是MessageEmbed实例,修改为:
target.send({ embeds: [defaultMessage(serverState)] })

如果该方法同时返回交互组件,需要将组件单独放入components字段,禁止将非组件类型的值传入components数组。

  • 修正else分支的reply传参,直接使用setWaitTime()返回的消息结构即可,无需额外包裹:
} else {
    interaction.reply(waitTrue)
}
  • 给interactionCreate回调添加async关键字,保证await语法正常运行:
client.on('interactionCreate', async (interaction) => {
    // 原有业务逻辑
})
  • 补充前置校验:在所有调用send/reply发送embed的位置,提前打印embed实例的description属性,确认值不为null/undefined后再发起请求,避免上游变量异常生成空embed。

内容的提问来源于stack exchange,提问作者Arin Bryan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 00:51:24