Advertisement
Namokonov

Untitled

May 25th, 2022
1,085
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function onOpen() {
  2.   SpreadsheetApp.getUi()
  3.     .createMenu("> скрипты")
  4.     .addItem("запустить отправку", "send")
  5.     .addItem("запустить удаление", "del")
  6.     .addSeparator()
  7.     .addItem("создать триггер – поставить скрипты в расписание на каждые 15 минут", "setTrigger")
  8.     .addItem("удалить триггер", "delTrigger")
  9.     .addToUi()
  10. }
  11.  
  12. function del() {
  13.   const sheet = SpreadsheetApp.getActive().getSheetByName('удаление');
  14.   const data = sheet.getDataRange().getValues();
  15.   const telegramUrl = 'https://api.telegram.org/bot' + data[0][3];
  16.  
  17.   data.slice(5).forEach((row, i) => {
  18.     const range_result = sheet.getRange(i + 6, 4, 1, 2);
  19.     const date = d2s(new Date(), 'dd-MM-yy, HH:mm');
  20.     const [chatId, msId, del_dt, del] = [row[0], row[1], row[2], row[3]];
  21.     if (del != 'удалено' && (!del_dt || del_dt.getTime() < new Date().getTime()) && chatId && msId) {
  22.       try {
  23.         const result = deleteMessage(telegramUrl, chatId, msId);
  24.         range_result.setValues([[JSON.parse(result).ok ? 'удалено' : 'не удалено', `${date}\n${result}`]]);
  25.       } catch (e) {
  26.         range_result.setValues([['не удалено', `${date}\nошибка: ${e.name}: ${e.message} \n${e.stack}`]]);
  27.       }
  28.     }
  29.   })
  30. }
  31.  
  32. function send() {
  33.   const sheet = SpreadsheetApp.getActive().getSheetByName('отправка');
  34.   const data = sheet.getDataRange().getValues();
  35.   const telegramUrl = 'https://api.telegram.org/bot' + data[0][3];
  36.  
  37.   data.slice(5).forEach((row, i) => {
  38.     const range_result = sheet.getRange(i + 6, 5, 1, 2);
  39.     const date = d2s(new Date(), 'dd-MM-yy, HH:mm');
  40.     const [message, chatId, reply_msg_id, send_dt, send] = [row[0], row[1], row[2], row[3], row[4]];
  41.     if (send != 'отправлено' && (!send_dt || send_dt.getTime() < new Date().getTime()) && message && chatId) {
  42.       try {
  43.         const result = sendMessage(telegramUrl, chatId, message, reply_msg_id)
  44.         range_result.setValues([[JSON.parse(result).ok ? 'отправлено' : 'не отправлено', `${date}\n${result}`]]);
  45.       } catch (e) {
  46.         range_result.setValues([['не отправлено', `${date}\nошибка: ${e.name}: ${e.message} \n${e.stack}`]]);
  47.       }
  48.     }
  49.   })
  50. }
  51.  
  52.  
  53. function sendMessage(telegramUrl, chatId, message, reply_to_message_id) {
  54.   return UrlFetchApp.fetch(telegramUrl + '/sendMessage', {
  55.     method: 'post',
  56.     contentType: 'application/json',
  57.     payload: JSON.stringify({
  58.       chat_id: chatId,
  59.       text: message,
  60.       parse_mode: 'MarkdownV2',
  61.       reply_to_message_id: reply_to_message_id
  62.     }),
  63.     muteHttpExceptions: false
  64.   })
  65. }
  66.  
  67. function deleteMessage(telegramUrl, chatId, messageId) {
  68.   const request = {
  69.     method: 'post',
  70.     contentType: 'application/json',
  71.     muteHttpExceptions: true,
  72.     payload: JSON.stringify({
  73.       chat_id: chatId,
  74.       message_id: messageId
  75.     })
  76.   };
  77.   return UrlFetchApp.fetch(telegramUrl + '/deleteMessage', request)
  78. };
  79.  
  80. function d2s(date, f) {
  81.   return Utilities.formatDate(date, Session.getScriptTimeZone(), f)
  82. };
  83.  
  84. function all() {
  85.   del();
  86.   send();
  87. }
  88.  
  89. function setTrigger() {
  90.   var ss = SpreadsheetApp.getActive();
  91.   const owner = ss.getOwner().getEmail();
  92.   const user = Session.getActiveUser().getEmail();
  93.   if (user != owner) {
  94.     ss.toast('Только владелец таблицы может установить триггер');
  95.     return;
  96.   }
  97.  
  98.   const triggers = ScriptApp.getUserTriggers(ss);
  99.   for (var i in triggers) {
  100.     if (triggers[i].getHandlerFunction() == 'all') {
  101.       ss.toast('Триггер уже установлен');
  102.       return;
  103.     }
  104.   }
  105.  
  106.   let trigger = ScriptApp.newTrigger('all')
  107.     .timeBased()
  108.     .everyMinutes(15)
  109.     .create();
  110.   ss.toast('Триггер установлен')
  111. }
  112.  
  113.  
  114. function delTrigger() {
  115.   var ss = SpreadsheetApp.getActive();
  116.  
  117.   const triggers = ScriptApp.getUserTriggers(ss);
  118.   for (var i in triggers) {
  119.     if (triggers[i].getHandlerFunction() == 'all') {
  120.       ScriptApp.deleteTrigger(triggers[i]);
  121.       ss.toast('Триггер удалён');
  122.       return;
  123.     }
  124.   }
  125.  
  126.   ss.toast('Ничего подходящего для удаления не найдено');
  127. }
Advertisement
RAW Paste Data Copied
Advertisement