tomtrein

Drillster Bot

Mar 11th, 2018
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.47 KB | None | 0 0
  1. // ==UserScript==
  2. // @name DrillsterBot
  3. // @namespace http://tampermonkey.net/
  4. // @version 0.1
  5. // @description try to take over the world!
  6. // @author You
  7. // @match https://www.drillster.com/not-found
  8. // @grant none
  9. // ==/UserScript==
  10.  
  11. var THREAD_COUNT = 5;
  12. var STICK_100 = 5;
  13.  
  14. var drill = "oe5qeapvIuWnXIk8HzqtVA";
  15.  
  16.  
  17.  
  18.  
  19. var answers = new Map();
  20.  
  21. var drillArray = Array();
  22.  
  23.  
  24. var keepgoing = 5;
  25. var threads = 1;
  26.  
  27.  
  28. function getDrillList(){
  29.  
  30.  
  31. function compileDrillList(){
  32.  
  33. var a = document.getElementsByClassName("cobracheck");
  34. for (var item of a){
  35. if (item.checked) {drillArray.push(item.name);}
  36. }
  37.  
  38. let cobra = document.getElementsByClassName("cobra")[0];
  39. cobra.innerHTML = "";
  40.  
  41. nextDrill(drillArray);
  42. }
  43.  
  44. function updateDrillList(data){
  45.  
  46. document.body.innerHTML = "<div class='cobra'></div>" + document.body.innerHTML;
  47.  
  48. let cobra = document.getElementsByClassName("cobra")[0];
  49.  
  50. templist = Array();
  51.  
  52. data.drills.forEach(v => {
  53. templist.push(v);
  54. });
  55.  
  56. function sortID(a, b){
  57. var nameA=a.name.toLowerCase(), nameB=b.name.toLowerCase();
  58. if (nameA < nameB) //sort string ascending
  59. return -1;
  60. if (nameA > nameB)
  61. return 1;
  62. return 0; //default return value (no sorting)
  63. }
  64.  
  65. templist.sort(sortID);
  66.  
  67. templist.forEach(v => {
  68. var checkbox="<label for="+v.name+">"+v.name+"</label><input type='checkbox' class=cobracheck value="+v.name+" name="+v.id+"><br>";
  69. cobra.innerHTML+=checkbox;
  70. });
  71.  
  72. var button = "<button class='confirmbot'>BOT</button>";
  73. cobra.innerHTML+=button;
  74.  
  75. button = cobra.getElementsByClassName("confirmbot")[0];
  76. button.addEventListener("click",compileDrillList);
  77.  
  78. }
  79.  
  80. $.get("https://www.drillster.com/api/2/repertoire",updateDrillList);
  81. }
  82.  
  83.  
  84. var score = 0;
  85. var drillsLeft = 0;
  86. var lastwrong = "";
  87.  
  88. function updateInfo(){
  89.  
  90. document.getElementsByClassName("cobra")[0].innerHTML = "<label>Drills Left: "+drillsLeft+"</label><br><label> Current: "+drill + "</label><br><label> Score: "+score + "</label><br><label> Last Wrong: "+lastwrong+ "</label>";
  91.  
  92. }
  93.  
  94.  
  95. function nextDrill() {
  96.  
  97. drill = drillArray.pop();
  98.  
  99. drillsLeft = drillArray.length;
  100. lastwrong = "";
  101. threads = THREAD_COUNT;
  102. keepgoing = STICK_100;
  103.  
  104. updateInfo();
  105.  
  106. if (drill == null) {
  107. return;
  108. } else {
  109.  
  110. for (let i = 0; i < threads; i++){
  111. getQuestion();
  112. }
  113. }
  114. }
  115.  
  116.  
  117. function getQuestion(){
  118.  
  119. $.get("https://www.drillster.com/api/2/question/" + drill,questionInterpret);
  120. }
  121.  
  122.  
  123.  
  124.  
  125. function checkAnswer(data,quest,guess){
  126.  
  127. var evals = data.evaluation.termEvaluations;
  128. var realans = evals[evals.length-1].value;
  129. var perc = data.proficiency.overall;
  130. if (realans != guess){
  131. console.log("Wrong");
  132. console.log(quest + " = " + realans + " not " + guess);
  133. lastwrong = quest + ": " + realans;
  134. answers.set(quest,realans);
  135. }
  136. score = perc;
  137. updateInfo();
  138. if (perc == 100){
  139. keepgoing-=1;
  140. if (keepgoing <= 0){
  141. threads -= 1;
  142. if (threads == 0){
  143. nextDrill();
  144. }
  145. return;
  146. }
  147. }
  148. getQuestion();
  149.  
  150. }
  151.  
  152.  
  153. function questionInterpret(obj){
  154. var quest = obj.question.ask.term.value;
  155. var header = obj.question.reference;
  156.  
  157. if (answers.has(quest)){
  158. putAnswer(header,answers.get(quest),(data) => checkAnswer(data,quest,answers.get(quest)));
  159. } else {
  160. putAnswer(header,"no clue",(data) => checkAnswer(data,quest,"no clue"));
  161. }
  162.  
  163. }
  164.  
  165. function putAnswer(ref,ans,callback){
  166.  
  167. var ansobj = Object();
  168. ansobj.answer = ans;
  169.  
  170. $.ajax({
  171.  
  172. url: 'https://www.drillster.com/api/2/answer/'+ref,
  173.  
  174. type: 'PUT',
  175.  
  176. dataType: 'json',
  177.  
  178. data: ansobj,
  179.  
  180. success: function (data, textStatus, xhr) {
  181. callback(data);
  182. },
  183.  
  184. error: function (xhr, textStatus, errorThrown) {
  185. console.log('Error in Operation');
  186. }
  187. });
  188. }
  189.  
  190.  
  191.  
  192.  
  193. (function() {
  194. 'use strict';
  195.  
  196. getDrillList();
  197. // Your code here...
  198. })();
Advertisement
Add Comment
Please, Sign In to add comment