Slackのチャンネル一覧取得するスクリプトでチャンネル名警察になる
どうも。
会社でSlackのチャンネル命名ルールを策定しました。
作った以上はしっかりチェックして、Slackの秩序を守らねばならぬ・・・ということで、GASを使って定期的にSlackに違法(笑)なチャンネルを発見するシステムを作ることにしました。
GASってなに?
GASはGoogle App Script
の略です。
Googleさまのリソースを使って、JavaScriptを実行できる。さらには、定期的な実行を行う機能もあるので、自前でサーバ立ててCron設定して…とするよりも、とてもお手軽にJSスクリプトを定期実行できます。
さらには、Spread Sheetや、FormなどのGoogleのサービスと連携することができます。以前はSpread Sheetと連携させ、オフィスの掃除当番を毎日発信するBotも運用してました。
詳しくはこちら
今回実現すること
- SlackのAPIを通して、Slackのチャンネル一覧を取得
- チャンネル名が、ルール通りに設定されていないチャンネルを抽出
上記の処理を定期的に実行することで、Slackの秩序を守ることが目的です。
実装していく
SlackのAPIを通して、Slackのチャンネル一覧を取得
Slackより提供されているAPIを通して、Slackのチャンネル一覧を取得します。
0から実装すると大変なので、GASのライブラリとして公開されているSlackApp
というライブラリを利用します。
(ドキュメントはこちら)
リソース->ライブラリ と選択し、表示されるモーダルの Add a library のところに、以下のキーを入力します。
1on93YOYfSmV92R5q59NpKmsyWIQD8qnoLYk-gkQBI92C58SPyA2x1-bq
そして追加をクリックしましょう。するとSlackAppというタイトルのライブラリが追加されるはずです。
バージョンは最新のものを指定するのがいいかと思います。
次に以下のようなソースを記入します。
// Slackのトークンを返却する function getSlackToken(){ var token = PropertiesService.getScriptProperties().getProperty('SLACK_TOKEN'); return token; } // Slackからチャンネル一覧を取得する function getCnannelListArray() { var slackApp = SlackApp.create(getSlackToken()); return slackApp.channelsList(false).channels; }
getSlackToken
は、Slackのトークンを返却する関数です。ではどこから取得しているのでしょうか…?
答えは「スクリプトのプロパティ」です。普通のプログラムで言う定数のようなものだと思ってください。
ファイル->プロジェクトのプロパティ->スクリプトのプロパティ を開くと、設定できます。
キーにSLACK_TOKEN
、値にSlackから取得してきたTokenを入力して保存しましょう。
Tokenの取得方法については、こちらを参考にしてください。
これでチャンネルの一覧を取得できました。
チャンネル名が、ルール通りに設定されていないチャンネルを抽出
単純にプレフィックスを使っていないチャンネルを抽出します。
こんな感じでmain関数として実装…
function main(){ var channelList = getCnannelListArray(); // チャンネル一覧取得 var pattern = /^(proj|team|help)-.*/; //チェック用正規表現 channelList.forEach(function(channel){ if( pattern.test(channel.name) == false ){ // ルールを満たしていない場合の処理 Logger.log("だめ!チャンネル名 %s ",channel.name); }else{ // ルールを満たしている場合の処理 Logger.log("OK!チャンネル名 %s ",channel.name); } }) }
シンプルに正規表現でtest
を使ってプレフィックスから始まっているかを検査しています。
正規表現は環境に合わせて変更してください。
これでルール違反のチャンネルを抽出できました!
まだプレフィックスを使っていないチャンネルがたくさんあることがわかりますね!
まとめ
Slack APIを使ってチャンネル一覧を取得し、ルールを満たしていないチャンネルを取得することができました!
パブリックチャンネルしか取得できていないので、そこは要調査といった感じですね!
あとは
- ルール違反のチャンネルを作成したユーザを取得する
- 違反レポートをSlackに投稿する
こんな機能を追加すれば、かなり実用性が出てきそうですね!
それはまた別の記事で…
みなさんもGASを使って、色々と遊んでみてください!きっと役に立つと思います!
ではまた!