新年あけましておめでとうございます。本年もよろしくお願い致します。
ところでこいつを書いてる途中で、今年のプログラミング初めが C++ って気づいてしまってつらい
経緯
現状、仕事場でのやりとりや TweetIRCGateway を使用するために IRC を使っています。 一つの IRC クライアントに閉じていろいろできるので幸福感高いのですが、反面意図しない サーバ/チャンネルに send しちゃうことが多々あります。 例えば「特に書くつもりはないけど閲覧だけしたいチャンネル」に誤爆しちゃうとかですね。 閲覧だけしたいチャンネルっていうのは、具体的に言うと IRCNet#ruby-ja とかですね。
真面目っぽい仕様の話し合いの最中に
新年から C++ かいてしまったって泣きながら git push した
みたいな空気よめてない誤爆しちゃうと、きっとみんなスルーしてくれるだろうけどわりと邪魔っぽいのでそういったミスはさけたい。しかし人間なのでミスはする。 じゃあシステムで send できないように縛れればいいのではって思っていろいろあって作りました。
IRC 環境としては、さくらVPS に znc を立てている状況なので、znc module で実現してみました。
module 開発は C++/Perl/Python という選択肢があったのですが、
znc を --enable-python
や --enable-perl
でコンパイルし忘れていたので、仕方なく C++ で。仕方なく。
準備
動きは znc 1.0 で確認しているので、それ以前のバージョンだと動くかはわからないです。
あと module のコンパイル(znc-buildmod
コマンド)が必要となりますので、
- znc はソースコードから
- もしくは
apt-get install znc-dev
などで
インストールしていてください。
モジュールの有効化
git clone
なり直接 rom.cpp をとってきたあと
$ znc-buildmod rom.cpp
とすると、 rom.so
が作成されますので、 ~/.znc/modules/
以下に配置してください。
$ cp rom.so ~/.znc/modules/
配置後、IRC クライアントで下記を発行すると rom モジュールがロードされます。
/msg *status loadmod rom #ruby-ja #emacs-ja
あるいは znc.conf 内に
<User hoge>
...
LoadModule = rom #ruby-ja #emacs-ja
...
</User>
とした後に znc を起動するのも良いでしょう。 設定が上手くいっていれば、上記の場合「#ruby-ja」「#emacs-ja」チャンネルで発言をすると
#ruby-ja is read-only channel.
といった Notice が表示されます。きっと他の人には届いていないと思います。信じてる。
設定
ReadOnly のチャンネルはモジュールロード時以外でも設定が可能です。 ReadOnly チャンネルを追加したい場合は
/msg *rom add #python
反対にチャンネルを削除(書き込みを有効にする)場合は
/msg *rom del #python
現在 ReadOnly と指定されているチャンネル一覧は
/msg *rom list
で確認できます。
ちなみに、このコマンドで追加・削除したチャンネルは保存されませんので、手動で znc.conf の編集をお願いします。 また、今のところ add/del で指定できるチャンネル名は一回に一つです。
まとめ
C++ 難しいっすね…