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

discord.js v13前缀匹配失效及Cannot send an empty message报错解决

问题排查与修复方案

核心报错原因

1. Cannot send an empty message错误

discord.js v13对channel.send()方法的传参格式做了不兼容更新:

  • v12版本可以直接传入MessageEmbed实例发送嵌入式消息
  • v13版本必须将Embed内容放到embeds数组参数中,否则会将传入的Embed对象识别为content字段值,类型不匹配导致content变为undefined,触发空消息报错
    这也是为什么ping命令可以正常返回,所有前缀命令都报错的原因:ping命令返回纯文本符合v13传参要求,前缀命令都直接传Embed不符合要求。

2. message事件废弃警告

discord.js v13已将消息接收事件从message重命名为messageCreate,原事件仅做兼容保留,后续版本会直接移除。

具体修改步骤

步骤1:替换消息事件监听

将原事件监听代码:

client.on('message', message => {

替换为:

client.on('messageCreate', message => {

步骤2:修改所有嵌入式消息发送格式

将所有message.channel.send(Embed实例)的写法,统一改为带embeds参数的结构,示例如下:

原写法(v12可用,v13报错):

message.channel.send(new Discord.MessageEmbed()
  .setColor('#FAA81A')
  .setTitle("Truth")
  .setDescription(truth))

新写法(v13兼容):

message.channel.send({
  embeds: [
    new Discord.MessageEmbed()
      .setColor('#FAA81A')
      .setTitle("Truth")
      .setDescription(truth)
  ]
})

所有前缀命令(t/d/tb/db/inviteme/vote/helpme)中的Embed发送逻辑都需要按上述格式修改。

步骤3:可选优化(避免异常报错)

为post命令增加频道存在校验,防止用户未指定频道时触发报错:

else if (command === "post") {
  const ch = message.mentions.channels.first();
  if (!ch) return; // 未获取到提及频道时直接返回
  ch.send(message.content.substring(prefix.length + command.length))
}

内容的提问来源于stack exchange,提问作者Irtiza Khan Labib

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 08:24:00