SlackでHubotへの問いかけを特定のprivate channelに限定させる方法
概要
全社でslackの1Team利用をすることになったりして、誰でも自由に問いかけたらまずいコマンドがhubotにある場合、自チームのメンバーが入っているprivate channelに当該hubotのコマンド受け付けを限定させる方法の簡易版です。
この記事でできること
- public/privateを問わずにチャンネルに対してhubotの問いかけ許可を与えられる
- hubotに対して特定ユーザがダイレクトメッセージで問いかけができる(その他のユーザはできない)
- 問いかけを全チャンネル許可へ切り替えられる
この記事でできないこと
- チャンネル内で特定のユーザだけがhubotへ問いかけれる
- 限定させるチャンネルをチャンネル名で指定すること
- hubotのデフォルトコマンドへの問いかけ制限
手順
以下の修正をhubotに対して行います。
チャンネルのroom値を取得
プライベートチャンネルは普通にやるとチャンネル名が取得できない(undefinded)ので、
まずはチャンネルのroom値(おそらく9桁大文字英数字)を取得する以下のようなコマンドを、hubotに追加します。
# Description:
# チャンネルのroomの値を取得する。取得した値はアクセス制御に利用する。
#
# Commands:
# hubot room - チャンネルのroomの値を取得
module.exports = (robot) ->
robot.respond /room/, (msg) ->
msg.send "#{msg.envelope.room}"
このコマンドをhubotを利用したいチャンネルで実行すると、そのチャンネルのroom値が取得できます。
ダイレクトメッセージでhubotに対してこのコマンドを実行した場合もroom値が取得できるため、
この値を使って開発ユーザのダイレクトメッセージは許可させることもできます。
コマンドの実行制限処理
次に実行に対して制限をかけたいhubotコマンドに対して、以下の記述を追加します。
permitted_rooms = process.env.HUBOT_PERMITTED?.split(',') || []
permitted = (room) ->
room in permitted_rooms || 'ALL' in permitted_rooms
module.exports = (robot) ->
robot.respond /コマンド名 (.*)/, (msg) ->
# 許可しないチャンネルでは実行禁止
unless permitted msg.envelope.room
return
# ここからこのコマンドでやりたい処理を書く
# ...
Hubotの起動コマンド
HUBOT_PERMITTEDの変数に許可するチャンネルのroom値をカンマ連結で設定します。
制限をかけなくても良くなった場合はALL
を指定して起動してください。
# 問いかけ可能なチャンネル(ユーザ)を限定させる場合
HUBOT_PERMITTED=ルームID1,ルームID2,Hubotに直接DMしたときの値 HUBOT_SLACK_TOKEN=Slackのトークン ./bin/hubot --adapter slack
# 全てのチャンネルで問いかけを許可する場合
HUBOT_PERMITTED=ALL HUBOT_SLACK_TOKEN=Slackのトークン ./bin/hubot --adapter slack
※注意:HUBOT_PERMITTEDを指定してhubotを起動する前に、一度roomコマンドが有効な状態でhubotを起動させ、room値を取得する必要があります。
簡易版を脱するには?
groups.listの中にはプライベートチャンネルのチャンネル名も全て入っているので、この情報を使ってチャンネル名とIDの一覧を作れば、チャンネル名指定からIDを逆引きして、制御することが可能だと思います。
頑張りたい人は是非こちらで頑張ってみてください!(私はいいです)
参考
Author And Source
この問題について(SlackでHubotへの問いかけを特定のprivate channelに限定させる方法), 我々は、より多くの情報をここで見つけました https://qiita.com/seri/items/4b7ec9fd8bf4001aa6c0著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .