Hubot で特定の channel(group) とか user しか相手にしないようにする
雑な実装なのかなー、と思うけど作ったのを共有しておく。
背景
チーム単独で Slack-Hubot を利用していたが、この度会社全体で共有のアカウントに移行することになり、他のチームの人が自分のチームの Bot に話しかけても相手にしないようにする必要があるのでそういう対策が必要になった。
- フリーで利用していたので Integration の数に制限があり、ある程度試験的に初めていたので他のチームの Integration 作成に影響を受けたくなかった(与えたくもなかった) => おたくのチームで3つも作られたら他のチームが作れなくなって困るよ、とか。
- プロジェクトの機密っぽい(お客様にとって)情報が入る可能性があるので、 Bot の回答はあまり誰でも見れるのは困る
- Bot と DM でやりとりができたりするので、不正利用が気づきにくい可能性もある
- 業務委託の人とかも多いので、会社メンバーだけだとしてもむやみに公開できない
- そもそも、チームのチャットルームは slack 上で private-group にする予定
- そもそも、チーム以外の人が使う必要ないし。デプロイとかはできないけど Redmine 連携とかはする
作ったもの
- Hubot が反応する room/user を設定することで、それ以外からのメンションは無視する
- 具体的には
robot.respond()
で動作するケース robot.hear()
は特に制限してない。面倒くさい。そこまで時間無い
例)許可する room=aaa, user=beco の場合
- channel:
#general
から user:ippei が@hubot ping
とした場合 ... 反応しない - channel:
#general
から user:beco が@hubot ping
とした場合 ... 反応しない 衆目にさらされるので、ダメ - channel:
#aaa
から user:beco が@hubot ping
とした場合 ...PONG
と返す - channel:
#aaa
から user:ippei が@hubot ping
とした場合 ...PONG
と返す これは、反応しないほうがいいのかも。。。自分のケースでは private-group だからいいけど。 ( private-group に JOIN できている時点で許可を得ている、という扱いなので) - Hubot への DirectMessage で user:beco が
ping
とした場合 ...PONG
と返す - Hubot への DirectMessage で user:ippei が
ping
とした場合 ... 反応しない
作ったコード
script
ディレクトリ以下にポイっと置く。
hubot ignores messages from not permitted room (or user)
許可する room と user は環境変数でカンマ区切りで書いて、 Hubot 起動する感じ。
まとめ
これで十分用を足している。いい感じ。 小さなコードでできたので良かった。
意外とマッチする感じの情報がなかったので何かを参考にして作った。 誰の記事を参考にしたのかは、メモが無いのでわかりません・・・