no_picture

LT駆動開発で hubot をつかったオフィスに誰がいるかわかるコマンドを作成した話をした

LT駆動開発07 でLTしてきた。 今回は hubot をつかってオフィスに誰がいるのかわかるようにした。 どうしてそんなことをしようとするのか、そして簡単に仕組みを紹介しました。 みんなが積極的に関わろうとするにはどうするのか。 おもしろかったり便利だと思うことをやること。 興味をもってもらうことだ。 オフィスには人がいたりいなかったりで、「誰かいたらいこうかなー」とか思うこともあるので完全に俺得である。 スライド内のデモ動画はこちらにあります。 結構みんなつかっていて、コンボも流行っている。 そのコマンドは突然のおるんかとかですね。 デモにいれておけばよかった。 仕組みはMACアドレスをつかっていて、みんなノートPCなのでなかなかうまくいっている。 最初はデーモンをつくろうかと思っていたけど、なくても解決できそうなのでこうなった。 おまけで、他につくったコマンドを紹介しとく。 アリア社長とアリシアさんの画像はこちらから拝借しております。 ありがとうございます。 非常に癒される。 おまけ LT駆動では予備のスライドを用意しておくことが大事らしい。

no_picture

hubot で起動しているウェブサーバを経由して idobata へ投稿してみる

hubot をつかって idobata 用のBOTを作っていた。 heroku にホスティングして HTTPアクセスをすると idobata へメッセージが流れるようにしたい。 最終目的は CircleCI から WebHooks に登録しておいて、ビルドが終了したら通知したい、だったりするけど今回はそこはおいておく。 チャットへメッセージを送るには robot#send を呼べばよくて、第1引数が envelope で 第2引数以降が文字列。 idobata-adapter の場合は第1引数の message.data.room_id に投稿する ROOM_ID が必要になる。 参考 - hubot-idobata robot.send_room 'hogehoge' みたいな感じに投稿できるようにメソッドを加えるならこんな感じになった。 ROOM_ID = process.env.HUBOT_IDOBATA_DEFAULT_ROOM_ID module.exports = (robot) -> robot.send_room = (msg) -> envelope = { message: { data: {room_id: ROOM_ID } } } @send envelope, msg ROOM_ID を取得しないといけないので、登録したBOTに room_id を返すような機能を追加しました。 robot.respond /ROOM_ID/i, (msg) -> room_id = msg.message.data.room_id robot.logger.debug room_id msg.send room_id ROOM_ID がわかったら 環境変数 HUBOT_IDOBATA_DEFAULT_ROOM_ID を設定しておく。 あとは robot.router.get とか robot.router.post をつかって処理を作成すればいよい。 robot.router.post "/hubot/ping", (req, res) -> robot.send_room 'pong' ローカルで実行する場合は 8080 ポート。 heroku へは push するだけで使える。 /hubot/ping にアクセスするとチャットに pong と書き込みがされます。 hubot 自体のソースコードはそんなに長くないので、いじりながらソースよめばなんとか使えるようになりそうでした。 補足 robot.respond とか、使った場合は コールバック引数 msg があるのでこいつの send を利用するだけでチャットにかきこみができる。 msg は Response クラスのインスタンスでサーバからうけとった情報を message プロパティに保存されてて、この情報で envelope.message から取り出せる。 Response#send は以下のように実装されていて、 send: (strings...) -> @robot.adapter.send @envelope, strings...