Hubotにlogbot機能を追加する


Hubotに会話ログを取って閲覧する機能を追加したいと思います。今回は"hubot-logger"というものを使います。
特にIRCなどはそのままで使っていると全くログが残りません。
また、すでにlogbotがある場合でも、Bot機能を一元化して運用の手間を減らしたりできると思います。

所要時間はだいたい5分程度です。

なお、まだHubotを設定していない!という方はこちらを参考にセットアップしてみてください。
http://qiita.com/Morikuma_Works/items/0a10dfcef089d344000c

環境

  • Ubuntu 12.04LTS
  • Node.js v0.10.24
  • IRC用のアダプタを用いてテスト済み
  • ~/mybot/ がHubotがあるディレクトリだとします

パッケージを追記する

package.jsonを編集する

~/mybot/package.json を編集します。

package.json
...
"dependencies": {
...
 "hubot-logger": "~0.0.11"
 }...

カンマなどを辻褄が合うように編集します。

external-scripts.jsonを編集する

もしない場合は新規作成、ある場合は下記を追記

external-scripts.json
["hubot-logger"]

依存関係を解決する

npm install

をして、依存関係にあるパッケージをインストールします。

環境変数を設定する

Hubotの起動スクリプト(ここではrunbot.sh)に環境変数を追記します。

runbot.sh
export IRCLOGS_PORT=3000 #expressがlistenするポート番号
export IRCLOGS_FOLDER="/path/to/where/i/want/logs" #ログの保存先

起動する

起動しましょう。

./runbot.sh

ログをウェブ上で閲覧するためには

サーバをexample.com、設定したポート番号が3000だとすると、
http://example.com:3000/irclogs/
でアクセスできます。
しかし、例えばIRCで日本語のchannel名(例えば #エンジニア など)を使っている場合、Webからログにアクセス出来きません!
というわけで、hubot-loggerのソースコードをちょっと改変します。

hubot-loggerを2byte文字対応させる

~/mybot/node_modules/hubot-logger/views/channel.jade
に書かれているescape()が原因です。
escape()encodeURIComponent()に書き直します。
詳しくはこちら:
http://www.m-bsys.com/code/javascripr-encodeuri

channel.jade
extends layout

block body
  div.channels
    ul
      - each channel in channels
        li
          a(href= '/irclogs/' + encodeURIComponent(channel) + '/latest') #{channel}
          = ' ('
          a(href= '/irclogs/' + encodeURIComponent(channel) + '/index') index
          = ' | '
          a(href= '/irclogs/' + encodeURIComponent(channel) + '/latest') latest
          = ')'

まとめ

特にIRCなど、自動的にログが取れないようなチャットの仕組みを使っている場合でも、
今の時代15〜30分程度でログを取るような機能が得られてしまいます。時代の進歩ってすごいですね。

次回は、coffeescriptでbot機能の作成方法と、自分が使わせて頂いているおすすめ機能を紹介したいと思います。