20 May '2007 - 23:51 | 技術動向 Lingrvant Botkit
お待たせしました。Yet Another Lingr Botkit - Lingrvant 1.0.0 をリリースしました。
ソースは http://n.h7a.org/hacks/lingrvant に展開してあるので読むのはタダです。バグ報告、アドバイスがあったらください。
だいぶ前に書いた Lingresident は常駐ツールとして書いたのだけれど、他の Radar とか Notifier と共存するのがいろいろと面倒くさいので興味をとっくに失って放置してありました。ただ、その機能の一部として書いたプラグインのボット機能はそれなりに便利だったので、それだけ使う Lingrvant っていう名前のボットを常駐させていたのだけれど、先日、Private Message 機能がボットにも解放されたのを観て、それの対応をするタイミングで一から新しく書き直してみたというわけです。今度は、純粋な Lingr Bot フレームワークとして。
api_client.rb と botkit.rb があるから、それで別にいいし、それを改変して使えばいいだけなのだけれど、Lingr の API の文法ってかなりすっきりした作りになってるので、API の追加に対しても自動的に対応するような api_client.rb を書いたらどうかなと思って lingr.rb を書いてみました。
ほとんど api_client.rb をそのままコピーしておいて偉そうに Lingr::Api なんて名前にしてあるのだけれど、これは sample.lingr.rb を観ればわかるように、
lingr = Lingr::Api.new apikey
lingr.session :create, { :client_type => 'automaton' }
lingr.explore :get_hot_rooms, { :count => 2 }
みたいに、Lingr API の path の、最初の部分がメソッドで、続く部分がその第一引数になり、第二引数がパラメータをハッシュで渡すのが特徴。
api_client.rb みたいに親切じゃないけれど、これで、新しいコマンドが追加されても (たいていは) lingr.rb の変更はいらないし、どうせ http://wiki.lingr.com/dev/show/API+Reference を見ながら書くだろうし、これくらいの不親切はいいかな、と。
それから、プラグインが簡単に使える botkit.rb ということで lingrvant.rb を書いたのだけれど、使い方は sample.lingrvant.rb をみれば分かる通り
ポイントは、Lingrvant::Plugin を継承したクラスがどっかで定義されてたら勝手に使えることと、Message の type に対応したメソッドが (よっぽど変な名前じゃない限りは) 勝手に対応される点など。たとえば、system:broadcast なら on_system_broadcast が呼ばれるし、bot のイベントの場合は _bot をつけて呼ばれる。たとえばボットの入室は on_system_enter_bot が呼ばれる。
あとは、observe がタイムアウトで戻って来たら on_idle が呼ばれ、occupants の変更は on_occupant が呼ばれるのが botkit.rb にはない機能。anonymous observe の監視に便利。何に使うか知らないけれど。
それから、サンプルではなくて Lingrvant Botkit で作った実用になるボットも二つ書いてみました。Nbot (展開したソースは http://n.h7a.org/hacks/nbot) と Alingrce.rb。こういうのが簡単に書けるというのが、一応の目標だったのでまずまずかな。
Nbot は Lingrvant という名前で、http://www.lingr.com/room/lingrvant に常駐してます。Alingrce は A.L.I.C.E bot で http://www.lingr.com/room/alice に常駐してます。暇な人は遊んでみてくださいな。