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

如何让基于disc-11的JS Discord音乐机器人支持其他Bot调用指令

disc-11 项目允许其他机器人触发指令的调整步骤

问题根源为项目基于Discord.js开发,框架及项目自带的两层逻辑会默认拦截所有机器人账号发送的消息,导致其他机器人发送的指令根本不会进入后续解析流程,针对性调整拦截规则即可解决。

  • 调整第一层消息事件入口的拦截逻辑
    找到项目中messageCreate事件的处理文件(一般在src/events/目录下),文件开头默认带有机器人消息直接返回的判断语句:if (message.author.bot) return;
    将这段判断替换为带白名单的条件判断,既放行指定机器人的消息,又避免全量放行带来的风险:
    // 先把允许触发的其他机器人ID存在配置文件的allowedBotIDs数组里
    if (message.author.bot) {
      // 永远跳过自己发的消息,避免循环触发
      if (message.author.id === client.user.id) return;
      // 只放行白名单内的机器人,其他机器人消息直接拦截
      if (!config.allowedBotIDs.includes(message.author.id)) return;
    }
    
  • 排查指令解析层的二次拦截
    部分版本的disc-11项目,会在指令解析(识别!play这类前缀的逻辑)的代码段,重复叠加一次机器人消息拦截。找到前缀匹配、指令分发的核心逻辑(一般在src/structures/目录下的客户端核心文件中),删除同位置的if (message.author.bot) return;判断,替换成和上面一致的白名单判断逻辑。
  • 配置防循环兜底规则
    绝对不要无差别放行所有机器人发送的消息,否则极易出现两个机器人互相触发指令的死循环,耗尽机器人运行资源,必须加上两层兜底:
    • 白名单仅填写需要对接的目标机器人ID,不要把所有机器人都加进来
    • 对每条收到的消息ID做去重缓存,同一条消息只触发一次指令,避免重复执行
  • 前置权限检查
    确认机器人在Discord开发者后台已经开启消息内容意图(Message Content Intent),如果没开启该权限,机器人无法读取任何消息的文本内容,哪怕代码调整正确,也识别不了其他机器人发送的!play等指令内容。

内容的提问来源于stack exchange,提问作者Andy Nguyen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.25 20:15:02