2011年9月からずっとサーバー上の PHP (EasyBotter) で動かしていたアボカドbot (@Avocado_bot) ですが, この度サーバーがサービスを終了する *1 とのことで, 自宅の Windows PC *2 上で動かすことにしました.
ただ, 以前一時的に自宅で動かした時, Windows のタスクスケジューラの調子がどうにもおかしいっぽかったり (1 度に 2 回実行したりする), PHP のプロセスがなぜか終了せずに残ってしまいメモリを食いつぶすなどの問題が発生したため, 改めて Node.js で動くように書き直しました.
- susisu/Avocore (汎用のコア)
- susisu/Avocado-bot (アボカドbotの本体)
適当に書いているうちに気付いたらストリームをどうのこうのする感じになっていました. ナンデ?
スケジュール実行の部分には cron, Twitter との連携部分は twitter パッケージを使用しました.
当初 Hubot も考えましたが, 特に Twitter の bot に関してはなんだか楽に作れそうではなかったので結局使いませんでした.
雑なライブラリの紹介
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
以下に Twitter の API を叩くものとか, bot 作成用のユーティリティーとかがあったりするので,
適当に組み合わせて bot.js
の module.exports
内に適当にべしべし書いてやれば bot ができます
(詳細は上に書いたアボカドbotの本体を見てもらえるといいと思います).
楽しいですね.
*1:KTKR-SERVER 長い間ありがとうございました.
*2:故障していて, たぶん一度電源落とすと二度と立ち上がらない (半年ぶり 3 度目)