Hubot導入とhubot-script作成までやってみる

  • 98
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

概要

Hubotをローカルに入れて自作botを作ろう!

Hubotって?

Hubotはgithub製のbot作成ツール。
会社のチャットルームの自動化を目的に作られたそう。

Hubot
https://hubot.github.com/

導入編

ローカルで動かすところまで準備!

各種インストール

install redis
ここ参照するとすぐだよ、
http://qiita.com/checkpoint/items/58b9b0193c0c46400eeb

$ brew install redis

Hubot & CoffeeScript
Getting Started With Hubot読むとすぐだよ、
https://github.com/github/hubot/tree/master/docs

$ npm install -g hubot coffee-script

Hubotプロジェクト作成〜起動

redis起動

$ redis-server /usr/local/etc/redis.conf

hubotプロジェクト作成, hubot起動

$ hubot -c your-hubot-project // your-hubot-projectディレクトリ作成
$ cd your-hubot-project
$ bin/hubot // hubot起動 Ctrl+cで抜ける

最初から入ってるhubot-scriptを動かしてみる

最初からある程度揃ってるのでそれを動かす。

どこに入ってるの?

your-hubot-project/
  /scripts  //ここに入ってるのが自動でアクティブになる
  /node_modules/hubot-scripts/src/scripts //ここに入っているのはhubot-scripts.jsonに書くとアクティブになる

動かす

your-hubot-project/scripts にあるhubot-scriptを動かしてみる

ping.coffee

Hubot> hubot ping // PONGって返してくれる
Hubot> PONG
Hubot> hubot time // 時刻を教えてくれる
Hubot> Server time is: Sun Aug 17 2014 01:19:53 GMT+0900 (JST)

youtube.coffee

Hubot> hubot youtube me // YOUTUBEの動画を教えてくれる
Hubot> http://www.youtube.com/watch?v=nYG6QA9gF0o&feature=youtube_gdata
Hubot> hubot yt me // 同上
Hubot> http://www.youtube.com/watch?v=Mst4lXGvvM8&feature=youtube_gdata

こんな感じでさわりはOKな気がする…ので実際に作ってみましょう!

自作編

自分で作ったものは your-hubot-project/scripts に入れちゃってOKだと思う。
というかそれが一番簡単に動かせるので今回はそうする。

TomDocで公開用文書を書いておく

hubot-scriptではTomDocっていうコードの中にコメントアウトで文書を書く決まりがあるらしい。
これを書いてないとwarningが出るっぽいし、公開したときに分かりやすいと思う。

ここ(というか公式のREADME)に詳しいフォーマットが書いてある
https://github.com/github/hubot-scripts


# Description
#  このhubot-scriptの説明
# 
# Dependencies:
#  "モジュール名": "モジュールのバージョン" // 依存関係を書いておく
#
# Configuration:
#  環境設定を書く
#
# Commands:
#  hubot <コマンド(eg. time, youtube)> - <何をするか>
#
# Notes:
#  メモ書き, その他
#
# Author:
#  githubのusernameを書く

TomDoc.org
http://tomdoc.org/

script作成

公式が結局は一番参考になると思う。
https://github.com/github/hubot/blob/master/docs/scripting.md

元々チャットルームの自動化のために作られてるので、そこで使う想定みたい。
自分が使った範囲でどんなことが出来るのか書いてみると…

module.exports = (robot) ->

  # hearするとチャットルームのメッセージを監視できる
  # チャットルームで hoge って打ち込むと huga って返す
  # msgオブジェクトの中にはuserNameとかが入ってて、メンション飛ばせたりする
  robot.hear /hoge/i, (msg) ->
    msg.send 'huga'
    msg.send "@#{msg.message.user.name}, foo bar."
    # reply使うとメッセージを送ったユーザーにリプライできるっぽい
    msg.reply 'foooo'

  # respondすると hubot search `something` のようにhubotに命令できる
  # http (get, post) もできたりするので組み合わせると面白いかも
  robot.respond /search (.*)/i, (msg) ->
    searchText = msg.match[1]
    data =
      hoge: 'hoge'
      fuga: 'fuga'
    robot.http('http://example.com')
      .get() (err, res, body) ->
        if err
          msg.send "sorry, #{msg.message.user.name}. I cannot understand..."
        # 返ってきた値を使って何かする
        msg.send "#{res.data}"
      .post(data) (err, res, body) ->
        # 同上

Hubot上で動かしてみると…

Hubot> hoge // hoge って打つと…
Hubot> huga
Hubot> @Shell, foo bar.
Hubot> Shell: foooo

Hubot> hubot search test // hubot <trigger> (text) で命令すると…
Hubot> undefined // 通信できたら今回の場合は #{res.data} の中身を表示してくれる

こんな感じでいろいろ組み合わせると面白いと思います!

さいごに

hubotで初めてbot作ったんだけど、ドキュメントが色々と散らばってる感あったし、意外と情報が少ないし、まとめたかった。
特に、自作ファイルどこに置くの、とか、どうやってhubotにメッセージ送って、どうやってリプライして、とか自作するにあたって情報があんまりなかった。
私のggr力では足りなかったのだ :anguished:

少しでもみんなのhubot導入が楽になればいいなぁと思いました :relieved:

サンプルコード / katsew - github
https://github.com/katsew/slack-hubot-katsew/blob/master/scripts/example.coffee