質問編集履歴

1

文言変更

2021/08/19 06:03

投稿

SA-KYO
SA-KYO

スコア37

test CHANGED
@@ -1 +1 @@
1
- 【GAS】LINEグループチャットに匿名で投稿するBot
1
+ 【GAS】LINEグループチャット投稿するBot
test CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
  LINE Messaging APIとGoogle Apps Scriptを使って
8
8
 
9
- グループチャットに匿名で投稿+予定の共有ができるLINE Botを開発途中です。
9
+ グループチャットにLINE Botを開発途中です。
10
10
 
11
11
  何度参考記事を見直しても
12
12
 
@@ -40,35 +40,7 @@
40
40
 
41
41
 
42
42
 
43
- ```ここに言語名を入力
44
43
 
45
- // Messaging APIのチャネルアクセストークン
46
-
47
- const CHANNEL_ACCESS_TOKEN = "【ここに個人番号】";
48
-
49
- // 予定の追加・管理・取得をするカレンダーID
50
-
51
- const CALENDER_ID = "【ここに個人番号】";
52
-
53
- // グルチャのグループID
54
-
55
- const GROUP_ID = "【ここに個人番号】";
56
-
57
-
58
-
59
- const dateExp = /(\d{2})/(\d{2})\s(\d{2}):(\d{2})/;
60
-
61
- const dayExp = /(\d+)[/月](\d+)/;
62
-
63
- const hourMinExp = /(\d+)[:時](\d+)*/;
64
-
65
-
66
-
67
- /*
68
-
69
- * ボットにイベントが発生したときの(メイン)処理
70
-
71
- */
72
44
 
73
45
  function doPost(e) {
74
46
 
@@ -94,243 +66,13 @@
94
66
 
95
67
 
96
68
 
97
- // 状態なし
69
+ /*
98
-
99
- if(type === null) {
100
-
101
- // 「予定の追加」メッセージを受け取ったとき
102
-
103
- if(userMessage === "予定の追加") {
104
-
105
- cache.put("type", 1);
106
-
107
- reply(replyToken, "予定の日付を教えてください!\n形式指定:『1/23』『1月23日』\nキャンセル:『やめる』と入力");
108
-
109
- // 「匿名で投稿」メッセージを受け取ったとき
110
-
111
- } else if(userMessage === "匿名で投稿") {
112
-
113
- cache.put("type", 10);
114
-
115
- reply(replyToken, "グルチャに匿名でラインします!投稿内容を教えてください!\nキャンセル:『やめる』と入力");
116
-
117
- // メッセージの投稿に必要なグループIDの取得(後準備で説明)
118
-
119
- } else if(userMessage === "getGroupId") {
120
-
121
- reply(replyToken, JSON.parse(e.postData.contents).events[0].source.groupId);
122
-
123
- }
124
-
125
- // 状態あり
126
-
127
- } else {
128
-
129
- if(userMessage === "やめる") {
130
-
131
- cache.remove("type");
132
-
133
- reply(replyToken, "キャンセルしました");
134
-
135
- return;
136
-
137
- }
138
70
 
139
71
 
140
72
 
141
- // 状態1~5は予定の追加、状態10~11は匿名で投稿
142
-
143
- switch(type) {
144
-
145
- // 予定の日付
146
-
147
- case "1":
148
-
149
- let [matched, month, day] = userMessage.match(dayExp);
150
-
151
- cache.put("type", 2);
152
-
153
- cache.put("month", month);
154
-
155
- cache.put("day", day);
156
-
157
- reply(replyToken, "次に開始時刻を教えてください!\n形式指定:『1:23』『12時』『12時34分』\nキャンセル:『やめる』と入力");
158
-
159
- break;
73
+ */
160
-
161
- // 予定の開始時刻
162
-
163
- case "2":
164
-
165
- let [matcheds, startHour, startMin] = userMessage.match(hourMinExp);
166
-
167
- cache.put("type", 3);
168
-
169
- cache.put("start_hour", startHour);
170
-
171
- if (startMin == null) startMin = "00";
172
-
173
- cache.put("start_min", startMin);
174
-
175
- reply(replyToken, "次に終了時刻を教えてください!\n形式指定:『1:23』『12時』『12時34分』\n\キャンセル:『やめる』と入力");
176
-
177
- break;
178
-
179
- // 予定の終了時刻
180
-
181
- case "3":
182
-
183
- let [matchedss, endHour, endMin] = userMessage.match(hourMinExp);
184
-
185
- cache.put("type", 4);
186
-
187
- cache.put("end_hour", endHour);
188
-
189
- if (endMin == null) endMin = "00";
190
-
191
- cache.put("end_min", endMin);
192
-
193
- reply(replyToken, "最後に予定の名前を教えてください!\nキャンセル:『やめる』と入力");
194
-
195
- break;
196
-
197
- // 予定の名前
198
-
199
- case "4":
200
-
201
- cache.put("type", 5);
202
-
203
- cache.put("title", userMessage);
204
-
205
- let [title, startDate, endDate] = createEventData(cache);
206
-
207
- reply(replyToken, toEventFormat(title, startDate, endDate) + "\n\nで間違いないでしょうか?よろしければ『はい』を、やり直す場合は『いいえ』と入力してください!");
208
-
209
- break;
210
-
211
- // 予定の確認
212
-
213
- case "5":
214
-
215
- cache.remove("type");
216
-
217
- if (userMessage === "はい") {
218
-
219
- let [title, startDate, endDate] = createEventData(cache);
220
-
221
- CalendarApp.getCalendarById(CALENDER_ID).createEvent(title, startDate, endDate);
222
-
223
- reply(replyToken, "予定を追加しました!");
224
-
225
- } else {
226
-
227
- reply(replyToken, "お手数ですが最初からやり直してください");
228
-
229
- }
230
-
231
- break;
232
74
 
233
75
 
234
-
235
- // 匿名で投稿する内容
236
-
237
- case "10":
238
-
239
- cache.put("type", 11);
240
-
241
- cache.put("post", userMessage);
242
-
243
- let message = createPost(cache);
244
-
245
- reply(replyToken, message + "\n\nで間違いないでしょうか?よろしければ『はい』を、やり直す場合は『いいえ』と入力してください!\nいたずらや誹謗中傷は絶対にやめてください");
246
-
247
- break;
248
-
249
- // 投稿する内容の確認
250
-
251
- case "11":
252
-
253
- cache.remove("type");
254
-
255
- if (userMessage === "はい") {
256
-
257
- let message = createPost(cache);
258
-
259
- pushPost("匿名投稿:\n" + message);
260
-
261
- } else {
262
-
263
- reply(replyToken, "お手数ですが最初からやり直してください");
264
-
265
- }
266
-
267
- cache.remove("post");
268
-
269
- break;
270
-
271
- }
272
-
273
- }
274
-
275
- }
276
-
277
-
278
-
279
- /*
280
-
281
- * 追加する予定の日付、開始時刻、終了時刻、名前の作成・保管
282
-
283
- */
284
-
285
- function createEventData(cache) {
286
-
287
- const year = new Date().getFullYear();
288
-
289
- const title = cache.get("title");
290
-
291
- const startDate = new Date(year, cache.get("month") - 1, cache.get("day"), cache.get("start_hour"), cache.get("start_min"));
292
-
293
- const endDate = new Date(year, cache.get("month") - 1, cache.get("day"), cache.get("end_hour"), cache.get("end_min"));
294
-
295
- return [title, startDate, endDate];
296
-
297
- }
298
-
299
-
300
-
301
- /*
302
-
303
- * 追加する予定の確認のためのフォーマット作成
304
-
305
- */
306
-
307
- function toEventFormat(title, startDate, endDate) {
308
-
309
- const start = Utilities.formatDate(startDate, "JST", "MM/dd HH:mm");
310
-
311
- const end = Utilities.formatDate(endDate, "JST", "MM/dd HH:mm");
312
-
313
- const str = title + ": " + start + " ~ " + end;
314
-
315
- return str;
316
-
317
- }
318
-
319
-
320
-
321
- /*
322
-
323
- * 匿名で投稿する内容の作成・保管
324
-
325
- */
326
-
327
- function createPost(cache){
328
-
329
- const post = cache.get("post");
330
-
331
- return post;
332
-
333
- }
334
76
 
335
77
 
336
78
 
@@ -378,124 +120,8 @@
378
120
 
379
121
 
380
122
 
381
- /*
382
123
 
383
- * ボットからのポスト処理
384
-
385
- */
386
-
387
- function pushPost(body){
388
-
389
- const url = "https://api.line.me/v2/bot/message/push";
390
-
391
-
392
-
393
- // 指定のグルチャにPOSTする
394
-
395
- UrlFetchApp.fetch(url, {
396
-
397
- "headers": {
398
-
399
- "Content-Type": "application/json; charset=UTF-8",
400
-
401
- "Authorization": "Bearer " + CHANNEL_ACCESS_TOKEN,
402
-
403
- },
404
-
405
- "method": "post",
406
-
407
- "payload": JSON.stringify({
408
-
409
- "to": GROUP_ID,
410
-
411
- "messages":[{
412
-
413
- "type": "text",
414
-
415
- "text": body,
416
-
417
- }]
418
-
419
- })
420
-
421
- })
422
-
423
- }
424
124
 
425
125
 
426
126
 
427
127
  /*
428
-
429
- * 通知する予定の取得
430
-
431
- */
432
-
433
- function getEvents() {
434
-
435
- let date = new Date();
436
-
437
- date.setDate(date.getDate() + 1);
438
-
439
- const events = CalendarApp.getCalendarById(CALENDER_ID).getEventsForDay(date);
440
-
441
-
442
-
443
- if (events.length !== 0) {
444
-
445
- let body = "明日の予定は\n";
446
-
447
- events.forEach(function(event) {
448
-
449
- const title = event.getTitle();
450
-
451
- const start = toHHmm(event.getStartTime());
452
-
453
- const end = toHHmm(event.getEndTime());
454
-
455
- body += "*" + title + ": " + start + " ~ " + end + "\n";
456
-
457
- });
458
-
459
- body += "です!";
460
-
461
-
462
-
463
- pushPost(body);
464
-
465
- }
466
-
467
- }
468
-
469
-
470
-
471
- /*
472
-
473
- * 時刻フォーマットの作成
474
-
475
- */
476
-
477
- function toHHmm(date){
478
-
479
- return Utilities.formatDate(date, "JST", "HH:mm");
480
-
481
- }
482
-
483
- ```
484
-
485
-
486
-
487
- ### 試したこと
488
-
489
-
490
-
491
- タイプミスなどの確認ぐらいしか分かりませんでした、、、
492
-
493
- よろしくお願いいたします????‍♂️
494
-
495
-
496
-
497
- ### 補足情報(FW/ツールのバージョンなど)
498
-
499
-
500
-
501
- ここにより詳細な情報を記載してください。