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.yaml の gateway ブロックに書く方法です。
方法 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 の識別情報を取り合うことはありません。