forked from icchi-h/Stamp_on_Slack
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.js
93 lines (67 loc) · 2.42 KB
/
main.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
var token = "<SlackのAPI Token>";
var sheet_url = "<Googleスプレッドシートの共有URL>";
// Outgoing WebHooksに反応する関数
function doPost(e) {
if( e.parameter.user_name == "slackbot" ) {
return null;
}
// Custom Emojiでなければ終了
if(!isStamp(e.parameter.text.trim())){
throw new Error("exit");
}
var stamp_url = getStampURL(e.parameter.text.trim());
// Custom Emojiに対応するスタンプURLがなければ終了
if (stamp_url == ""){
throw new Error("exit");
}
var channel_id = e.parameter.channel_id;
var user_icon_url = getUserIconURL(e.parameter.user_id);
var app = SlackApp.create(token);
// 投稿されたスタンプの削除
app.chatDelete(channel_id, e.parameter.timestamp);
// 対応するスタンプURLを投稿
var post_info = app.postMessage(channel_id, stamp_url, {
username: e.parameter.user_name,
icon_url: getUserIconURL(e.parameter.user_id)
});
return true;
}
// Outgoing webhookがスタンプかどうかの判定関数
function isStamp(text){
if (text.slice(0,1)==":" && text.slice(-1)==":") return true;
else return false;
}
// UserIDからそのユーザアイコンのURLを取得する関数
function getUserIconURL(user_id){
var app = SlackApp.create(token);
var user_info = app.usersInfo(user_id);
return user_info.user.profile.image_72;
}
// スプレッドシートからスタンプ名に対応するオリジナルのスタンプURLを取得する関数
function getStampURL(stamp_name){
var stamp_url = "";
// スプレッドシートの選択
var ss = SpreadsheetApp.openByUrl(sheet_url);
// シートの指定
var sheet = ss.getSheets()[0];
var start_row = 1;
var last_row = sheet.getLastRow();
// シートの下から検索
for (var r=last_row; r>=start_row; r--){
// 値の取得
var sn = sheet.getSheetValues(r, 1, 1, 1);
if (sn == stamp_name){
stamp_url = sheet.getSheetValues(r, 2, 1, 1).toString(); //toStringしておかないとindexOfがうまく動作しない
// slackでは同じURLは展開されないためURLにUNIXTIMEを追記
var date = new Date() ;
if (stamp_url.indexOf("?") != -1){ // 既にGETパラメータが含まれている場合
stamp_url += "&" + date.getTime();
}
else{ // 含まれていない場合
stamp_url += "?" + date.getTime();
}
return stamp_url;
}
}
return stamp_url;
}