GoogleAppsScriptでSlackのPrivateChannelのメンバー一覧

Posted on 2017.04.23

GAS で private channel のメンバー一覧取りたいってときありますよね。抽選したりとか。

ただ単純なgroups.infoだと deleted な人いたり ID だけだったりでアレなのでusers.listと突き合わせる形に。

使ったライブラリ

https://script.google.com/macros/library/versions/d/1on93YOYfSmV92R5q59NpKmsyWIQD8qnoLYk-gkQBI92C58SPyA2x1-bq ライブラリ->M3W5Ut3Q39AaIwLquryEPMwV62A3znfOO で追加。ただしgroups.infoがないっぽいです。コントリビュート可能ですね!?

コード

var slackToken = "TOKEN";
var slackChannelId = "CHANNELID";
var slackEndpoint = "APIENDPOINT";

function _getSlackMembers() {
  // SlackAppになぜかgroups.infoがない…
  var r = UrlFetchApp.fetch(
    slackEndpoint +
      "groups.info?token=" +
      slackToken +
      "&channel=" +
      slackChannelId
  );
  var groupMembers = JSON.parse(r).group.members;

  var slackApp = SlackApp.create(slackToken);
  var allMembers = slackApp.usersList().members;

  var realMembers = allMembers.filter(function(e, i, array) {
    if (e.deleted) return false;
    return groupMembers.indexOf(e.id) != -1;
  });

  return realMembers;
}

戻り値はこれの array です https://api.slack.com/types/user