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

Discord.js特定频道消息自动转Embed二次执行报错如何解决?

问题原因

  • 逻辑判断写反:你用指定频道ID字符串调用includes()判断是否包含当前频道ID,逻辑完全错误,正确逻辑应该是判断当前频道ID是否等于你要监听的指定ID。
  • if语句未加花括号:只有紧随if的var test行受判断条件控制,后续创建Embed、发消息、删消息的代码不管频道是否匹配都会执行,遇到非目标频道的空消息就会触发报错。
  • 方法使用错误:slice(" ")的参数不符合语法要求,字符串slice()方法接收的是数字索引,传字符串没有实际作用,如果你要去除消息首尾空格应该用trim()。
  • 缺少空内容校验:如果用户发送的是纯附件、贴纸、表情,message.content为空字符串,直接传给Embed字段就会触发你遇到的RangeError [EMBED_FIELD_VALUE]报错,Discord要求Embed的字段值必须是非空字符串。

修复后的代码

const targetChannelId = "905504402276765766";
// 仅匹配指定频道的消息才执行逻辑
if (message.channel.id === targetChannelId) {
  // 处理消息内容,去除首尾空格
  let reportContent = message.content.trim();
  // 兼容空内容场景
  if (!reportContent) {
    reportContent = "用户未输入文字内容,仅上传了附件/贴纸等资源";
  }
  const tryembed = new Discord.MessageEmbed()
    .setColor('DARK_RED')
    .setTitle('Test')
    .addFields(
      {name: "提交Bug的用户:", value: `<@!${message.author.id}>`},
      {name: "提交的Bug内容:", value: reportContent}
    )
  // 发送后删除原消息
  message.channel.send({embeds: [tryembed]})
    .then(() => message.delete())
    .catch(err => console.log("消息处理失败:", err));
}

如果你外层的消息监听函数是async修饰的,可以把发送和删除的部分改成await写法,更易读:

await message.channel.send({embeds: [tryembed]});
await message.delete();

内容的提问来源于stack exchange,提问作者I need Help

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 20:24:03