miauのブログ

はてなダイアリー「miauの避難所」をはてなブログに移行しました

plagger-irc-bot でちょっとハマった

現在新規プロジェクトの立ち上げ中で、Trac とか SVN とか設定しているところなんですが、TracRSS を社内 IRC に投げるところでちょっとハマったのでメモ。

前提

PlaggerRSSIRC に投げる設定は、

を参考に設定済み。変更点は plagger-bot の名称が plagger-ircbot に変わっていたことくらい。
IRC の雑談用チャンネルに、社内 Wiki の更新情報等が流れるようになってたりします。

今回やりたいこと

Trac プロジェクトの RSS を、プロジェクト個別の IRC チャンネルに投げたい。

  • hoge プロジェクトの RSS は #hoge チャンネルに
  • fuga プロジェクトの RSS は #fuga チャンネルに

投げるようなイメージ。

やったこと

上記 URL の irc.yaml は、YAML 中にひとつの IRC チャンネルしか指定できないので、プロジェクト毎に .yaml ファイルを作成してやる必要がある。

なので、irc.yamlirc-hoge.yaml みたいな名前でコピーして、

        - url: <RSSフィードのURL>
      daemon_port: 9999
      nickname: <IRCのbotの名前>
        - <ircチャンネルの名前>

この 4 行だけ書き換えてやれば OK!

・・・と思いきや、こんな感じで接続エラーに。

# ./bin/plagger-ircbot -c /etc/plagger/irc-hoge.yaml

[msg] loading configuration /etc/plagger/irc-hoge.yaml
[msg] creating daemon component
[msg] creating irc component
[msg] creating kernel session
[msg] starting irc session
[msg] starting the kernel
[msg] attempting to connect to server
[err] reconnect: xxx.xxx.xxx.xxx

特に疑わしい設定もないし、複数起動すると問題あったりするのかなー?とググってみるけど、それらしい記述はなし。IRC サーバ側でコネクション数とか制限してんじゃね?と疑って設定を変えてみたりもしたけど、こちらも効果なし。

原因特定

めげずに IRC の設定ファイル(ngircd.conf)を眺めてると、こんな記述が目に入って。

        # Maximum length of an user nick name (Default: 9, as in RFC 2812).
        # Please note that all servers in an IRC network MUST use the same
        # maximum nick name length!
        ;MaxNickLength = 9

nickname の最大文字数って 9 文字?新しい設定ファイルは feeder_hoge みたいな nickname にしてるから、9 文字超えてるよ!

と、feeder2 みたいな名前に変更して再度 plagger-ircbot を起動すると・・・あっさり接続できました。

もっと早く原因を特定するには

妙に時間食っちゃったけど、エラーメッセージがわかりにくいのが原因なわけで。

デバッグメッセージを出力する方法はないのかな?と plagger-ircbot のソースを覗いてみると、$ENV{DEBUG} を参照している箇所があるっぽい。環境変数を設定してやればより詳細なエラーが拾えるのかな。

ということで、試してみると・・・

# env DEBUG=1 ./bin/plagger-ircbot -c /etc/plagger/irc-hoge.yaml
[msg] loading configuration /etc/plagger/irc-hoge.yaml
[msg] creating daemon component
[msg] creating irc component
[msg] creating kernel session
[msg] starting irc session
[msg] starting the kernel
[msg] attempting to connect to server
[err] unhandled irc_registered
[err]   - POE::Component::IRC=HASH(0x9dc1ec8)
[err] unhandled irc_connected
[err]   - xxx.xxx.xxx.xxx
[err] unhandled irc_isupport
[err]   - POE::Component::IRC::Plugin::ISupport=HASH(0x9dd367c)
[err] unhandled irc_432
[err]   - irc.the.net
[err]   - feeder_hoge :Erroneous nickname
[err]   - ARRAY(0x9ddbe54)
[err] reconnect: xxx.xxx.xxx.xxx

ちゃんとエラーが拾えてました。今度から plagger-ircbot 周りでハマったら、まずこれを試そう。