LoginSignup
3
7

More than 5 years have passed since last update.

slackでちょっとしたbotを動かしたい

Posted at

仕事中に会議とかの司会がよくわからないタイミングで回ってくるのでbotに聞いたら返してくれるのを作りたいというのがやろっかなの大元。

とりあえず、動くまでになったけど色々と大変だったので備忘録として。

構成はSlack+Hubot。
slack botで検索したらHubotが一番多かったからこれを利用。

前提

  • npm 使える(install済み)
  • slack使う(slackよくわかんなくても大丈夫)
  • herokuアカウント持ち
  • herokuについてのある程度の理解(herokuの説明はしない)

Slackで個人用のチームを作る

ちょっと前まではできなかったみたいだけど今は複数のチームを単一のslack内で管理できるのでみんなガンガン個人用とか立てるといいよ。
Slack: Where work happens
Create new teamする。

Hubotの準備というか作成?

準備

楽そうなのでyoとgenerator-hubotをインストール

$ npm install -g yo generator-hubot

作成

適当な場所にボットの名前でフォルダを作成(別にボットの名前じゃなくてもいいし名前はなんでもいい)

$ mkdir bot-name
$ cd bot-name
$ yo hubot

しばらくすると色々聞かれます。
Owner/Bot name/Descriptionは適当になんでもいいっす。
Bot adapterというのがどの環境というかアプリでボット使うか見たいなやつ。
defaultがcampfireになっていますが、今回はslackが対象なのでslackと入力。
これの説明がないHOWTO解説が多くて結局英語読んだよ!

? Owner tkatsura
? Bot name bot-name
? Description A simple helpful robot for your Company
? Bot adapter slack

終わったら、その場でbin/hubotすると対話型のコンソールに。
なんかそのままだと普通に改行されていないのでなんかやるたびにエンター押すといいよ。
最初入力見えねーし。

$ bin/hubot
bot-name> [Thu Feb 02 2017 07:00:02 GMT+0900 (JST)] 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.
[Thu Feb 02 2017 07:00:02 GMT+0900 (JST)] ERROR hubot-heroku-alive included, but missing HUBOT_HEROKU_KEEPALIVE_URL. `heroku config:set HUBOT_HEROKU_KEEPALIVE_URL=$(heroku apps:info -s  | grep web-url | cut -d= -f2)`
[Thu Feb 02 2017 07:00:02 GMT+0900 (JST)] INFO hubot-redis-brain: Using default redis on localhost:6379

bot-name> bot-name ping
bot-name> PONG

bot-name> exit

諸々エラーが出てますが、適切に対応してください。
ERROR hubot-heroku-alive includedはherokuでの利用目的用のエラーなのでここではスルーするといいよ。

bot-name $ rm hubot-scripts.json 
bot-name $ git init
bot-name $ git add .
bot-name $ git commit -m 'first commit'
[master (root-commit) 299e0b0] first commit
 9 files changed, 388 insertions(+)
 create mode 100644 .editorconfig
 create mode 100644 .gitignore
 create mode 100644 Procfile
 create mode 100644 README.md
 create mode 100755 bin/hubot
 create mode 100644 bin/hubot.cmd
 create mode 100644 external-scripts.json
 create mode 100644 package.json
 create mode 100644 scripts/example.coffee

herokuに展開

ボット名でherokuAppを作成(ここも別になんでもいいっす)

bot-name $ heroku create bot-name
Creating ⬢ bot-name... done
https://bot-name.herokuapp.com/ | https://git.heroku.com/bot-name.git
bot-name $ git push heroku master
...
Counting objects: 13, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (10/10), done.
Writing objects: 100% (13/13), 5.92 KiB | 0 bytes/s, done.
Total 13 (delta 0), reused 0 (delta 0)
...
bot-name $ heroku open

画面にCannot GET /が表示されていればここまでの工程は成功。

slackのチームとの関連づけ

App Directory | SlackでHubotと検索すると出てくるやつに色々登録。
さっきチームを作った場合はすでにログインしてると思うのでそのままAdd ConfigurationするとBOTの名前なんにするんって聞かれる。
これはyo hubotで言うところのbot nameにするのがいいと思う。
スクリーンショット 2017-02-02 7.32.20.png
混乱しなくて済むし。

するとHubotに必要なAPIKEYとか色々出てくる。

herokuへ諸々を設定 

APIKEYとか設定。
あとHUBOTはRedisを使うのでadd-on設定するの忘れてた。

$ heroku config:set HUBOT_SLACK_TOKEN=************************************
$ heroku addons:create redistogo:nano

色々調べたところこれだけでもいいっぽい?
他のだとTEAMとかBOTNAMEとか設定してたりするけど必要ないらしい。
ちゃんと英語読めばわかるかも。

そのほかにfreeでheroku使う場合は規定の時間の間だけ起動し続けられるようにHUBOT_HEROKU_KEEPALIVE_URLを設定するといいらしい。
オプションとしてHUBOT_HEROKU_WAKEUP_TIME(起きる時間)とかHUBOT_HEROKU_SLEEP_TIME(寝る時間)とかHUBOT_HEROKU_KEEPALIVE_INTERVAL(ノックするインターバルタイム:default:5分)とかを設定できるそうです。

そこらへんはご自由にどうぞ。

ここまですることですでにslackのチームにbotがユーザーとして招待されているはず。
適当なチャンネルに招待して、bot-name pingPONGと返ってくれば成功。

自分用に改変

ここまでが全部準備でここからが本番。
と言ってもあとは自由にして欲しいんだけど、入口だけ。

自分でボットの動きを作りたい場合はscriptsフォルダ内に名前はなんでもいんだけど例えばtest.coffeeを作る。
ほかに特に設定は必要なくて勝手に読み込んでくれるのでスクリプトの内容だけを気にすればいい。
どう言う風に書いたらいいかはscriptsフォルダ内にすでにsample.coffeeがあるのでそれのコメントアウトを外して見てどれがどう言う風に動いているかとか確認しながら改変していくといいかも。

lunch.coffee
# Description:
#   今日のランチ何にするかランダムで出力してくれる

module.exports = (robot) ->
  lunch = ['らーめん','イタリアン','中華','カレー','うどん・そば','肉']
  robot.hear /lunch/i, (res) ->
    res.send res.random lunch

ちなみにローカルで一回確認できるのでエラーなどの確認はそのままローカル環境で確認するといいかも。
問題があればhubotと対話する前にエラーが出て進めない。

$ bin/hubot
bot-name> lunch
bot-name> ラーメン

bot-name> exit

OKの場合はこのままheroku環境にdeployすることでslackでも確認できる。

$ git add .
$ git commit -m 'Add lunch rand'
$ git push heroku master

これでおk。あとは好きにボットを調整してみるといい。
サンプルに結構色々のってるのでそれをちょっと改変するだけでもそれなりのものができると思う。

3
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
7