hubotをslackと連携させて動かす

hubotをslackと連携させて動かす

準備

nodejsの環境構築は以下を参照ください
nodenv環境の構築(Mac)

Slack tokenの取得は以下から
https://api.slack.com/apps

インストール

「yo」「generator-hubot」という必要なモジュールをインストール
色々出力されるが、「Everything looks all right!」と最終的に表示されればOK

% npm install -g yo generator-hubot
...
Everything looks all right!
+ yo@3.1.1
+ generator-hubot@0.4.0
added 863 packages from 320 contributors in 29.823s

インストールしたモジュールを使えるようにシェルの再起動をしておく
※何も表示されない

% exec $SHELL -l

Bot作成

yoを使ってBotを作成する

「May we anonymously report usage statistics to improve the tool over time?」はとりあえず「No」と回答

「Owner」「Bot name」「Description」は適当に、とりあえずデフォルトで回答

「Bot adapter」は「Slack」を指定

% yo hubot
? ==========================================================================
We're constantly looking for ways to make yo better!
May we anonymously report usage statistics to improve the tool over time?
More info: https://github.com/yeoman/insight & http://yeoman.io
========================================================================== No
                     _____________________________
                    /                             \
   //\              |      Extracting input for    |
  ////\    _____    |   self-replication process   |
 //////\  /_____\   \                             /
 ======= |[^_/\_]|   /----------------------------
  |   | _|___@@__|__
  +===+/  ///     \_\
   | |_\ /// HUBOT/\\
   |___/\//      /  \\
         \      /   +---+
          \____/    |   |
           | //|    +===+
            \//      |xx|

? Owner yoshiisland <yoshi@yoshiisland.com>
? Bot name myhubot
? Description A simple helpful robot for your Company
? Bot adapter slack
...

これでhubotを使えるようになったので動かしてみる
「bin/hubot」で実行し、「Enter」キーを押すと「【Bot name】>」とプロンプトに入るので
「【Bot name】 ping」と打ってみて「PONG」と返って来れば成功
プロンプトを抜けるには「exit」

% bin/hubot
audited 274 packages in 1.231s
found 0 vulnerabilities

myhubot> [Sat Mar 07 2020 23:50:00 GMT+0900 (GMT+09:00)] WARNING Loading scripts from hubot-scripts.json is deprecated and will be removed in 3.0 (https://github.com/github/hubot-scripts/issues/1113) in favor of packages for each script.

Your hubot-scripts.json is empty, so you just need to remove it.
[Sat Mar 07 2020 23:50:00 GMT+0900 (GMT+09:00)] INFO hubot-redis-brain: Using default redis on localhost:6379
[Sat Mar 07 2020 23:50:00 GMT+0900 (GMT+09:00)] ERROR hubot-heroku-keepalive included, but missing HUBOT_HEROKU_KEEPALIVE_URL. `heroku config:set HUBOT_HEROKU_KEEPALIVE_URL=$(heroku apps:info -s | grep web.url | cut -d= -f2)`

myhubot> myhubot ping
myhubot> PONG
exit

Slack連携

作られたhubotをslackと連携する

「HUBOT_SLACK_TOKEN=【slackのtoken】 ./bin/hubot –adapter slack」で実行すれば連携できる

% HUBOT_SLACK_TOKEN=【xoxb-hogehoge】 ./bin/hubot --adapter slack
...

slack側で、botに「ping」と話しかけて「PONG」と返って来れば成功

(任意)いちいちトークンを指定して実行するのが面倒なのでスクリプト化しておく

% vim hoge.sh
% chmod u+x hoge.sh
% cat hoge.sh
#!/bin/sh

export HUBOT_SLACK_TOKEN=【xoxb-hogehoge】

./bin/hubot --adapter slack

次からはこのスクリプトを実行するだけでOK

% ./hoge.sh
...

Botの開発

ping PONGだけしててもしょうがないので(他にもtimeなどデフォルトの機能はあるが)
何か簡単なスクリプトを書いてみる

※開発の仕方は公式のGithubを読むのが一番良さそう
https://github.com/hubotio/hubot/blob/master/docs/scripting.md

作ったスクリプトは「scripts」ディレクトリ配下に置いておけば勝手に反映される

% ls
Procfile               bin/                   hoge.sh*               node_modules/          package.json
README.md              external-scripts.json  hubot-scripts.json     package-lock.json      scripts/

例えば、以下のように記載すると

% cat scripts/test.coffee

module.exports = (robot) ->

  robot.hear /Do you like (.*) ?/i, (res) ->
    text = res.match[1].slice(0,-2)
    res.reply "I like #{text}!"
    console.log(res.match)

以下のように返答するようになる

「console.log(res.match)」で出力されたログは以下
log大事。

[
  'Do you like apple ?',
  'apple ?',
  index: 11,
  input: 'test Do you like apple ?',
  groups: undefined
]
[
  'Do you like pen ?',
  'pen ?',
  index: 11,
  input: 'test Do you like pen ?',
  groups: undefined
]

夢が広がる。

参考

Hubotを使ってSlackへBotを投げる
https://github.com/hubotio/hubot/blob/master/docs/scripting.md