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

Discord.JS开发Keytritz机器人读取Embed标题触发反应报错排查

报错原因排查与修复方案

错误#1 原因

你代码里有一行多余的调试语句message.channel.send(message.content.embeds):message.content是消息的纯文本内容,本身不存在embeds属性,所以该语句实际发送的是undefined,触发Discord API禁止发送空消息的报错。同时discord.js的消息发送方法是异步Promise,你没有添加错误捕获,所以抛出未处理Promise拒绝警告。

错误#1 修复

直接删除这行多余的调试代码即可。如果需要调试Embed内容,建议在控制台打印message.embeds,不要直接发送到频道。

错误#2 原因

并非所有Embed消息都设置了title属性,当Embed没有标题时message.embeds[i].title的值为null,直接调用includes方法会抛出类型错误,导致进程崩溃,机器人停止响应。另外你当前的判断逻辑只能匹配小写的naruto,无法匹配大写开头的Naruto,不符合需求。

错误#2 修复

先判断title属性是否存在且为字符串,再统一转为小写后匹配关键词,同时给所有异步操作添加错误捕获避免异常崩溃。你使用的是discord.js v12.5.3版本,修复后的完整代码如下:

for(var i = 0; i < message.embeds.length; i++) {
  const currentEmbed = message.embeds[i];
  // 先校验标题存在,转小写后匹配,同时兼容大小写两种格式的关键词
  if(currentEmbed.title && typeof currentEmbed.title === 'string' && currentEmbed.title.toLowerCase().includes("naruto")){
    message.react("✅").catch(err => console.log('添加反应失败:', err));
    message.channel.send("Detected").catch(err => console.log('发送提示失败:', err));
    break;
  }
}

如果你后续升级到discord.js v13及以上版本,发送普通文本消息需要修改为message.channel.send({content: "Detected"})的格式。

内容的提问来源于stack exchange,提问作者Andres Avendaño Aguilar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 07:09:03