hubotで外部コマンドを使う - 覚え書き


hubotで外部コマンドを使いたい。外部コマンドにパイプで入力値を流しこみたい。CoffeeScriptを書くのははじめてなのであまり良い方法ではないかもしれない。覚え書きだ。

例として標準出力の1行目を逆にしたものを出力とする外部コマンド

% ghc -e 'interact $ reverse . head . lines'

を使っている。この部分を自分の好きな外部コマンドに置き換えれば良い。

reverse.coffee
spawn = require('child_process').spawn

module.exports = (robot) -> robot.hear /reverse/i, (msg) ->
        echo = spawn 'echo', [msg.message]
        reverse = spawn 'ghc', ['-e', 'interact $ reverse . head . lines']
        echo.stdout.on 'data', (data) -> reverse.stdin.write(data)
        reverse.stdout.on 'data', (data) -> msg.send data.toString()