回答編集履歴

1

サンプル実装を追記

2021/07/09 01:10

投稿

draq
draq

スコア2573

test CHANGED
@@ -1 +1,207 @@
1
1
  やり取りの履歴をスプレッドシート等に保存しておき、直前のやり取りを見て処理をするといいんじゃないでしょうか。
2
+
3
+
4
+
5
+ ---
6
+
7
+ (追記)
8
+
9
+ 適当に実装してみました。空のスプレッドシートを用意してからためして見てください。
10
+
11
+ バリデーションと計算部分は自分で実装してください。
12
+
13
+
14
+
15
+ ```JavaScript
16
+
17
+ var ACCESS_TOKEN = "*************";
18
+
19
+ var URL = "https://api.line.me/v2/bot/message/reply";
20
+
21
+ var SS_ID = "****************"; //スプレッドシートのID
22
+
23
+
24
+
25
+ var HistorySheet = SpreadsheetApp.openById(SS_ID).getSheets()[0];
26
+
27
+
28
+
29
+ function doPost(e) {
30
+
31
+ var contents = e.postData.contents;
32
+
33
+ var obj = JSON.parse(contents);
34
+
35
+ var events = obj["events"];
36
+
37
+ for (var i = 0; i < events.length; i++) {
38
+
39
+ if (events[i].type == "message" && events[i].message.type == "text") {
40
+
41
+ reply_message(events[i]);
42
+
43
+ }
44
+
45
+ }
46
+
47
+ }
48
+
49
+
50
+
51
+ function reply_message(e) {
52
+
53
+ var input_text = e.message.text;
54
+
55
+ var reply_text = "";
56
+
57
+ const userId = e.source.userId;
58
+
59
+ const history = getLastUserHistory(userId);
60
+
61
+
62
+
63
+ if (history && history.continuous) {
64
+
65
+ if (history.text == "70%*2") {
66
+
67
+ reply_text = input_text + " を 軽減率70%×70% で計算した結果";
68
+
69
+ } else if (history.text == "70%*25%") {
70
+
71
+ reply_text = input_text + " を 軽減率70%×25% で計算した結果";
72
+
73
+ } else if (history.text == "70%*50%") {
74
+
75
+ reply_text = input_text + " を 軽減率70%50% で計算した結果";
76
+
77
+ } else if (history.text == "25%*2") {
78
+
79
+ reply_text = input_text + " を 軽減率25%×25% で計算した結果";
80
+
81
+ }
82
+
83
+ setLastUserHistory(userId, input_text, false);
84
+
85
+ }
86
+
87
+ else {
88
+
89
+ if (input_text == "70%*2") {
90
+
91
+ reply_text = "軽減率70%×70%で計算します。\n計算したいパーティーの最大HPを入力してください。";
92
+
93
+ } else if (input_text == "70%*25%") {
94
+
95
+ reply_text = "軽減率70%×25%で計算します。\n計算したいパーティーの最大HPを入力してください。";
96
+
97
+ } else if (input_text == "70%*50%") {
98
+
99
+ reply_text = "軽減率70%×50%で計算します。\n計算したいパーティーの最大HPを入力してください。";
100
+
101
+ } else if (input_text == "25%*2") {
102
+
103
+ reply_text = "軽減率25%×25%で計算します。\n計算したいパーティーの最大HPを入力してください。";
104
+
105
+ }
106
+
107
+ if (reply_text) {
108
+
109
+ setLastUserHistory(userId, input_text, true);
110
+
111
+ }
112
+
113
+ else {
114
+
115
+ setLastUserHistory(userId, input_text, false);
116
+
117
+ }
118
+
119
+ }
120
+
121
+
122
+
123
+ var postData = {
124
+
125
+ "replyToken": e.replyToken,
126
+
127
+ "messages": [{
128
+
129
+ "type": "text",
130
+
131
+ "text": reply_text
132
+
133
+ }]
134
+
135
+ };
136
+
137
+
138
+
139
+ var options = {
140
+
141
+ "method": "post",
142
+
143
+ "headers": {
144
+
145
+ "Content-Type": "application/json",
146
+
147
+ "Authorization": "Bearer " + ACCESS_TOKEN
148
+
149
+ },
150
+
151
+ "payload": JSON.stringify(postData)
152
+
153
+ };
154
+
155
+ const response = UrlFetchApp.fetch(URL, options);
156
+
157
+ if (response.getResponseCode() !== 200) {
158
+
159
+ throw new Error(response.getContentText());
160
+
161
+ }
162
+
163
+ }
164
+
165
+
166
+
167
+ function getLastUserHistory(userId) {
168
+
169
+ const userHistory = HistorySheet.getDataRange().getValues();
170
+
171
+ for (let i = userHistory.length - 1; 0 < i; i--) {
172
+
173
+ if (userHistory[i][1] === userId) {
174
+
175
+ return {
176
+
177
+ date: userHistory[i][0],
178
+
179
+ userId: userHistory[i][1],
180
+
181
+ text: userHistory[i][2],
182
+
183
+ continuous: userHistory[i][3]
184
+
185
+ };
186
+
187
+ }
188
+
189
+ }
190
+
191
+ return undefined;
192
+
193
+ }
194
+
195
+
196
+
197
+ function setLastUserHistory(userId, text, continuous) {
198
+
199
+ const values = [new Date(), userId, text, continuous];
200
+
201
+ HistorySheet.appendRow(values);
202
+
203
+ }
204
+
205
+
206
+
207
+ ```