IRC

IRC 适配器把 Hermes 接入任意 IRC 服务器,并在一个 IRC 频道(或私信)与 agent 之间中继消息。它通过 Python 标准库 asyncio 说 IRC 协议——无外部依赖、无 SDK、无守护进程。它适用于 Libera.Chat 这类公共网络,也适用于任何自建的 ircd。

IRC 是纯文本的:没有语音、图片、文件、线程、表情回应、输入状态或流式支持——回复以 PRIVMSG 行发送,长消息会按 IRC 行长度限制拆分。

运行 hermes gateway setup 并选择 IRC,可获得引导式操作。

前置条件

  • 一个要连接的 IRC 服务器(例如 irc.libera.chat)
  • 一个要加入的频道(例如 #hermes)——用逗号分隔可加入多个
  • 机器人的昵称(默认:hermes-bot)
  • 可选:如果你的网络要求身份认证,则需要已注册的昵称 + NickServ 密码

配置 Hermes

你可以用两种方式配置 IRC——环境变量(用于纯环境变量的快速设置)或 ~/.hermes/config.yaml 中的 gateway 块。

方式 A —— config.yaml

gateway:
  platforms:
    irc:
      enabled: true
      extra:
        server: irc.libera.chat
        port: 6697
        nickname: hermes-bot
        channel: "#hermes"
        use_tls: true
        server_password: ""       # 可选的服务器密码
        nickserv_password: ""     # 可选的 NickServ 身份认证
        allowed_users: []         # 空 = 允许所有人,或填写昵称列表
        max_message_length: 450   # IRC 行长度限制(安全默认值)

方式 B —— 环境变量

变量必填说明
IRC_SERVER✅IRC 服务器主机名(例如 irc.libera.chat)
IRC_CHANNEL✅要加入的频道——多个用逗号分隔
IRC_NICKNAME✅机器人昵称(默认:hermes-bot)
IRC_PORT—服务器端口(默认:TLS 时 6697,无 TLS 时 6667)
IRC_USE_TLS—是否使用 TLS(true/false;端口 6697 默认 true)
IRC_SERVER_PASSWORD—用于 PASS 命令的服务器密码
IRC_NICKSERV_PASSWORD—连接时自动 IDENTIFY 的 NickServ 密码
IRC_ALLOWED_USERS—允许与机器人对话的昵称,逗号分隔
IRC_ALLOW_ALL_USERS—允许频道中任何人与机器人对话(仅开发用)
IRC_HOME_CHANNEL—cron / 通知投递的频道(默认使用 IRC_CHANNEL)

访问控制

默认情况下,只有 allowed_users(或 IRC_ALLOWED_USERS)中列出的昵称才能与机器人对话。把列表留空并设置 IRC_ALLOW_ALL_USERS=true,可让频道中任何人都能与 Hermes 聊天——适合测试,但不建议在公共网络上使用,因为除非网络强制 NickServ,否则 IRC 昵称是不鉴权的。

如果你的网络会注册昵称,请设置 IRC_NICKSERV_PASSWORD(或 nickserv_password),让机器人在连接时向 NickServ 认证并保住其注册昵称。

频道 vs 私信

  • 已加入频道中的消息视为群组对话。
  • 发给机器人的私信视为直接消息。

cron 任务和通知投递到主频道——若设置了 IRC_HOME_CHANNEL 则用它,否则用第一个 IRC_CHANNEL。

启动网关

hermes gateway start

用 hermes gateway status 查看状态——IRC 连接状态会在那里报告,包括纯环境变量设置的情况。

说明

  • agent 的长回复会自动拆成多条 PRIVMSG 行,以保持在 IRC 行长度限制内(max_message_length,扣除协议开销后默认 450 字节)。
  • 适配器会为每个服务器+昵称获取一把带作用域的凭据锁,因此两个 Hermes profile 不会争抢同一个 IRC 身份。