Advertisement
Guest User

Untitled

a guest
Dec 18th, 2017
125
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.54 KB | None | 0 0
  1. /*
  2.  
  3. updateRoster
  4. by Jared Rhizor (http://jaredrhizor.com/)
  5. Modified for use with Riot API by Price Poston
  6. -----------------------------------------
  7.  
  8. On the script editor menu click:
  9. Run > updateRoster
  10. to update the roster immediately.
  11.  
  12. To update periodically, on the script editor menu click:
  13. Resources > Current project's triggers
  14. Click the notification to create a trigger.
  15. Select to run updateRoster from the first dropdown.
  16. Select Time-driven under events and select the interval to run the script.
  17.  
  18. */
  19.  
  20.  
  21. // deromanize: from http://blog.stevenlevithan.com/archives/javascript-roman-numeral-converter/comment-page-1
  22. function deromanize( roman ) {
  23. var roman = roman.toUpperCase(),
  24. lookup = {I:1,V:5,X:10,L:50,C:100,D:500,M:1000},
  25. arabic = 0,
  26. i = roman.length;
  27. while (i--) {
  28. if ( lookup[roman[i]] < lookup[roman[i+1]] )
  29. arabic -= lookup[roman[i]];
  30. else
  31. arabic += lookup[roman[i]];
  32. }
  33. return arabic;
  34. }
  35.  
  36. // wait: from https://stackoverflow.com/questions/14226803/javascript-wait-5-seconds-before-executing-next-line
  37. function wait(ms){
  38. var start = new Date().getTime();
  39. var end = start;
  40. while(end < start + ms) {
  41. end = new Date().getTime();
  42. }
  43. }
  44.  
  45. // toTitleCase: from http://stackoverflow.com/questions/196972/convert-string-to-title-case-with-javascript
  46. function toTitleCase(str)
  47. {
  48. return str.replace(/\w\S*/g, function(txt){return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();});
  49. }
  50.  
  51.  
  52. function updateRoster() {
  53. var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Responses");
  54. var rows = sheet.getDataRange();
  55. var numRows = rows.getNumRows();
  56. var values = rows.getValues();
  57.  
  58. //var NAME_COL = 0;
  59. var SUMMONER_NAME_COL = 1;
  60.  
  61. var num_unranked = 0;
  62. var num_bronze = 0;
  63. var num_silver = 0;
  64. var num_gold = 0;
  65. var num_plat = 0;
  66. var num_diamond = 0;
  67. var num_master = 0;
  68. var num_challenger = 0;
  69.  
  70. for (var i = 0; i < numRows; i++) {
  71. // get row
  72. var player = values[i+1];
  73.  
  74. // check if it reaches end of list of users before end of sheet
  75. if(typeof player === 'undefined') break;
  76.  
  77. //var name = player[NAME_COL];
  78. var summoner_name = player[SUMMONER_NAME_COL];
  79. var hidden_score;
  80. var rank;
  81. var ranked;
  82. var tier;
  83. var lp;
  84. var division;
  85. var summoner_id;
  86. var summoner_exists = true;
  87.  
  88. // Riot api key
  89. var key ="?api_key=";//Removed this
  90.  
  91. wait(2666);//Wait so as to not pass riots limit on calls. This sets a 90 call limit per two minutes.
  92.  
  93. try{
  94. var resp = UrlFetchApp.fetch("https://na1.api.riotgames.com/lol/summoner/v3/summoners/by-name/"+summoner_name+key);
  95. }
  96. catch (err) {
  97. summoner_exists = false
  98. }
  99. var resp_info = JSON.parse(resp.getContentText());
  100.  
  101. // check if user exists
  102. if(summoner_exists)
  103. {
  104. summoner_id = resp_info.id;
  105.  
  106. var level = Math.round(resp_info.summonerLevel);
  107.  
  108. if(level<30)
  109. {
  110. rank = "Level " + level;
  111. ranked = false;
  112. num_unranked++;
  113. }
  114. else
  115. {
  116. var resp2 = UrlFetchApp.fetch("https://na1.api.riotgames.com/lol/league/v3/positions/by-summoner/"+summoner_id+key);
  117. var resp2_info = (JSON.parse(resp2.getContentText()));
  118.  
  119. // check if user is ranked, get the proper index for solo queue
  120. if(resp2_info[2] != undefined
  121. && resp2_info[2].queueType == "RANKED_SOLO_5x5")
  122. {
  123. tier = resp2_info[2].tier;
  124. division = resp2_info[2].rank;
  125. rank = toTitleCase(tier) + " " + division;
  126. lp = resp2_info[2].leaguePoints;
  127. ranked = true;
  128. }
  129. else if(resp2_info[1] != undefined
  130. && resp2_info[1].queueType == "RANKED_SOLO_5x5")
  131. {
  132. tier = resp2_info[1].tier;
  133. division = resp2_info[1].rank;
  134. rank = toTitleCase(tier) + " " + division;
  135. lp = resp2_info[1].leaguePoints;
  136. ranked = true;
  137. }
  138. else if(resp2_info[0] != undefined
  139. && resp2_info[0].queueType == "RANKED_SOLO_5x5")
  140. {
  141. tier = resp2_info[0].tier;
  142. division = resp2_info[0].rank;
  143. rank = toTitleCase(tier) + " " + division;
  144. lp = resp2_info[0].leaguePoints;
  145. ranked = true;
  146. }
  147. else
  148. {
  149. rank = "Level " + level;
  150. ranked = false;
  151. num_unranked++;
  152. }
  153. }
  154.  
  155. // calculate hiddenScore
  156. if(ranked)
  157. {
  158. var decimal_division = deromanize(division);
  159. var division_score = (6-decimal_division) * 100;
  160. var tier_score;
  161. if(tier == "CHALLENGER")
  162. {
  163. tier_score = 7000;
  164. num_challenger++;
  165. }
  166. else if(tier == "MASTER")
  167. {
  168. tier_score = 6000;
  169. num_master++;
  170. }
  171. else if(tier == "DIAMOND")
  172. {
  173. tier_score = 5000;
  174. num_diamond++;
  175. }
  176. else if(tier == "PLATINUM")
  177. {
  178. tier_score = 4000;
  179. num_plat++;
  180. }
  181. else if(tier == "GOLD")
  182. {
  183. tier_score = 3000;
  184. num_gold++;
  185. }
  186. else if(tier == "SILVER")
  187. {
  188. tier_score = 2000;
  189. num_silver++;
  190. }
  191. else if(tier == "BRONZE")
  192. {
  193. tier_score = 1000;
  194. num_bronze++;
  195. }
  196.  
  197. hidden_score = division_score + tier_score + lp;
  198. }
  199. else
  200. {
  201. hidden_score = level *.01;
  202. }
  203.  
  204. // write output
  205. var row_num = i+2;
  206. sheet.getRange("L" + row_num.toString()).setValue(hidden_score);
  207. sheet.getRange("M" + row_num.toString()).setValue(rank);
  208. }
  209. else
  210. {
  211. var row_num = i+2;
  212. sheet.getRange("L" + row_num.toString()).setValue(0);
  213. sheet.getRange("M" + row_num.toString()).setValue("Does Not Exist");
  214. }
  215. }
  216.  
  217. // color
  218. var disp_sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Roster");
  219. var challenger_start = 2;
  220. var master_start = challenger_start + num_challenger;
  221. var diamond_start = master_start + num_master;
  222. var plat_start = diamond_start + num_diamond;
  223. var gold_start = plat_start + num_plat;
  224. var silver_start = gold_start + num_gold;
  225. var bronze_start = silver_start + num_silver;
  226. var unranked_start = bronze_start + num_bronze;
  227.  
  228. disp_sheet.getRange("B" + challenger_start.toString() + ":H" + (numRows).toString()).setBackground("#FFFFFF");//Reset colors to white
  229.  
  230. if(num_challenger>0)
  231. disp_sheet.getRange("B" + challenger_start.toString() + ":H" + (diamond_start - 1).toString()).setBackground("#e84495");
  232. if(num_master>0)
  233. disp_sheet.getRange("B" + master_start.toString() + ":H" + (diamond_start - 1).toString()).setBackground("#fc8c67")
  234. if(num_diamond>0)
  235. disp_sheet.getRange("B" + diamond_start.toString() + ":H" + (plat_start - 1).toString()).setBackground("#5daad8");
  236. if(num_plat>0)
  237. disp_sheet.getRange("B" + plat_start.toString() + ":H" + (gold_start - 1).toString()).setBackground("#008657");
  238. if(num_gold>0)
  239. disp_sheet.getRange("B" + gold_start.toString() + ":H" + (silver_start - 1).toString()).setBackground("#ffd700");
  240. if(num_silver>0)
  241. disp_sheet.getRange("B" + silver_start.toString() + ":H" + (bronze_start - 1).toString()).setBackground("#c0c0c0");
  242. if(num_bronze>0)
  243. disp_sheet.getRange("B" + bronze_start.toString() + ":H" + (unranked_start - 1).toString()).setBackground("#7f6000");
  244. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement