返回博客
HermesDiscordTroubleshootingAI Agents

Discord 上的 Hermes Agent 不回复:修复方法

你的 Hermes Agent Discord 机器人显示在线却不吭声?几乎所有情况背后的四种原因,以及每一种的精确修复。

作者:Hermify Team||阅读约 2 分钟
Discord 服务器的深色侧边栏显示一个 Hermes Agent 机器人在线并带有绿色圆点,而下方频道中没有任何回复

你的机器人在线,却在无视你

绿点亮着。机器人出现在服务器成员列表里。你 @它、发一条斜杠命令、打一条普通消息,什么都没有回来。日志里没有报错,频道里没有回复。Discord 显示机器人在线,Hermes Agent 显示网关已连接。

几乎每一个我们见到的案例都可以归结为四种原因之一。其中三种是按设计悄悄失败的,所以机器人看起来健康却什么也不做。本文逐个走一遍:如何确认是不是你的情况,以及对应的精确修复。

原因一:Message Content Intent 被关闭

这是 Discord 机器人连上却忽略每条普通消息最常见的原因。症状:你的斜杠命令能用,但输入普通消息或回复时什么都不发生。日志里能看到 MESSAGE_CREATE 事件到达,但 content 字段是空字符串。

发生了什么:Message Content 是一个特权网关意图。Discord 默认将其关闭。没有它,机器人虽然收到每一条消息事件,却看不到文本本身,因此任何按关键词、@提及或前缀匹配的处理器都会静默失败。

修复方法: 打开 Discord Developer Portal,选中你的应用,进入侧边栏的 Bot,向下滚动到 Privileged Gateway Intents,把 Message Content Intent 打开。保存。

对于加入少于 100 个服务器的机器人无需审核,开关即时生效。超过 100 个服务器则需要提交应用进行认证,Discord 会单独批准该意图。

切换后不需要重启 Hermes Agent,下一条到达的消息就会带上填好的 content 字段。

原因二:你邀请错了应用

这一种令人痛苦,因为表面上一切都对。服务器里有一个机器人,它在线,头像也对。但无论你输入什么,它都不回复。

发生了什么:你可能在配置过程中创建了多个 Discord 应用(一个测试的、一个正式的、一个改过名的),而你实际使用的邀请链接指向的应用,跟 Hermes Agent 正在使用的 token 所属的应用不是同一个。Discord 会照常把两个应用都接入网关,两者都会显示在线,但只有 token 所属的那个应用会收到来自你服务器的事件;如果该应用没被邀请进服务器,就什么都收不到。

先做检查: 在 Developer Portal 里打开 token 位于 Hermes Agent .env 中的那个应用,从 General Information 复制 Application ID。然后在你的 Discord 服务器里右键点击成员列表里的机器人,选择 复制用户 ID。如果这两个 ID 不一致,说明你邀请错了应用。

修复方法: 为正确的应用重新生成 OAuth2 邀请链接(具体作用域见原因三),把错的机器人踢出服务器,邀请正确的那个。继续之前确认两个 ID 一致。

Discord Developer Portal 显示 Application ID 字段,旁边是服务器成员卡片,其中 User ID 与机器人一致

原因三:邀请缺少 bot 或 applications.commands

如果机器人出现在服务器里但从不收到斜杠命令,或者根本没作为真正的机器人用户出现,那就是 OAuth2 邀请链接生成时选错了作用域。

Discord 的 OAuth2 要求一次完整的机器人安装带上两个不同的作用域:

  • bot,这是让被邀请的应用在服务器中成为机器人用户的原因。
  • applications.commands,这是让机器人注册并接收斜杠命令的原因。

缺了前者,Discord 会把应用作为集成而非机器人成员安装,token 就无处附着。缺了后者,机器人虽然是真实成员,但斜杠命令注册不上,因此 /任何 都会返回 这次交互失败,或者干脆不出现在自动补全里。

修复方法: 在 Developer Portal 侧边栏进入 OAuth2,点击 URL Generator,在 Scopes 部分同时勾选 botapplications.commands,然后在下方出现的 Bot Permissions 面板里至少勾选:

  • Send Messages
  • Read Message History
  • Embed Links
  • Attach Files
  • Use Slash Commands

从页面底部复制生成的 URL,在浏览器打开,选好你的服务器并确认。一条最小可用的 URL 长这样:

https://discord.com/oauth2/authorize?client_id=<APPLICATION_ID>&scope=bot+applications.commands&permissions=277562616896

如果机器人需要加入语音频道用 TTS 回复,请在权限网格里同时勾选 ConnectSpeak,再次邀请。Discord 会升级现有的成员身份,而不是新增一个副本。

原因四:频道拒绝了机器人的角色

服务器级别的权限只是故事的一半。Discord 会在角色权限之上叠加频道和分类的覆盖规则,一次频道级的 deny,加在 Send MessagesRead Message History 上,就足以让在其他地方正常工作的机器人在这里失声。

症状:机器人在某些频道回复,在另一些频道则不回复。或者机器人在所有频道都沉默,但仅限这个服务器,同一个机器人在你的测试服务器却能正常工作。

发生了什么:频道覆盖规则的优先级高于角色权限。如果服务器里有人在这个频道对 @everyone 拒绝了 Send Messages,或把它限制到机器人没有的某个角色上,那么即便服务器层面授予了 Send Messages,机器人在这里也发不了消息。Read Message History 是与 View Channel 不同的权限,所以即使机器人能看到新消息到达,若历史被拒绝,某些依赖近期上下文再回复的 Hermes Agent 技能仍会失败。

先做检查: 右键点击受影响的频道,编辑频道权限,查看机器人的角色(或 @everyone,如果机器人未分配角色)。看看下列任一项是否出现红色 XView ChannelSend MessagesRead Message HistorySend Messages in ThreadsUse Application Commands

修复方法: 要么在受影响频道上为机器人的角色显式加一个 ,要么在分类层面移除该拒绝规则(分类拒绝会级联到其中的每个频道)。如果机器人需要在线程内回复,Send Messages in Threads 是独立权限,需要单独授予。完整的优先级规则可以看 Discord 关于频道覆盖的支持贴

Discord 频道权限面板显示一个机器人角色,在 Send Messages 和 Read Message History 上带有绿色对勾

节省时间的排查顺序

当机器人沉默时,按下列顺序排查这些原因,而不是先扑向最花哨的修复:

  1. 对比 Application ID 和机器人的 User ID。 六十秒,能在你动别的东西之前抓出"邀请错了应用"的情况。
  2. 检查 Message Content Intent。 六十秒在 Developer Portal 里,用一次开关就修好绝大多数沉默机器人。
  3. 看你的进入事件。HERMES_LOG_LEVEL=debug 启动 Hermes Agent,就能看到机器人是否真的收到事件,以及消息的 content 字段是否为空。
  4. 重新核对邀请作用域。 如果症状集中在斜杠命令,答案几乎总是这个。带上两个作用域重新邀请一次。
  5. 审计频道覆盖规则。 只有在排除前四种之后才值得做,因为检查最耗时,而且当机器人到处沉默时它是最不常见的原因。

Discord 完整的首次安装路径参见 Hermes Agent Discord 安装指南。如果你的机器人根本连不上 Discord(而不是连上后沉默),可以看这篇 Hermes Agent Docker container keeps restarting,讲的是网关的崩溃循环。

当你不想每周和 Discord 斗智斗勇

Discord 的意图机制、作用域模型和频道级覆盖矩阵就是这样。如果你觉得一个普通的对话式代理不该为了说一句"你好"就要走 OAuth 流程和特权意图审核,开始使用 Hermify。Hermify 在 Telegram 上运行托管的 Hermes Agent,具备同样的记忆和技能,约一分钟即可上线,无需照看任何网关配置。

来源

运行你自己的 Hermes Agent

自带 API 密钥,连接 Telegram,60 秒内即可上线一个自我改进的 AI 智能体。

立即开始