1つ前の質問の危険性を教えて下さった方へ
本当にありがとうございました。
現在GASを使用してこのようなLINEBOTを作成しています。
googleフォームを使用し、通知させる内容、日付を入力
入力された内容をスプレッドシートに記述
設定した時間ごとに通知を送信
このようなプログラムを見よう見まねで作成したのですが、予定を表示させたときに、複数人の予定が纏めて表示されてしまいました。
そこで、BOTを追加した人ごとにスプレッドシートを作成して別々に内容を管理したいと考えたのですが行き詰ってしまいました。
初心者なので理解力にかけることがあるとは思いますが、ご指導していただけると有難いです。
Javascript
1var ACCESS_TOKEN = "XXXXXXXXXX"; 2var PUSH = "https://api.line.me/v2/bot/message/multicast"; 3var REPLY = "https://api.line.me/v2/bot/message/reply"; 4 5function doPost(e) { 6 var events = JSON.parse(e.postData.contents).events; 7 events.forEach(function(event) { 8 if(event.type == "message") { 9 reply(event); 10 } else if(event.type == "follow") { 11 follow(event); 12 } else if(event.type == "unfollow") { 13 unFollow(event); 14 } 15 }); 16} 17 18function push() { 19 var spreadsheet = SpreadsheetApp.openById("XXXXXXXXXX"); 20 var sheet = spreadsheet.getActiveSheet(); 21 22 var start = 2; 23 var end = sheet.getLastRow(); 24 25 var today = new Date(); 26 var formattedDate = Utilities.formatDate(today, "JST", "yyyy/MM/dd"); 27 28 var spsh = SpreadsheetApp.openById("XXXXXXXXXX"); 29 var sht = spsh.getActiveSheet(); 30 var data = sht.getDataRange().getValues(); 31 var userlist = []; 32 for(var n = 0; n < data.length; n++){ 33 userlist.push(data[n][0]); 34 } 35 36 var value =[]; 37 for(var i = start; i <= end; i++) { 38 var sell_C = "C" + i; 39 var day_C = sheet.getRange(sell_C).getValue(); 40 var day_C = Utilities.formatDate(day_C, "JST", "yyyy/MM/dd"); 41 if(formattedDate != day_C){ 42 continue; 43 } 44 var sell_B = "B" + i; 45 value.push("・" + sheet.getRange(sell_B).getValue() + "\n\n"); 46 } 47 if(value.length == 0){ 48 return; 49 } 50 51 var postData = { 52 "to" : userlist, 53 "messages" : [ 54 { 55 "type" : "text", 56 "text" : "【本日の予定】\n\n" + value.join("") + "今日も一日がんばってね!" 57 } 58 ] 59 }; 60 61 var headers = { 62 "Content-Type" : "application/json; charset=UTF-8", 63 "Authorization" : "Bearer " + ACCESS_TOKEN 64 }; 65 66 var options = { 67 "method" : "POST", 68 "headers" : headers, 69 "payload" : JSON.stringify(postData) 70 }; 71 return UrlFetchApp.fetch(PUSH, options); 72} 73 74function reply(data) { 75 var postMsg = data.message.text; 76 var replyToken = data.replyToken; 77 var replyText = ""; 78 79 if(postMsg == "登録") { 80 replyText = "予定の登録はこちら\n" + "https://docs.google.com/forms/d/XXXXXXXXXX/edit#responses"; 81 } else if(postMsg == "今後の予定") { 82 var spreadsheet = SpreadsheetApp.openById("XXXXXXXXXX"); 83 var sheet = spreadsheet.getActiveSheet(); 84 85 var range = sheet.getRange(2, 1, sheet.getLastRow(), 3); 86 range.sort([ 87 {column: 3, ascending: true}, 88 ]); 89 90 var start = 2; 91 var end = sheet.getLastRow(); 92 93 var today = new Date(); 94 var formattedDate = Utilities.formatDate(today, "JST", "yyyy/MM/dd"); 95 96 var value =[]; 97 for(var i = start; i <= end; i++) { 98 var sell_C = "C" + i; 99 var day_C = sheet.getRange(sell_C).getValue(); 100 var day_C = Utilities.formatDate(day_C, "JST", "yyyy/MM/dd"); 101 if(formattedDate < day_C){ 102 var sell_B = "B" + i; 103 value.push("・" + sheet.getRange(sell_B).getValue() + "(" + day_C + ")" + "\n\n"); 104 } 105 } 106 replyText = value.join("") + "忘れないようにしましょう!"; 107 } 108 109 if(replyText == ""){ 110 return; 111 } else { 112 var postData = { 113 "replyToken" : replyToken, 114 "messages" : [ 115 { 116 "type" : "text", 117 "text" : replyText 118 } 119 ] 120 }; 121 122 var headers = { 123 "Content-Type" : "application/json; charset=UTF-8", 124 "Authorization" : "Bearer " + ACCESS_TOKEN 125 }; 126 127 var options = { 128 "method" : "POST", 129 "headers" : headers, 130 "payload" : JSON.stringify(postData) 131 }; 132 133 return UrlFetchApp.fetch(REPLY, options); 134 } 135} 136 137function follow(e) { 138 var spsh = SpreadsheetApp.openById("XXXXXXXXXX"); 139 var sht = spsh.getActiveSheet(); 140 sht.appendRow([e.source.userId]); 141} 142 143function unFollow(e){ 144 var spsh = SpreadsheetApp.openById("XXXXXXXXXX"); 145 var sht = spsh.getActiveSheet(); 146 var result = findRow(sht, e.source.userId, 1); 147 if(result > 0){ 148 sht.deleteRows(result); 149 } 150} 151 152function findRow(sht,val,col){ 153 var data = sht.getDataRange().getValues(); 154 for(var i = 0; i < data.length; i++){ 155 if(data[i][col-1] === val){ 156 return i+1; 157 } 158 } 159 return 0; 160}
回答2件
あなたの回答
tips
プレビュー