読者です 読者をやめる 読者になる 読者になる

Thanks Driven Life

日々是感謝

指定したチャンネル内での書き込みを無効(ReadOnly)にする ZNC モジュール 書きました

新年あけましておめでとうございます。本年もよろしくお願い致します。

ところでこいつを書いてる途中で、今年のプログラミング初めが C++ って気づいてしまってつらい

経緯

現状、仕事場でのやりとりや TweetIRCGateway を使用するために IRC を使っています。 一つの IRC クライアントに閉じていろいろできるので幸福感高いのですが、反面意図しない サーバ/チャンネルに send しちゃうことが多々あります。 例えば「特に書くつもりはないけど閲覧だけしたいチャンネル」に誤爆しちゃうとかですね。 閲覧だけしたいチャンネルっていうのは、具体的に言うと IRCNet#ruby-ja とかですね。

真面目っぽい仕様の話し合いの最中に

みたいな空気よめてない誤爆しちゃうと、きっとみんなスルーしてくれるだろうけどわりと邪魔っぽいのでそういったミスはさけたい。しかし人間なのでミスはする。 じゃあシステムで send できないように縛れればいいのではって思っていろいろあって作りました。

gongo/znc-rom

IRC 環境としては、さくらVPS に znc を立てている状況なので、znc module で実現してみました。

module 開発は C++/Perl/Python という選択肢があったのですが、 znc を --enable-python--enable-perl でコンパイルし忘れていたので、仕方なく C++ で。仕方なく。

準備

動きは znc 1.0 で確認しているので、それ以前のバージョンだと動くかはわからないです。 あと module のコンパイル(znc-buildmod コマンド)が必要となりますので、

インストールしていてください。

モジュールの有効化

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++ 難しいっすね…