Branched Evolution

Competitive Programming in Python

slackで指定したユーザーが所属するチャンネル一覧を表示するスラッシュコマンドを作る

概要

slackのメッセージ入力欄で、/user_channel @{user_name} と入力すると、@{user_name} が所属しているパブリックチャンネル一覧を自分だけに表示できるようにする。

f:id:f_jhr:20200721005846p:plain

Slack APIの設定

Slack API: Applications | Slack

  1. Create New App で新しいAppを作成
  2. Basic Information > App Credentials の Verification Token をコピー
  3. OAuth & Permissions > Scopes > Bot Token Scopes で commands と channels:read を追加
  4. Install App を押し、Bot User OAuth Access Token をコピー

GAS の設定

Apps Script – Google Apps Script

  1. 新しいプロジェクトを作成
  2. 以下のコードを貼り付ける (ただし、Verification Token と Bot User OAuth Access Token は上でコピーしてきたものを使う)
function doPost(e) {
  if (e.parameter.token != '${Verification Token}') {
    throw new Error('Invalid Token');
  }
  var user = e.parameter.text.slice(2,11)
  var token = '${Bot User OAuth Access Token}'
  var url = `https://slack.com/api/users.conversations?token=${token}&limit=200&user=${user}&pretty=1`
  var channelList = JSON.parse(UrlFetchApp.fetch(url)).channels;
  var text = e.parameter.text + "の所属チャンネル一覧\n"
  for (var i in channelList) {
    var channel = channelList[i]
    text += "<#" + channel.id+ "|" + channel.name + ">\n"
  }
  var message = { response_type: "ephemeral", attachments:[{text:text}] };
  return ContentService.createTextOutput(JSON.stringify(message)).setMimeType(ContentService.MimeType.JSON);
}
  1. 公開 > ウェブアプリケーションとして導入
  2. Current web app URL をコピー

Slash Commands の設定

Slack API: Applications | Slack

  1. Building Apps for Slack > Add features and functionality > Slash Commands で Create New Command
  2. Command に /user_channel 、Request URL に GAS の Current web app URL を入力してSave