綾小路龍之介の素人思考

[irssi] チャンネルのオペレータ権限を復活させるスクリプトを書く

チャンネルをはじめに作った人がオペレータになれる。だとすれば、チャンネルにjoinしているメンバーが自分だけになったらjoinとpartを繰り返して、オペレータ権限の回復ができる。

あるチャンネルから自分以外のメンバーがいなくなった場合に、partとjoinを繰り返して、チャンネルオペレータ権限を復活させるためのスクリプト。まずは自分以外のメンバーがいなくなったかどうかをチェックするために、partメッセージのシグナルをハンドルしてみる。

sub event_message_part {
        Irssi::print('event message part');
        return;
}
Irssi::signal_add('message part', 'event_message_part');
  1. irssi signal - Google 検索
  2. Irssi - The client of the future
  3. message part signal_add - Google 検索
  4. html/tracknick.pl
  5. "irssi::print" - Google 検索
  6. Irssi - The client of the future

ここまでを保存して読み込む。

/RUN recoverop.pl

すると(sratus)ウィンドウで以下のような感じになる。

19:12:49 -!- Irssi: Loaded script recoverop
19:23:15 -!- Irssi: event message part

しばらく観察していると、チャンネルから人がいなくなったのにこれをハンドルできていないことがわかる。それはpartをハンドルしているからで、不意の接続断はハンドルしていないからだ。じゃぁ不意の接続断の場合はどんなシグナルが発行されるかをチェックしてみる。そのためにパケットキャプチャツールのngrepを使う。

# ngrep -d any -W byline port 6667

partされた場合は以下のような感じ

:hoge!-hoge@XXX.XXX.XXX.XXX PART #hoge :.

不意の切断の場合は以下のような感じ

:hoge!-hoge@XXX.XXX.XXX.XXX QUIT :Ping timeout.
  1. ngrep - Google 検索
  2. ngrep - network grep
  3. HTTP アプリケーションのデバッグにつかうツール2選 - TokuLog 改めB日記
  4. @IT:Security Tips > Network Grepで手軽なパケットキャプチャ

重要なのは、PART とか QUIT とかのコマンド部分。

  1. irc rfc - Google 検索
  2. RFC1459: Internet Relay Chat Protocol (IRC)

チャンネルからいなくなる場合をハンドルするには、それぞれに対応したシグナルをハンドルする。つまり、以下のようになる。

sub event_message_quit {
        Irssi::print('event message quit');
        return;
}
Irssi::signal_add('message quit', 'event_message_quit');

sub event_message_part {
        Irssi::print('event message part');
        return;
}
Irssi::signal_add('message part', 'event_message_part');

スクリプトを読み込んむと以下のような出力を得る。partもquitも正しくハンドリングされていることがわかる。

20:16:05 -!- Irssi: Loaded script recoverop
20:16:51 -!- Irssi: event message quit
20:22:24 -!- Irssi: event message part

リファレンス

  1. Irssi - The client of the future

ソーシャルブックマーク

  1. はてなブックマーク
  2. Google Bookmarks
  3. del.icio.us

ChangeLog

  1. Posted: 2009-02-18T18:24:11+09:00
  2. Modified: 2009-02-18T18:24:11+09:00
  3. Generated: 2017-08-18T23:09:16+09:00