CentOS + hubot で Slack に指定時刻に自動発言する

最近 Slack を始めた。最初は Rocket.Chat や Mattermost などを自前で作ろうとしていたが(その過程はブログで書いた)うまくいかなかったので、素直に Slack を使うことにした。

もともと家族との連絡用で使う程度なので、Slack はリマインダーとして使うつもりだった。すなわち、ゴミの日や今日の予定、天気などを教えてくれる、その程度でよかった。実はそういうのは、以下のサイト等を参考に簡単に Slack に実装できる。

Slack Bot:毎朝Googleカレンダーの予定を通知してくる秘書ねこBotの作り方 | デザインメモ 2.0
https://designmemo.jp/creative/bot-googlecalendar-slack.html

Slack に RSS フィードを追加する – Slack
https://get.slack.help/hc/ja/articles/218688467-Slack-に-RSS-フィードを追加する

【GAS】気象庁のサイトから今日の天気を取得してSlackへ流す – Qiita
https://qiita.com/ShishidoToru/items/0ba8f71a2d99a96ca233

「Slack」の便利な使い方。毎日自動で天気予報を通知する方法。【my Things活用】
https://rough-log.com/666

その他、定時つぶやきは Google Apps Script で実現でき、Raspberry Pi の motionEye で動体検知した際も curl コマンドで Slack へ通知できるようになった。

こういった方法はサーバーレスで実現できるのはいいんだけど、もっと自分でカスタマイズができるようにしたかった。特に、Google Apps Script を使ったつぶやきは、ピンポイントで投稿時間をしていできない。だから、自分でサーバーを立てて、bot を作ることにした。そのために、お名前.com の VPS 上の CentOS を利用する。

***

お名前.com の VPS 上の CentOS に hubot をインストールし、Slack へ連携させたことを書いた。

お名前.com VPS に hubot をインストール – with a Christian Wife
https://wacw.cf/2018/02/10/installing-hubot-on-vps/

次は、hubot で指定時刻に Slack で自動発言させてみよう。

(1)node-cron をインストールする。

$ npm install cron --save

(2)/[作成した bot ]/scripts に、例えば cron.coffee というスクリプトファイルを作成し、以下のように記述する。

1cronJob = require('cron').CronJob
2
3module.exports = (robot) ->
4cronjob = new cronJob('0 0 12 * * 1-5', () =>
5envelope = room: "[チャンネル名]"
6robot.send envelope, "平日の12時です。"
7)
8cronjob.start()

あるいは以下のように記述することもできる。

 1
 2cronJob = require('cron').CronJob
 3
 4module.exports = (robot) ->
 5
 6  send = (channel, msg) ->
 7    robot.send {room: channel}, msg
 8
 9  new cronJob('0 0 22 * * *', () ->
10    send '#[チャンネル名]', "22:00 です。"
11  ).start()
12
13  new cronJob('0 00 13 * * *', () ->
14    send '#[チャンネル名]', "13:00 です。"
15  ).start()

(3)hubot 実行用のシェルスクリプト(hoge.sh)を再実行すれば、自動発言ができるようになるはずだ。

私は pm2 で hubot をデーモン化しているので、pm2 で hoge.sh を再起動すればいい。

$ pm2 restart ./hoge.sh

なお、実行中の pm2 のリストは以下のコマンドで確認できる。

$ pm2 list

参考:
hubotでcron風に特定の時間に処理を実行させる方法 – Qiita
https://qiita.com/kon_yu/items/ff884d81f9c1db9b574b

hubotで指定した時間になったら発言するスクリプト – 猫のプロトコル
http://protocol.nekono.tokyo/2017/08/10/hubotで指定した時間になったら発言するスクリプト/