Hubot フレームワーク上で実現されたSlackチャットボット. 秋山優花里殿がアニメ番組情報やサーバ状況,降雨状況を随時報告してくれます.
次のコマンドが使えます.コマンド出力の後の言葉はランダムです.
status
: 監視しているサービスすべての状況を取得するstatus all
: 監視しているサービスすべての状況を取得して,一覧表示するstatus SERVICE
: SERVICEの状況を取得する(ただし,services
に限る)番組表|anime list
: アニメ番組の一覧を表示する.今日の番組|anime today
: 今日のアニメ番組表の一覧を表示する天気|weather|forecast
: 現在及び今後の降雨状況を表示するこんにちは|hello|hi
: 挨拶をする更新|upgradable
: 更新可能なパッケージを表示する
また,自動的に以下のダイレクトメッセージが届きます
- アニメ番組が始まる10分前から5分前までに通知
- 10分ごとにサービス状態を確認して,
active
でなければ通知 - 10分ごとに今後の降雨状況を確認して,変化(雨が降ってきたり,雨が止んだり)があった時に通知
また,起動時に必要に応じて以下の情報を通知します.
- サービス状態を確認して,
active
でなければ通知 - 更新可能なパッケージがあれば通知
- 今後の降雨状況を確認して,変化(雨が降ってきたり,雨が止んだり)があった時に通知
これらは後述します.
Raspbian on Raspberry Pi 3でのみ動作確認
$ sudo mkdir -p /var/slack
$ sudo chown user.user $_
$ git clone https://github.com/noyuno/YukariAkiyamaHubotSlack.git $_
$ cd $_
$ bash install.sh systemd
$ bash install.sh status
ローカル上で実行するには,次のコマンドを入力します.
$ bin/hubot
起動時の出力がたくさん出ますが,気にせず挨拶をしましょう.
yukari> あ、あの、普通二科、2年3組の秋山優花里といいます。えっと、不束者ですが、よろしくおねがいします!
[Thu Oct 19 2017 19:52:22 GMT+0900 (JST)] WARNING A script has tried registering a HTTP route while the HTTP server is disabled with --disabled-httpd.
[Thu Oct 19 2017 19:52:23 GMT+0900 (JST)] INFO hubot-redis-brain: Using default redis on localhost:6379
愛知ではもうすぐ雨が降ってきます(0)..
yukari> こんにちは
こんにちは!今日の戦車は「Ⅳ号戦車D型改(F2型仕様)」
yukari> 天気を教えて
yukari> 愛知ではもうすぐ雨が降ってきます(0)..
サービス化をするため,今回はSystemdを使います.
slack
として登録します.
なお異常終了したときは10秒後に再起動させるようにしています.
$ ./install.sh systemd
Slackと連携するには次の変数をsecret/token
に設定する必要があります.
HUBOT_SLACK_TERM=xxxx
HUBOT_SLACK_BOTNAME=xxxx
HUBOT_SLACK_TOKEN=xoxb-1234....-abcd....
次に,secret/token
で設定する,ボットが送信する既定の宛先HUBOT_SLACK_USERID
をhttps://slack.com/api/users.list?token=xoxb-000000...
に
アクセスしてUDXXXXXXX
形式で設定します.
Systemdサービスが正常に動いているかを確認します.
systemctl
はroot
権限が必要なため,
10分ごとにcron
でroot
ユーザとしてsystemctl
コマンドを実行させています.
次のコマンドでbin/systemd-status
を登録します.
$ ./install.sh cron
bin/systemd-status
の出力先はout/systemd-status
で,
Hubotサーバはそのファイルの変更を見て,動いていないサービスがあればチャットで知らせます.
サービスの監視はbin/systemd-status
のservices
の中のサービスのみ行います.
また,サービスをHubotから制御することはできません.
また,サービスの確認には5分間隔で実行しているため,例えばsudo systemctl start slack
をしたのに起動直後Slackがinactiveとして通知されます.
一日一回,APTを使ってシステムのパッケージに更新できるものがあるか調べます.
次のコマンドでcron
に登録します.
$ ./install.sh cron
更新できるものがあれば「n個のパッケージが更新できます」と通知されます. 「upgradable」または「更新」コマンドで更新可能なパッケージを列挙します.
アニメ番組表を取得するため,しょぼいカレンダーに登録します.
JSONファイルのURLsrc
は
src='http://cal.syoboi.jp/rss2.php?usr='$USER'&filter=0&count=1000&days=14&titlefmt=%24(StTime)%01%24(Mark)%24(MarkW)%01%24(ShortTitle)%01%24(SubTitleB)%01%24(ChName)&alt=json'
ですが,そのままでは大量の見ない番組が含まれています. そのため,自分の場合は,あるキーワードが含まれている番組を抜き出してJSONを作りなおしています.
anime-json と anime-json-extract のスクリプトとキーワードファイルを使用して,JSONファイルを再作成しました.
つぎにJSONファイルの場所を secret/token
のANIMEJSON
に設定します.
降雨状況を問い合わせたり,ある場所の降雨の変化 (もうすぐ雨が降ってきたり,雨が止んだり)があった時に通知することができます.
YOLPを使ってますので,新しいアプリケーションを開発
で「クライアントサイド(Yahoo! ID連携v1)」を選び登録します.
発行されたアプリケーションIDをsecret/token
にYAHOO_APPID=abc..
の形式で設定します.
次に,script/env.coffee
のCOORDINATES
に次の形式で座標を設定します.
@COORDINATES: {\
"愛知": "137.123456,34.123456"
}
sh COMMAND [ARGS...]
でSlackからサーバシェルにコマンドを送信できます.
デフォルトで無効なので,有効にするにはscripts/env.coffee
のENABLE_SHELL
をtrue
にします.
セキュリティに充分注意する必要があります.
ENABLE_SHELL
がfalse
でもuptime
コマンドは使えます.