Last active
October 29, 2021 09:11
-
-
Save kboy-silvergym/e0fd8b91f4c982462133a0ed1c166182 to your computer and use it in GitHub Desktop.
timesという名前がつくチャンネルに招待してくれるslack botのGAS
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var legacyToken = "xoxb-xxx"; | |
var botUserId = "D020MGLFK0A"; | |
var targetChannelPatterns = ['times_.*']; | |
// WebHook用 Hook発言をしたユーザー情報を取得し、全てのchannelにinviteしてあげる | |
function doPost(e){ | |
var text = e.parameter.text.substring(e.parameter.trigger_word.length).trim(); | |
if(text != "招待して"){ | |
return postMessage(e.parameter.channel_id, "ちょっとよくわからないです"); | |
} | |
var message1 = "全timesチャンネルに招待しますね!"; | |
postMessage(e.parameter.channel_id, message1); | |
var userId = e.parameter.user_id; | |
var channels = fetchChannles(); | |
var resultMessage = inviteAll(userId, channels); | |
return postMessage(e.parameter.channel_id, resultMessage); | |
} | |
function postMessage(channelId, message){ | |
var postMessageUrl = 'https://slack.com/api/chat.postMessage'; | |
var payload = | |
{ | |
"token" : legacyToken, | |
"channel" : channelId, | |
"text": message | |
}; | |
var options = | |
{ | |
"method" : "post", | |
"payload" : payload | |
}; | |
var data = UrlFetchApp.fetch(postMessageUrl, options); | |
var json = JSON.parse(data); | |
return json; | |
} | |
function fetchChannles() { | |
var channelsUrl = 'https://slack.com/api/conversations.list?token=' + legacyToken + '&exclude_archived=1&pretty=1&limit=200'; | |
var data = UrlFetchApp.fetch(channelsUrl); | |
var json = JSON.parse(data); | |
var channels = json.channels; | |
var filterdChannels = []; | |
for (var i = 0; i < channels.length; i++) { | |
var channel = channels[i]; | |
var exclude = true; | |
for (var j = 0; j < targetChannelPatterns.length; j++) { | |
var targetPattern = targetChannelPatterns[j] | |
pattern = new RegExp(targetPattern); | |
if (channel.name.match(pattern)) { | |
exclude = false; | |
break; | |
} | |
} | |
if (!exclude) { | |
filterdChannels.push(channel); | |
} | |
} | |
return filterdChannels; | |
} | |
function getChannnelListString(channels) { | |
var message = ':zap:timesチャンネル一覧:zap:\n'; | |
for (var i = 0; i < channels.length; i++) { | |
var channel = channels[i]; | |
message += '<#' + channel.id + '|' + channel.name + '>'; | |
message += '\n'; | |
} | |
return message; | |
} | |
function inviteAll(userId, channels){ | |
var cnt = 0; | |
var error = 0; | |
for (var i = 0; i < channels.length; i++) { | |
var channel = channels[i]; | |
var joinChannelUrl = 'https://slack.com/api/conversations.invite'; | |
var payload = | |
{ | |
"token" : legacyToken, | |
"channel" : channel.id, | |
"users": userId | |
}; | |
var options = | |
{ | |
"method" : "post", | |
"payload" : payload | |
}; | |
var data = UrlFetchApp.fetch(joinChannelUrl, options); | |
var json = JSON.parse(data); | |
if(json.ok) { | |
cnt++; | |
} else { | |
error++; | |
} | |
} | |
return cnt + "個のチャンネルに招待されました\n" + error + "個のチャンネルにはすでに入っています"; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment