Hermes Agent Wiki 非公式・日本語wiki

IRC

目次

IRC アダプターは Hermes を任意の IRC サーバーにつなぎ、IRC のチャンネル(またはダイレクトメッセージ)とエージェントの間でメッセージを中継します。Python 標準ライブラリの asyncio の上で IRC プロトコルを直接話すので、外部依存も SDK もデーモンも要りませんLibera.Chat のような公開ネットワークでも、自分で立てた ircd でも動きます。

IRC は素のテキストです。音声・画像・ファイル・スレッド・リアクション・入力中表示・逐次表示には対応していません。返信は PRIVMSG の行として送られ、長いメッセージは IRC の 1 行の上限に収まるように分割されます。

> hermes gateway setup を実行して IRC を選ぶと、対話形式で設定を進められます。

事前に必要なもの

  • 接続先の IRC サーバー(例: irc.libera.chat
  • 参加するチャンネル(例: #hermes)。カンマ区切りで複数指定できます
  • ボットが使うニックネーム(既定: hermes-bot
  • 任意: ネットワークが本人確認を求める場合は、登録済みのニックネームと NickServ のパスワード

Hermes を設定する

IRC の設定方法は 2 通りあります。環境変数だけで手早く済ませる方法と、~/.hermes/gateway-config.yamlgateway ブロックに書く方法です。

方法 A — 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: ""       # optional server password
        nickserv_password: ""     # optional NickServ identification
        allowed_users: []         # empty = allow all, or list of nicks
        max_message_length: 450   # IRC line limit (safe default)

方法 B — 環境変数

変数 必須 説明
IRC_SERVER IRC サーバーのホスト名(例: irc.libera.chat
IRC_CHANNEL 参加するチャンネル。複数指定するときはカンマ区切りにします
IRC_NICKNAME ボットのニックネーム(既定: hermes-bot
IRC_PORT サーバーのポート(既定: TLS ありなら 6697、なしなら 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 と会話できます。動作確認には便利ですが、IRC のニックネームはネットワークが NickServ を強制していない限り認証されないため、公開ネットワークではおすすめしません。

ネットワークがニックネームの登録に対応しているなら、IRC_NICKSERV_PASSWORD(または nickserv_password)を設定しておくと、ボットが接続時に NickServ へ本人確認を行い、登録済みのニックネームを保てます。

チャンネルとダイレクトメッセージ

  • 参加中のチャンネルでのメッセージは、グループでの会話として扱われます。
  • ボット宛てのプライベートメッセージは、ダイレクトメッセージとして扱われます。

cron ジョブと通知はホームチャンネルに配信されます。IRC_HOME_CHANNEL が設定されていればそこへ、なければ IRC_CHANNEL の先頭のチャンネルへ届きます。

ゲートウェイを起動する

hermes gateway start

状態は hermes gateway status で確認できます。IRC の接続状態もそこに表示され、環境変数だけで設定した場合も同様です。

補足

  • エージェントの返信が長い場合は、IRC の 1 行の上限に収まるよう自動で複数の PRIVMSG に分割されます(max_message_length。プロトコルの分を差し引いた既定値は 450 バイトです)。
  • アダプターはサーバーとニックネームの組ごとに資格情報のロックを取得するので、2 つの Hermes プロファイルが同じ IRC の識別情報を取り合うことはありません。