質問編集履歴

2

簡易化

2020/06/08 12:01

投稿

linebotaaa
linebotaaa

スコア0

test CHANGED
File without changes
test CHANGED
@@ -50,516 +50,6 @@
50
50
 
51
51
 
52
52
 
53
- //キャッシュをすべて削除する。
54
-
55
- if (userMessage.test(clear)) {
56
-
57
- replayChatprivate(replayToken, "キャンセルしました。");
58
-
59
- cleardata(userID);
60
-
61
- }
62
-
63
-
64
-
65
- if (state === null) {
66
-
67
- if (userMessage === '予定の追加') {
68
-
69
- const message = '開始日付を教えてくださ';
70
-
71
- replayChatprivate(replayToken, message);
72
-
73
- resisterPrivate(userID, 0);
74
-
75
- } else if (userMessage === 'グループに投稿') {
76
-
77
- end = isValid(userID, replayToken);
78
-
79
- } else {
80
-
81
- replayChatprivate(replayToken, '予定の');
82
-
83
- }
84
-
85
- } else {
86
-
87
- if (noExp.test(userMessage)) {
88
-
89
- deletecache(userID);
90
-
91
- replayChatprivate(replayToken, 'キャンセルしました');
92
-
93
- }
94
-
95
-
96
-
97
- switch (state) {
98
-
99
- // 予定の日付
100
-
101
- case '0':
102
-
103
- const matched = userMessage.match(dateExp);
104
-
105
- if (matched != null) {
106
-
107
- const message = '次に開始時刻は'
108
-
109
- replayChatprivate(replayToken, message);
110
-
111
- const a = matched[1] - 1;
112
-
113
- const date = a + "," + matched[2];
114
-
115
- resisterPrivate(userID, 1);
116
-
117
- const key1 = userID + 1;
118
-
119
- resisterPrivate(key1, date);
120
-
121
- } else {
122
-
123
- differentMessages(replayToken);
124
-
125
- }
126
-
127
- break;
128
-
129
- // 予定の開始時刻
130
-
131
- case '1':
132
-
133
- const matched1 = userMessage.match(hourMinExp);
134
-
135
- if (matched1 != null) {
136
-
137
- const message = '';
138
-
139
- replayChatprivate(replayToken, message);
140
-
141
- const date = matched1[1] + "," + matched1[2];//キャッシュ容量削減のために一つにまとめて保存。
142
-
143
- resisterPrivate(userID, 2);
144
-
145
- const key2 = userID + 2;
146
-
147
- resisterPrivate(key2, date);
148
-
149
- } else {
150
-
151
- differentMessages(replayToken);
152
-
153
- }
154
-
155
- break;
156
-
157
- // 終了日付
158
-
159
- case '2':
160
-
161
- const matched2 = userMessage.match(dateExp);
162
-
163
- if (matched2 != null) {
164
-
165
- const message = '次に終了';
166
-
167
- replayChatprivate(replayToken, message);
168
-
169
- const a = matched2[1] - 1; //Date()を使う為に-1をしておく。
170
-
171
- const date = a + "," + matched2[2];//キャッシュ容量削減のために一つにまとめて保存。
172
-
173
- resisterPrivate(userID, 3);
174
-
175
- const key3 = userID + 3;
176
-
177
- resisterPrivate(key3, date);
178
-
179
- } else {
180
-
181
- differentMessages(replayToken);
182
-
183
- }
184
-
185
- break;
186
-
187
- // 予定の終了時刻
188
-
189
- case '3':
190
-
191
- const matched3 = userMessage.match(hourMinExp);
192
-
193
- if (matched3 != null) {
194
-
195
- const message = '次に予定の';
196
-
197
- replayChatprivate(replayToken, message);
198
-
199
- const date = matched3[1] + "," + matched3[2];
200
-
201
- resisterPrivate(userID, 4);
202
-
203
- const key4 = userID + 4;
204
-
205
- resisterPrivate(key4, date);
206
-
207
- } else {
208
-
209
- differentMessages(replayToken);
210
-
211
- }
212
-
213
- break;
214
-
215
- // 予定の名前
216
-
217
- case '4':
218
-
219
- const year = new Date().getFullYear();
220
-
221
- const message = '西暦は' + year + '年でよろしいでしょうか?';
222
-
223
- resisterPrivate(userID, 5);
224
-
225
- const key5 = userID + 5;
226
-
227
- resisterPrivate(key5, userMessage);
228
-
229
- break;
230
-
231
- // 匿名でグループに投稿する内容
232
-
233
- case '10':
234
-
235
- const numberExp = /[0-9]{1,2}/;
236
-
237
- const matchmessage = userMessage.match(numberExp);
238
-
239
- if (matchmessage == null) {
240
-
241
- const message = "正しく入力されて";
242
-
243
- replayChatprivate(replayToken, message);
244
-
245
- } else {
246
-
247
- const GroupID = chooseGroup(userID, matchmessage[0]);
248
-
249
- replaymessage = retriveGroup(GroupID);
250
-
251
- replayChatprivate(replayToken, replaymessage + '\nで');
252
-
253
- resisterPrivate(userID, 11);
254
-
255
- const key1 = userID + 1;
256
-
257
- resisterPrivate(key1, replaymessage);//送信するルームを登録する。
258
-
259
- }
260
-
261
- break;
262
-
263
- // グループに投稿する内容の確認
264
-
265
- case '11':
266
-
267
- if (yesExp.test(userMessage)) {
268
-
269
- const message = "グループに"
270
-
271
- replayChatprivate(replayToken, message);
272
-
273
- resisterPrivate(userID, 12);
274
-
275
- } else {
276
-
277
- const message = "正しく入力"
278
-
279
- replayChatprivate(replayToken, message);
280
-
281
- deletecache()
282
-
283
- }
284
-
285
- break;
286
-
287
- }
288
-
289
- }
290
-
291
- getUserName(userID);
292
-
293
- if (Groupid != undefined) {
294
-
295
- getUsersinfo(Groupid);
296
-
297
- }
298
-
299
- }
300
-
301
-
302
-
303
- function storeCalender(userMessage, notchange, replayToken) {
304
-
305
- const yearExp = /(19[0-9]{2}|20[0-9]{2})/;
306
-
307
- if (yesExp.test(userMessage)) {
308
-
309
- const targetIDExp = /xxxxx/;
310
-
311
- if (userID.test(targetIDExp)) {
312
-
313
- const [title, startDate, endDate] = createEventData(userID, notchange);
314
-
315
- try {
316
-
317
- CalendarApp.getCalendarById(CALENDER_ID).createEvent(title, startDate, endDate);
318
-
319
- const message = "予定を追加しました";
320
-
321
- replayChatprivate(replayToken, message);
322
-
323
- cleardata(userID);
324
-
325
- } catch (e) {
326
-
327
- const message2 = "予定の追";
328
-
329
- replayChatprivate(replayToken, message2);
330
-
331
- cleardata(userID);
332
-
333
- }
334
-
335
- } else {
336
-
337
- const [title, startDate, endDate] = createEventData(userID, notchange);
338
-
339
- const startDATE = exchangeTIME(startDate);
340
-
341
- const endDATE = exchangeTIME(endDate);
342
-
343
- const url = generateURL(title, startDATE, endDATE);
344
-
345
- replayChatprivate(replayToken, url);
346
-
347
- cleardata(userID);
348
-
349
- }
350
-
351
- } else {
352
-
353
- differentMessages(replayToken);
354
-
355
- }
356
-
357
- }
358
-
359
-
360
-
361
- //userの名前を入手する為のプログラム。
362
-
363
- function getUserName(userID) {
364
-
365
- const line_endpoint = "https://api.line.me/v2/profile" + '/' + userID;
366
-
367
- const options = {
368
-
369
- "method": "get",
370
-
371
- "headers": {
372
-
373
- 'Content-type': 'application/json; charset=UTF-8',
374
-
375
- 'Authorization': 'Bearer' + CHANNEL_ACCESS_TOKEN,
376
-
377
- }
378
-
379
- };
380
-
381
- const ans = UrlFetchApp.fetch(line_endpoint, options);
382
-
383
- const userName = JSON.parse(ans).displayName;
384
-
385
- resisterTospreadsheet(userID, userName);
386
-
387
- }
388
-
389
-
390
-
391
- function differentMessages(replayToken) {
392
-
393
- const message = '値の';
394
-
395
- replayChatprivate(replayToken, message);
396
-
397
- }
398
-
399
-
400
-
401
-
402
-
403
- function cleardata(userID) {
404
-
405
- const keys = [userID];
406
-
407
- for (let i = 0; i < 8; i++) {
408
-
409
- keys.push(userID + i);
410
-
411
- }
412
-
413
- for (let i = 0; i < keys.length; i++) {
414
-
415
- deletecache(keys[i]);
416
-
417
- }
418
-
419
- }
420
-
421
-
422
-
423
- function replayChatprivate(replayToken, message) {
424
-
425
- const line_endpoint = 'https://api.line.me/v2/bot/message/replay';
426
-
427
-
428
-
429
- const headers = {
430
-
431
- 'Content-type': 'application/json; charset=UTF-8',
432
-
433
- 'Authorization': 'Bearer ' + CHANNEL_ACCESS_TOKEN,
434
-
435
- };
436
-
437
- const payloadArgument = {
438
-
439
- 'replayToken': replayToken,
440
-
441
- 'messages': [{
442
-
443
- 'type': 'text',
444
-
445
- 'text': message,
446
-
447
- }],
448
-
449
- };
450
-
451
- const payload = JSON.stringify(payloadArgument);
452
-
453
- const options = {
454
-
455
- 'method': 'post',
456
-
457
- 'headers': headers,
458
-
459
- 'payload': payload,
460
-
461
- };
462
-
463
- const urlfetch = UrlFetchApp.fetch(line_endpoint, options);
464
-
465
- }
466
-
467
-
468
-
469
- //グルーブチャット用:返信
470
-
471
- function replayChatGroup(body, GroupID) {
472
-
473
- const line_endpoint = 'https://api.line.me/v2/bot/message/Pull';
474
-
475
-
476
-
477
- const headers = {
478
-
479
- 'Content-type': 'application/json; charset=UTF-8',
480
-
481
- 'Authorization': 'Bearer ' + CHANNEL_ACCESS_TOKEN,
482
-
483
- };
484
-
485
- const payloadArgument = {
486
-
487
- 'to': GroupID,
488
-
489
- 'messages': [{
490
-
491
- 'type': 'text',
492
-
493
- 'text': body,
494
-
495
- }],
496
-
497
- };
498
-
499
- const payload = JSON.stringify(payloadArgument);
500
-
501
- const options = {
502
-
503
- 'method': 'post',
504
-
505
- 'headers': headers,
506
-
507
- 'payload': payload,
508
-
509
- };
510
-
511
- UrlFetchApp.fetch(line_endpoint, options);
512
-
513
- }
514
-
515
- //キャッシュに状態を保存する。
516
-
517
- //状態;次の処理を定める
518
-
519
- function resisterPrivate(userID, state) {
520
-
521
- const cache = CacheService.getScriptCache();
522
-
523
- cache.put(userID, state, 21600); //21600 seconds (6 hours)chashが保たれる
524
-
525
- }
526
-
527
-
528
-
529
- //今のstateの状態を返す。
530
-
531
- function retrivePrivate(userID) {
532
-
533
- const cache = CacheService.getScriptCache();
534
-
535
- const state = cache.get(userID);
536
-
537
- return state;
538
-
539
- }
540
-
541
- //プロパティを削除する
542
-
543
- function deleteProperty(key) {
544
-
545
- const scriptProperties = PropertiesService.getScriptProperties();
546
-
547
- scriptProperties.deleteProperty(key)
548
-
549
- }
550
-
551
-
552
-
553
- //キャッシュを削除する。
554
-
555
- function deletecache(key) {
556
-
557
- const cache = CacheService.getScriptCache();
558
-
559
- cache.remove(key);
560
-
561
- }
562
-
563
53
  ```
564
54
 
565
55
  ### 試したこと
@@ -569,11 +59,3 @@
569
59
  推測されるのが、replayChatprivate関連のミスではないか推測しているが、周辺のコードをweb上にあるコードと取り換えても全く動きませんでした。自分の中で疑わしい箇所は殆どチェックしましたが、どこがダメで動かないのか全く分かりません。
570
60
 
571
61
  また、アクセストークンが正しいか他のプログラムで確認しアクセストークンには問題ありませんでした。
572
-
573
- ### 補足情報(FW/ツールのバージョンなど)
574
-
575
- GASを用いて実行しています。
576
-
577
- githubにソースを載せました。
578
-
579
- https://github.com/asdfgh-13/gas/blob/master/%E3%82%B3%E3%83%BC%E3%83%89.gs

1

追記

2020/06/08 12:01

投稿

linebotaaa
linebotaaa

スコア0

test CHANGED
File without changes
test CHANGED
@@ -573,3 +573,7 @@
573
573
  ### 補足情報(FW/ツールのバージョンなど)
574
574
 
575
575
  GASを用いて実行しています。
576
+
577
+ githubにソースを載せました。
578
+
579
+ https://github.com/asdfgh-13/gas/blob/master/%E3%82%B3%E3%83%BC%E3%83%89.gs