🤖HermesBlog
Hermes 訊息平台接入 · 第19篇2026/8/9· Easy Understand Hermes Agent

IRC 接入——经典聊天协议

Hermes 消息平台接入第19篇:IRC。最古老的聊天协议也能接。

這篇教學將手把手教你如何把 Hermes Agent 接入 IRC(網際網路中繼聊天),讓智慧體在古老的聊天室裡為你服務。


messaging-irc

什麼是 IRC?先打個比方

想像 IRC 是一個老式電話總機室:每個頻道(#hermes)是一間會議室,機器人就是坐在裡面的一位接線員。它不說話則已,一說話就是純文字——沒有表情包、圖片或檔案,就像發簡訊一樣簡單。

好消息是:Hermes 的 IRC 適配器不需要安裝任何額外軟體,它用 Python 自帶的「翻譯官」(asyncio)直接和 IRC 伺服器對話。無論你是連公共網路(如 Libera.Chat)還是自己搭的私服,都能用。


準備工作(第1步)

你需要先準備好三樣東西:

  1. 一個 IRC 伺服器位址(比如 irc.libera.chat
  2. 一個想加入的頻道(比如 #hermes,多個頻道用逗號分隔)
  3. 給機器人起個名字(預設叫 hermes-bot

如果你的伺服器要求身分驗證,還需要提前註冊機器人暱稱,並準備好 NickServ 密碼。


設定 Hermes(第2步)

有兩種設定方式,推薦新手用設定檔,更直觀。

方式A:編輯設定檔

開啟(或新建)~/.hermes/gateway-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   # 單條訊息長度上限

方式B:用環境變數(適合快速測試)

在終端機裡設定這些變數,效果等同:

export IRC_SERVER="irc.libera.chat"
export IRC_CHANNEL="#hermes"
export IRC_NICKNAME="hermes-bot"

設定存取權限(第3步)

預設情況下,只有你明確列出的暱稱才能和機器人對話(透過 allowed_usersIRC_ALLOWED_USERS)。

  • 想開放給所有人?把名單留空,並設定 IRC_ALLOW_ALL_USERS=true
  • 但請注意:公共網路上 IRC 暱稱並不安全(除非伺服器強制 NickServ 驗證),所以不建議在公網開放,只適合自己測試。

如果伺服器要求身分驗證,記得填上 nickserv_password,這樣機器人一上線就能自動「驗明正身」。


頻道訊息 vs 私聊(第4步)

  • 機器人在頻道裡收到的訊息 → 當作群聊處理。
  • 直接私聊機器人 → 當作一對一對話

另外,定時任務(cron)的通知會傳送到「家庭頻道」——優先使用 IRC_HOME_CHANNEL 指定的頻道,否則就用第一個 IRC_CHANNEL


啟動閘道(第5步)

一切就緒後,執行:

hermes gateway start

檢視連線狀態:

hermes gateway status

你就能看到 IRC 是否成功連上了。


兩個貼心小細節

  • 長訊息自動分段:機器人回覆太長時,會自動拆成多條 PRIVMSG,避免超過 IRC 單條訊息長度限制(預設 450 位元組)。
  • 身分鎖:每個「伺服器+暱稱」組合只會有一個機器人實例,兩個 Hermes 設定不會搶同一個 IRC 身分,省心。

小結

到這裡,你的 Hermes 已經能透過 IRC 聊天了。雖然它只能發文字,但勝在零依賴、設定簡單,特別適合跑在老舊伺服器或極簡環境裡。

下篇預告:我們將接入一個更「現代」的平台——Telegram,讓機器人支援圖片、按鈕和更豐富的互動。敬請期待!


📖 官方文档

本文根据 Hermes Agent 官方文档编写,原文见:官方文档 › user-guide/messaging/irc