アボカドbot を Node.js で書きなおした

2011年9月からずっとサーバー上の PHP (EasyBotter) で動かしていたアボカドbot (@Avocado_bot) ですが, この度サーバーがサービスを終了する *1 とのことで, 自宅の Windows PC *2 上で動かすことにしました.

ただ, 以前一時的に自宅で動かした時, Windows のタスクスケジューラの調子がどうにもおかしいっぽかったり (1 度に 2 回実行したりする), PHP のプロセスがなぜか終了せずに残ってしまいメモリを食いつぶすなどの問題が発生したため, 改めて Node.js で動くように書き直しました.

適当に書いているうちに気付いたらストリームをどうのこうのする感じになっていました. ナンデ?

スケジュール実行の部分には cron, Twitter との連携部分は twitter パッケージを使用しました.

当初 Hubot も考えましたが, 特に Twitterbot に関してはなんだか楽に作れそうではなかったので結局使いませんでした.

雑なライブラリの紹介

npm でインストールして,

$ npm install -g https://github.com/susisu/Avocore
$ npm install https://github.com/susisu/Avocore

こんな感じのファイルを bot.js という名前で作成して,

var avocore = require("avocore");
module.exports = [
    avocore.cron("* * * * * *")
        // undefined, undefined, ...
        .then(avocore.pure(1))
        // 1, 1, ...
        .reduce(function (accum, value) { return accum + value; }, 0)
        // 1, 2, ...
        .filter(function (value) { return value % 2 == 0; })
        // 2, 4, ...
        .map(function (value) { return value * 2; })
        // 4, 8, ...
        .bind(avocore.echo)
        // output
];

実行します.

$ avocore run bot.js

2 秒に 1 回, 4 の倍数が出力されるはずです.

あとは avocore.twitter 以下に TwitterAPI を叩くものとか, bot 作成用のユーティリティーとかがあったりするので, 適当に組み合わせて bot.jsmodule.exports 内に適当にべしべし書いてやれば bot ができます (詳細は上に書いたアボカドbotの本体を見てもらえるといいと思います).

楽しいですね.

*1:KTKR-SERVER 長い間ありがとうございました.

*2:故障していて, たぶん一度電源落とすと二度と立ち上がらない (半年ぶり 3 度目)