phoenix-powerSlackでちょっとしたBotを動かしてみました。

archlinuxjp

まず、宣伝から。ArckWiki日本版のプロジェクト用にSlackアカウントを作成してみました。日頃からArckWikiを読んでいる人などは是非参加して欲しいと考えています。Botとか設定とかまだ整っていないので、その辺を手伝って欲しい…。




http://archlinuxjp-slack.heroku.com/

1
2
3
# 自動招待はslackinを使いました。
# https://github.com/rauchg/slackin
$ npm i -g slackin

hubot-slack

https://github.com/slackhq/hubot-slack

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# -gはglobal
$ npm i -g hubot hubot-slack yo generator-hubot coffee-script

# yoでhubotを作成
$ mkdir hellobot
$ cd hellobot
$ sudo yo hubot

# mail addressの削除など
$ vim package.json

# -Sは--save
$ npm i hubot-slack -S
$ ls ./node_modules/hubot-slack
$ vim Procfile
web: bin/hubot --adapter slack

$ ./bin/hubot
hellobot > hellobot ping
hellobot > PONG
hellobot > exit

# herokuにAppを作成
$ heroku login
$ heroku create appname
# appnameはherokuのApp名{https://appname.heroku.com}になる、既に登録されていたら使えない

# Freeでアドオンのredistogoを追加
# クレジットカードの登録が必要になります
$ heroku addons:add redistogo:nano

# FreeではH6/H24の時間休ませなければならず、かつM30呼ばれなければ、Sleepしてしまうので、連続で動かすための設定
# schedulerアドオンの追加
$ heroku addons:create scheduler:standard
# schedulerをブラウザで設定
$ BROWSER=""
$ heroku addons:open scheduler
# curl ${HUBOT_HEROKU_KEEPALIVE_URL}heroku/keepalive
# 23:00

# keepaliveをインストール
$ npm i hubot-heroku-keepalive -S
$ vim ./external-scripts.json
[ "hubot-heroku-keepalive" ]
# keepaliveの設定
# https://devcenter.heroku.com/articles/scheduler
$ heroku config:add HUBOT_HEROKU_WAKEUP_TIME=8:00
$ heroku config:add HUBOT_HEROKU_SLEEP_TIME=24:00
$ heroku config:add TZ='Asia/Tokyo'
$ heroku config:set HUBOT_HEROKU_KEEPALIVE_URL=$(heroku apps:info -s | grep web-url | cut -d= -f2)
# process-schedulerアドオンの追加
# https://devcenter.heroku.com/articles/process-scheduler
# これで行けるとは思うけど試してない
$ heroku addons:add process-scheduler:nano
$ heroku addons:open process-scheduler
# 範囲指定して0を入力するのですが、"1:00-6:00"で良いと思います。0の時間を寝かせます

# スケールを最小限にする
$ heroku ps:scale web=1

# とりあえずherokuにdeploy
$ git init
$ git commit -m "first deploy"
$ git push heroku master

$ curl -sL https://appname.heroku.com/

ある程度の設定ができましたが、私は、GitHub(Source Code) -> Wercker(Deploy) -> Heroku(App) -> Slack(Bot)と形になってますが、お好みで。

wercker.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
box: wercker/nodejs
build:
  steps:
    - script:
         name: build
         code: |
                 ls -a

deploy:
  steps:
    - heroku-deploy:
         key: $HEROKU_KEY
         user: $HEROKU_USER
         app-name: $HEROKU_APP_NAME
  after-steps:
    - wantedly/pretty-slack-notify:
         webhook_url: $SLACK_WEBHOOK_URL
         channel: general

after-stepsの部分は、Slackへの通知。

https://github.com/wantedly/step-pretty-slack-notify

1
2
3
4
  after-steps:
    - wantedly/pretty-slack-notify:
         webhook_url: $SLACK_WEBHOOK_URL
         channel: general

次に、hubotの基本的な拡張方法について。

scriptsフォルダにScriptを置きます。

scripts/hello.coffee
1
2
3
module.exports = (robot) ->
  robot.respond /HELLO$/i, (msg) ->
    msg.send "world"
1
2
3
4
$ ./bin/hubot
hellobot > hellobot hello
hellobot > world
hellobot > exit

新しいアプリをインストールして使います。例えば、RSSを流すとして、以下が便利。

https://github.com/shokai/hubot-rss-reader

1
2
3
4
5
6
7
$ npm i hubot-rss-reader -S
$ vim external-script.json
[ "hubot-rss-reader" ]
$ ./bin/hubot
hellobot > hellobot rss list
hellobot > hellobot rss add https://qiita.com/tags/docker/feed.atom
hellobot > exit

TwitterとかはHerokuに環境変数を追加することで使用可能。アクセストークンとかは、こちらから。

https://github.com/estiens/hubot-twitter-mention-v2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$ npm i hubot-twitter-search -S
$ vim external-scripts.json
[ "hubot-twitter-search" ]

# テスト用
$ export HUBOT_TWITTER_CONSUMER_KEY='Your–consumer-key-here'
$ export HUBOT_TWITTER_CONSUMER_SECRET='Your-consumer-secret-here'
$ export HUBOT_TWITTER_ACCESS_TOKEN_KEY='Your-access-token-here'
$ export HUBOT_TWITTER_ACCESS_TOKEN_SECRET='Your-access-token-secret-here'
$ export HUBOT_TWITTER_MENTION_QUERY='検索キーワード'
$ export HUBOT_TWITTER_MENTION_ROOM='general'
$ ./bin/hubot

# Heroku用
$ heroku config:add HUBOT_TWITTER_CONSUMER_KEY='Your–consumer-key-here'
$ heroku config:add HUBOT_TWITTER_CONSUMER_SECRET='Your-consumer-secret-here'
$ heroku config:add HUBOT_TWITTER_ACCESS_TOKEN_KEY='Your-access-token-here'
$ heroku config:add HUBOT_TWITTER_ACCESS_TOKEN_SECRET='Your-access-token-secret-here'
$ heroku config:add HUBOT_TWITTER_MENTION_QUERY='検索キーワード'
$ heroku config:add HUBOT_TWITTER_MENTION_ROOM='general'