Skip to content

Instantly share code, notes, and snippets.

@kboy-silvergym
Last active October 29, 2021 09:11
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kboy-silvergym/e0fd8b91f4c982462133a0ed1c166182 to your computer and use it in GitHub Desktop.
Save kboy-silvergym/e0fd8b91f4c982462133a0ed1c166182 to your computer and use it in GitHub Desktop.
timesという名前がつくチャンネルに招待してくれるslack botのGAS
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