|
/* |
|
必要なスコープ |
|
user:read |
|
user:read.email |
|
channels:read |
|
*/ |
|
|
|
function SlackFunction() { |
|
getSlackUser(); |
|
getList(); |
|
} |
|
//WS全体のSlackユーザー一覧を取得する。 |
|
function getSlackUser(cursor) { |
|
const slack_app_token = "Your_Slack_Bot_User_OAuth_Token"; |
|
const limit =100; |
|
const options = { |
|
"method" : "get", |
|
"contentType": "application/x-www-form-urlencoded", |
|
"payload" : { |
|
"token": slack_app_token, |
|
"cursor": cursor, |
|
"limit":limit |
|
} |
|
}; |
|
|
|
const url = "https://slack.com/api/users.list"; |
|
const response = UrlFetchApp.fetch(url, options); |
|
|
|
const members = JSON.parse(response).members; |
|
|
|
let activeArr = []; |
|
let inActiveArr = []; |
|
|
|
for (var member of members) { |
|
let deleted = member.deleted; |
|
let id = member.id; |
|
let real_name = member.profile.real_name; //氏名 |
|
let mail = member.profile.email ; //メールアドレス |
|
let name = member.name; //mei |
|
let is_primary_owner = member.is_primary_owner; //プライマリオーナー |
|
let is_owner = member.is_owner; //オーナー |
|
let is_admin = member.is_admin; //管理者アカウント |
|
let is_restricted = member.is_restricted; //Trueならばゲスト |
|
let is_ultra_restricted = member.is_ultra_restricted; //true ならばシングルゲストチャンネル,Falseかつis_restrictedがTrueならばマルチチャンネルゲスト |
|
let is_bot = member.is_bot; //botユーザー |
|
let is_app_user = member.is_app_user; // アプリユーザー |
|
let is_invited_user = member.is_invited_user;// 招待中 |
|
let guest_invited_by = member.guest_invited_by ; //アカウント有効期限 |
|
if (!member.deleted) { |
|
activeArr.push([ id, deleted,real_name, mail, name, is_primary_owner, is_owner, is_admin , is_restricted, is_ultra_restricted, is_bot, is_app_user, is_invited_user,guest_invited_by]); |
|
} |
|
if (member.deleted) { |
|
inActiveArr.push([ id, deleted,real_name, mail, name, is_primary_owner, is_owner, is_admin , is_restricted, is_ultra_restricted, is_bot, is_app_user, is_invited_user,guest_invited_by]); |
|
} |
|
} |
|
|
|
//スプレッドシートに書き込み |
|
const User_sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('User'); |
|
if( cursor ==null){ |
|
User_sheet.clear(); |
|
User_sheet.appendRow(['ID','削除済','氏名','メールアドレス','ユーザー名','プライマリオーナー','オーナー','管理者アカウント','ゲストアカウント','シングルorマルチ','botユーザー','アプリユーザー','招待中','アカウント有効期限']); |
|
} |
|
try{ |
|
User_sheet.getRange( User_sheet.getLastRow()+1,1, activeArr.length, activeArr[0].length).setValues(activeArr); |
|
User_sheet.getRange( User_sheet.getLastRow()+1,1, inActiveArr.length, inActiveArr[0].length).setValues(inActiveArr); |
|
} |
|
catch(e){ |
|
|
|
} |
|
if( responseMeta = JSON.parse(response).response_metadata.next_cursor != ''){ |
|
getSlackUser(JSON.parse(response).response_metadata.next_cursor); |
|
} |
|
} |
|
|
|
//シート名「List」から対象チャンネル情報を取得する |
|
function getList(){ |
|
//シート名「channel」の初期化作業 |
|
const channel_sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('channel'); |
|
channel_sheet.clear(); |
|
channel_sheet.appendRow(['チャンネルID', 'チャンネル名', 'ユーザーID',]); |
|
|
|
const List_sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('List'); |
|
const lastRow = List_sheet.getLastRow(); |
|
var values = List_sheet.getRange(1, 1, lastRow, 2).getValues(); |
|
|
|
for (var l = 1; l <= values.length; l++) { |
|
var channel_ID = values[l-1][0]; |
|
var channel_Name = values[l-1][1]; |
|
//チャンネル情報を渡して、getChUserを実行 |
|
getChUser(channel_ID,channel_Name) |
|
} |
|
|
|
} |
|
|
|
//特定のチャンネルのユーザーを取得する |
|
function getChUser(channel_ID,channel_Name,cursor) { |
|
const slack_app_token = "Your_Slack_Bot_User_OAuth_Token"; |
|
const limit =100; |
|
|
|
//チャンネルのユーザー取得 |
|
const options = { |
|
"method" : "get", |
|
"contentType": "application/x-www-form-urlencoded", |
|
"payload" : { |
|
"token": slack_app_token, |
|
"cursor": cursor, |
|
"limit":limit, |
|
"channel":channel_ID |
|
} |
|
}; |
|
|
|
const url = "https://slack.com/api/conversations.members"; |
|
const response = UrlFetchApp.fetch(url, options); |
|
const members = JSON.parse(response).members; |
|
let Arr = []; |
|
|
|
|
|
for (const member of members) { |
|
let id = member; |
|
Arr.push([ channel_ID, channel_Name, id ]); |
|
} |
|
|
|
//スプレッドシートに書き込み |
|
const channel_sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('channel'); |
|
if( cursor ==null){ |
|
|
|
} |
|
try{ |
|
channel_sheet.getRange( channel_sheet.getLastRow()+1,1, Arr.length, Arr[0].length).setValues(Arr); |
|
} |
|
catch(e){ |
|
|
|
} |
|
if( responseMeta = JSON.parse(response).response_metadata.next_cursor != ''){ |
|
getChUser(channel_ID,channel_Name,JSON.parse(response).response_metadata.next_cursor); |
|
} |
|
//} |
|
} |