-
Notifications
You must be signed in to change notification settings - Fork 0
/
bot.gs
102 lines (93 loc) · 3.6 KB
/
bot.gs
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
94
95
96
97
98
99
100
101
102
/**
* Postするメッセージを作成する(複数バージョン)
* LINEのMessagingAPIの仕様だと送信できるメッセージの最大件数は5件
* https://developers.line.biz/ja/reference/messaging-api/#webhook-event-objects
* @param {Sheet} [sheet] - シートObject
* @param {Array} [rows] - 対象のデータ行配列
* @return {String} 見つかった行数分のゲームのPostするメッセージ
*/
function createPostMessages(sheet, rows) {
return rows.map(function(row) {
return {
'type': 'text',
'text': postMessage(sheet, row),
}
});
}
/**
* リストページをPostするメッセージを作成する
* @param {Number} [year] - 年
* @param {Number} [month] - 月
* @return {String} 出演するゲームがなかった時のPostするメッセージ
*/
function createListPagePostMessage(year, month) {
return [{
'type': 'text',
'text': listPagePostMessage(year, month),
}]
}
/**
* 出演するゲームがなかった時にPostするメッセージを作成する
* @param {Number} [sheet] - 月情報(-1,0,1)
* @param {String} [rows] - 声優名
* @return {String} 出演するゲームがなかった時のPostするメッセージ
*/
function createNotExistsPostMessage(month, voiceActorName) {
return [{
'type': 'text',
'text': notExistPostMessage(month, voiceActorName),
}]
}
/**
* リクエスト情報(JSON)を作成する
* @param {String} [replyToken] - WebHookで受信した応答用Token(LINE BOTより)
* @param {CallBack} [callback] - calllback関数
* @return {String} リクエスト情報(JSON)
*/
function createRequest(replyToken, callback) {
return {
'headers': {
'Content-Type': 'application/json; charset=UTF-8',
'Authorization': 'Bearer ' + Config.LineAccessToken,
},
'method': 'post',
'payload': JSON.stringify({
'replyToken': replyToken,
'messages': callback,
}),
}
}
/**
* Postを実行する
* @param {JSON} [e] - POSTされた情報
* @return {JSON} Postが成功した情報をJSON形式で返す
*/
function doPost(e) {
// LineBotからPostされたデータを取得
// Webhookイベントオブジェクトの返す値について
// →https://developers.line.biz/ja/reference/messaging-api/#webhook-event-objects
var replyToken = JSON.parse(e.postData.contents).events[0].replyToken, // WebHookで受信した応答用Token
userMessage = JSON.parse(e.postData.contents).events[0].message.text; // ユーザーのメッセージを取得(声優名)
// 対象の月を取得する
var targetMonth = getTargetMonth(userMessage);
// 対象のシートを取得
var yearMonth = getYearMonth(targetMonth),
sheet = getSheet(yearMonth);
// 声優名を取得する
var voiceActorName = getVoiceActorName(userMessage)
// 声優名から対象のスプレッドシートの行を取得
var foundRows = getRowsByVoiceActor(sheet, voiceActorName);
// LineにPostする
if (voiceActorName == 'リスト') {
var year = yearMonth.slice(0,4),
month = yearMonth.slice(4);
UrlFetchApp.fetch(Config.LinePostUrl, createRequest(replyToken, createListPagePostMessage(year, month)));
} else {
if (foundRows.length == 0) {
UrlFetchApp.fetch(Config.LinePostUrl, createRequest(replyToken, createNotExistsPostMessage(targetMonth, voiceActorName)));
} else {
UrlFetchApp.fetch(Config.LinePostUrl, createRequest(replyToken, createPostMessages(sheet, foundRows)));
}
}
return ContentService.createTextOutput(JSON.stringify({'content': 'post ok'})).setMimeType(ContentService.MimeType.JSON);
}