説教臭いブログ

中途半端なので、タイトル変えてみた。多分説教臭いと思う。

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:ippeiping とした場合 ... 反応しない

作ったコード

script ディレクトリ以下にポイっと置く。

hubot ignores messages from not permitted room (or user)

許可する room と user は環境変数でカンマ区切りで書いて、 Hubot 起動する感じ。

まとめ

これで十分用を足している。いい感じ。 小さなコードでできたので良かった。

意外とマッチする感じの情報がなかったので何かを参考にして作った。 誰の記事を参考にしたのかは、メモが無いのでわかりません・・・