[Slack]擷取團隊的使用者資訊

如果需要知道團隊內的使用者的Slack ID 應該怎麼辦呢?

這個時候就需要調整你的Slack bot 權限了

 

進入到Slack Bot的管理介面 一開始看到 xoxb 開頭的是你的Bot Token 請把他收好

先點選"Add an OAuth Scope" 輸入users:read 會跳出最上面黃色的通知訊息
提醒需要reinstall your app 就是需要重新給予一次權限 點選reinstall your app

這裡就在設定一次需要發送到的Channel

我們可以用postman來測試一下 
Method: Get
Slack API : https://slack.com/api/users.list
輸入你的Bot Token 

程式碼部分有一塊比較複雜 就是回傳的時候會有一個欄位next cursor要判斷是不是還有值,
因為回傳limit是預設為0 當團隊非常多人的時候, 就無法一次回傳所有訊息
需要多判斷一次是不是要再往下抓取 如果需要也要告訴他cursor在什麼位置

WebClient client = new WebClient();
client.Headers.Add("Content-Type", "application/x-www-form-urlencoded");

List<SlackMember> slackMembers = new List<SlackMember>();
var slackUserListUrl = "https://slack.com/api/users.list";
var token = "你的機器人Token";
var cursor = "";
while (true)
{
    var rtnStr = "";
    var address = $"{slackUserListUrl}?token={token}{(string.IsNullOrEmpty(cursor) ? "": $"?cursor={cursor}")}";
    using (Stream stream = await this.Client.OpenReadTaskAsync(address))
    using (StreamReader reader = new StreamReader(stream))
    {
        rtnStr =  reader.ReadToEnd();
    }
    var users = JsonConvert.DeserializeObject<SlackUserInfo>(rtnStr);

    slackMembers.AddRange(users.Member.Where(x => x.Deleted == false));
    if (string.IsNullOrEmpty(users.Response_metadata?.Next_cursor))
    {
        break;
    }
    else
    {
        cursor = users.Response_metadata?.Next_cursor;
    }
}

return slackMembers;

Slack users.list API說明 :https://api.slack.com/methods/users.list

-----------------------------------------

有時在會走之前你就得跑

你不解決問題 就等問題解決你