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

JS聊天机器人仅author.name完全匹配时响应,多余字符无响应问题排查

问题原因

  • 匹配规则不符合需求:需求要求author.name与列表条目完全匹配,但代码使用了includes()子串包含判断,只要内容里出现列表里的字符串就会触发,多额外词汇的场景也会误判。
  • 方法传参错误:String.includes()的入参要求是字符串,代码直接传入数组ListClaims,运行时会自动把数组转为逗号拼接的字符串,匹配逻辑完全错误。
  • 流程控制错误:单个embed无author信息时直接return终止整个函数,后续所有embed都不会被处理;且message.embeds.length >= 0的判断永远成立,完全起不到校验是否存在embed的作用。
  • 大小写匹配不一致:仅将author.name转小写,没有同步把匹配列表的条目转小写对比,大小写不一致时会漏匹配。

修复后代码

const ListClaims = ["rick sanchez", "alex", "juan"];
// 提前把匹配列表转成全小写,避免每次循环重复转换
const lowerCaseClaims = ListClaims.map(item => item.toLowerCase());

// 仅当存在embed时才执行后续逻辑
if (message.embeds.length > 0) {
  for (let i = 0; i < message.embeds.length; i++) {
    const currentEmbed = message.embeds[i];
    // 单个embed无author信息时跳过当前项,继续校验下一个embed
    // 若运行环境不支持可选链,可替换为 if (!currentEmbed || !currentEmbed.author || !currentEmbed.author.name)
    if (!currentEmbed?.author?.name) continue;
    
    // 完全匹配判断:校验author小写后是否和列表中任意一项全等
    if (lowerCaseClaims.includes(currentEmbed.author.name.toLowerCase())) {
      message.react('🎉');
      // 匹配到符合条件的项后不需要继续校验其他embed,可加break终止循环
      break;
    }
  }
}

内容的提问来源于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 00:36:03