こつこつと

2007/11/15

InspIRCd

InspIRCdをいじり中。

このサーバはすごく綺麗に作られていて、拡張も考慮されています。
それ以外にも、epoll、kqueueとかにも対応していて、
大量の接続もさばけるようになっています。

たとえば、過去ログをログインした時に/NOTICEで送って欲しければ、
src/modules以下に、m_kakolog.cppというファイルを作って、
Moduleクラスを継承したクラスで、

OnUserMessageをオーバーライドして、
/PRIVMSG,/NOTICEが飛んできたら、発言を保存するSQLを発行。

OnUserJoinをオーバーライドして、
過去ログを/NOTICEとしてがばっと送る。

というのをとりあえず作ってみた。

基本は、src/modules/extra/m_sqllog.cppが
IRC全体での各種動きを保存するモジュールとなっているので、
これをパクれば、2時間くらいでできました。

あとは、SQLもAPIとして標準化されている(ついでに、非同期に動きます)ので、
MySQL,Psql,sqlite3であれば、コードを書き換えることなく使えます。
(m_sqlv2.so,m_sqlutils.soを有効にする必要アリ。)

うわぁ、楽しくなってきた!
仲間内IRCはこれをベースなおうちサーバに移行しようかしら。
bot置いておいて、過去ログとかAutoOperとかより
全然スマートにサーバサイドだけその手の処理ができる、ってのは良い気が。