Jdalt40

Google App Script Code

Jul 7th, 2022 (edited)
202
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var messageArray  = []
  2.  
  3. function chartToImage()
  4. {
  5.   var slides        = SlidesApp.create("temp");
  6.   var slideDeleted  = false;
  7.  
  8.   var startTime     = new Date().getTime();
  9.   var today         = new Date();
  10.   var todayString   = today.getDate() + "-" + today.getMonth()
  11.  
  12.   var creationDate  = new Date('August 15, 2016 GMT+10:00');
  13.   var creationString= creationDate.getDate() + "-" + creationDate.getMonth()
  14.  
  15.   var anniversary   = ""
  16.  
  17.   Logger.log(Duration(startTime)[0] + "Today's date is " + (today.getDate() + "-" + today.getMonth()))
  18.   Logger.log(Duration(startTime)[0] + "Creation date is " + (creationDate.getDate() + "-" + creationDate.getMonth()))
  19.  
  20.   if(todayString == creationString || todayString == "31-11")
  21.   {
  22.     if(todayString == "31-12")
  23.     {
  24.       Logger.log(Duration(startTime)[0] + "It's A New Year!")
  25.       var anniversary = "\n***HAPPY NEW YEARS!***"
  26.     }
  27.     else if(todayString == creationString)
  28.     {
  29.       var year        = getNumberWithOrdinal(Math.floor(((today / 86400000) - (creationDate / 86400000)) / 365))
  30.       Logger.log(Duration(startTime)[0] + "It's our " + year + " anniversary!")
  31.       var anniversary = "\n***HAPPY " + year + " ANNIVERSARY!***"
  32.     }
  33.   }
  34.  
  35.   var properties    = PropertiesService.getScriptProperties()
  36.   var discordUrl    = "REMOVED";
  37.   var urlQueries    = "?thread_id=905517563616849950&wait=true";
  38.  
  39.   var files         = DriveApp.getFolderById("1GDylzA3ibQVRHuqx7VpLs_BY1UVlD9_v").getFiles()
  40.   var spreadsheets  = []
  41.   var images        = []
  42.  
  43.   try
  44.   {
  45.     while(files.hasNext())
  46.     {
  47.       var file      = files.next()
  48.       Logger.log(Duration(startTime)[0] + "Fetching File ID")
  49.       var fileID    = file.getId()
  50.       Logger.log(Duration(startTime)[0] + "File ID Fetched")
  51.  
  52.       Logger.log(Duration(startTime)[0] + "Opening " + file.getName())
  53.       spreadsheets.push(SpreadsheetApp.openById(fileID))
  54.       Logger.log(Duration(startTime)[0] + file.getName() + " Opened")
  55.       if (Duration(startTime)[1] >= 120)
  56.       {
  57.         throw("Opening spreadsheet has taken too long! Restarting")
  58.       }
  59.     }
  60.  
  61.     spreadsheets.sort((a, b) => a.getId() > b.getId() && 1 || -1)
  62.     Logger.log(Duration(startTime)[0] + "Spreadsheets Sorted")
  63.  
  64.     for (var i = 0; i < spreadsheets.length;)
  65.     {
  66.       Logger.log(Duration(startTime)[0] + "Grabbing Charts From " + spreadsheets[i].getName())
  67.       var charts      = spreadsheets[i].getSheets()[0].getCharts()
  68.       Logger.log(Duration(startTime)[0] + spreadsheets[i].getName() +": Charts Fetched")
  69.       charts.sort((a, b) => a.getContainerInfo().getAnchorRow() > b.getContainerInfo().getAnchorRow() && 1 || -1)
  70.       Logger.log(Duration(startTime)[0] + spreadsheets[i].getName() +": Sorted Charts")
  71.  
  72.       for (var j = 0; j < charts.length;)
  73.       {
  74.         charts.push(slides.getSlides()[0].insertSheetsChartAsImage(charts.shift()).getAs("image/png"))
  75.         Logger.log(Duration(startTime)[0] + spreadsheets[i].getName() + ": Chart Pushed, " + (charts.length - j) + " Remaining")
  76.         j++
  77.       }
  78.  
  79.       images.push(charts)
  80.       i++
  81.     }
  82.     DriveApp.getFileById(slides.getId()).setTrashed(true);
  83.     var slideDeleted  = true;
  84.     Logger.log(Duration(startTime)[0] + "Chart Cache Deleted")
  85.  
  86.     if(properties.getProperty("messageIDArray") != null)
  87.     {
  88.       Logger.log(Duration(startTime)[0] + "Deleting Messages")
  89.       deleteMessages(JSON.parse(properties.getProperty("messageIDArray")), discordUrl, "?wait=true&thread_id=905517563616849950")
  90.       Logger.log(Duration(startTime)[0] + "Messages Deleted")
  91.     }
  92.  
  93.     sendMessage("***__Server Statistics, <t:" + Math.floor((new Date().getTime()/1000)).toString() + ":F>__***" + anniversary, discordUrl, urlQueries, false, false)
  94.     Logger.log(Duration(startTime)[0] + "Starting Message Sent")
  95.     for (var i = 0; i < spreadsheets.length;)
  96.     {
  97.       var messageId   = sendMessage("***" + spreadsheets[i].getName() + "***", discordUrl, urlQueries, images[i], false, startTime)
  98.       i++
  99.     }
  100.     var endMessage    = "You can view the server data here: https://drive.google.com/drive/folders/19n_9hC4Odc-q4aoSIB4IbwivSviMVaDt \nGive me some feedback here!: https://forms.gle/WzuYpaJ22VRSvJY38 \nCreated by <@221459835315683330>"
  101.     sendMessage(endMessage, discordUrl, urlQueries, false, false)
  102.  
  103.     Logger.log(Duration(startTime)[0] + "All Messages Sent")
  104.     properties.setProperty("messageIDArray", JSON.stringify(messageArray))
  105.     //ScriptApp.newTrigger("channelChartToImage").timeBased().at(new Date(new Date().getTime() + 60000)).create()
  106.   }
  107.   catch(error)
  108.   {
  109.     Logger.log(Duration(startTime)[0] + "This Script Will Restart Due To An Error In A Minute")
  110.     Logger.log(Duration(startTime)[0] + "Error: " + error)
  111.     ScriptApp.newTrigger("chartToImage").timeBased().at(new Date(new Date().getTime() + 60000)).create()
  112.     if(!slideDeleted)
  113.     {
  114.       DriveApp.getFileById(slides.getId()).setTrashed(true);
  115.     }
  116.   }
  117. }
  118.  
  119. function sendMessage(message, webhookURL, queries, images, thread_name, startTime)
  120. {
  121.   var payload                   = {}
  122.   var params                    = {}
  123.  
  124.   if(thread_name)
  125.   {
  126.     payload.thread_name      = thread_name;
  127.   }
  128.  
  129.   if(images)
  130.   {
  131.     var attachmentsLimit        = 10;
  132.     var iterationsNeeded        = Math.floor((images.length - 1) / attachmentsLimit) + 1
  133.  
  134.     Logger.log(Duration(startTime)[0] + "Image Exists")
  135.     Logger.log(Duration(startTime)[0] + "Starting length is: " + images.length)
  136.     for (var p = 0; p < iterationsNeeded;)
  137.     {
  138.       var payload               = {}
  139.       var params                = {}
  140.  
  141.       Logger.log(Duration(startTime)[0] + "Iteration" + (p + 1))
  142.       if(message && p < 1)
  143.       {
  144.         Logger.log(Duration(startTime)[0] + "Message Exists and P < 1")
  145.         payload.content         = message;
  146.       }
  147.       for (var k = 0 + (p * 10); k < Math.min(images.length, attachmentsLimit * (p + 1));)
  148.       {
  149.         images[k].setName("Chart" + k + ".png")
  150.        
  151.         payload[k - (p * 10)]   = images[k]
  152.         k++
  153.         Logger.log(Duration(startTime)[0] + "Image length remaining is: " + (images.length - k))
  154.         Logger.log(Duration(startTime)[0] + payload)
  155.       }
  156.       if(thread_name)
  157.       {
  158.         payload.thread_name      = thread_name;
  159.       }
  160.       params.payload            = payload;
  161.       params.muteHttpExceptions = true;
  162.       params.method             = "POST";
  163.       Logger.log(Duration(startTime)[0]+ params)
  164.       while(true)
  165.       {
  166.         var response            = UrlFetchApp.fetch(webhookURL + queries, params);
  167.         var responseCode        = response.getResponseCode()
  168.         if(responseCode == 429 || responseCode == 429.0)
  169.         {
  170.           var seconds           = Math.ceil((JSON.parse(response.getContentText()).retry_after) * 1000) / 1000
  171.           Logger.log(Duration(startTime)[0] + "Got throttled on sending message, waiting " + seconds + " seconds")
  172.           Utilities.sleep(seconds * 1000)
  173.         }
  174.         else
  175.         {
  176.           break;
  177.         }
  178.       }
  179.       Logger.log(Duration(startTime)[0] + "Message Sent")
  180.       messageArray.push(JSON.parse(response.getContentText()).id)
  181.       p++
  182.     }
  183.   }
  184.   else
  185.   {
  186.     payload.content             = message;
  187.     params.payload              = payload;
  188.  
  189.     params.muteHttpExceptions   = true;
  190.     params.method               = "POST";
  191.  
  192.     var response = UrlFetchApp.fetch(webhookURL + queries, params).getContentText();
  193.     messageArray.push(JSON.parse(response).id)
  194.   }
  195.   return JSON.parse(response).id;
  196. }
Advertisement
Add Comment
Please, Sign In to add comment