cFlour

Lichess Always Berserk

Mar 14th, 2023
33
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.74 KB | None | 0 0
  1. // ==UserScript==
  2. // @name Berserk
  3. // @version 1.2
  4. // @grant none
  5. // @run-at document-idle
  6. // @include /^https://lichess\.org/([a-zA-Z0-9]){6,}
  7. // ==/UserScript==
  8.  
  9. setTimeout(function()
  10. {
  11. var berserkAlwaysDiv;
  12. var berserkBackDiv;
  13. var berserkCutoffDiv; // auto-berserk everyone below cutoff
  14.  
  15. var berserkAlwaysCheckbox;
  16. var berserkBackCheckbox;
  17. var berserkCutoffCheckbox;
  18.  
  19. var zerked = false; // makes a few things more readable
  20. var cName; // stores the class of the tournament-defining component (tournament-lobby or tournament-game), in order to add the elements to the correct div
  21.  
  22. var opponentRating;
  23.  
  24.  
  25. // storage functions. remember berserking preferences between games
  26. function getStorage(v)
  27. {
  28. return lichess.storage.get(v) === 'true';
  29. }
  30.  
  31. function setStorage(v, val)
  32. {
  33. lichess.storage.set(v, val);
  34. }
  35.  
  36.  
  37. function clickZerkLoop()
  38. {
  39. if (document.getElementsByClassName("fbt go-berserk")[0] != undefined && !zerked)
  40. {
  41. document.getElementsByClassName("fbt go-berserk")[0].click();
  42. zerked = true;
  43. }
  44. if (!zerked)
  45. {
  46. setTimeout(clickZerkLoop, 50);
  47. }
  48. }
  49.  
  50. function backZerkLoop()
  51. {
  52. if (document.getElementsByClassName("rclock rclock-top")[0].getElementsByClassName("berserked top")[0] != undefined)
  53. {
  54. clickZerkLoop();
  55. }
  56. if (!zerked && berserkBackCheckbox.checked)
  57. {
  58. setTimeout(backZerkLoop, 150);
  59. }
  60. }
  61.  
  62.  
  63. // looks at which boxes are checked and performs actions
  64. function checkBoxes()
  65. {
  66. if (!zerked && document.getElementsByClassName("game__tournament").length > 0) // only try to click the buttons if you are actually playing (not in lobby or observing a tournament game)
  67. {
  68. if (berserkAlwaysCheckbox.checked)
  69. {
  70. berserkCutoffCheckbox.disabled = false;
  71. if ((berserkCutoffCheckbox.checked && opponentRating < 2000) || !berserkCutoffCheckbox.checked)
  72. {
  73. clickZerkLoop();
  74. }
  75. }
  76. else
  77. {
  78. berserkCutoffCheckbox.disabled = true;
  79. }
  80.  
  81. if (berserkBackCheckbox.checked)
  82. {
  83. backZerkLoop();
  84. }
  85. }
  86. }
  87.  
  88.  
  89. // checks if page is a tournament lobby or tournament game
  90. if (document.getElementsByClassName("tour__meta").length > 0 || document.getElementsByClassName("game__tournament-link").length > 0 || document.getElementsByClassName("game__tournament").length > 0)
  91. {
  92. cName = (document.getElementsByClassName("tour__meta").length > 0) ? "tour__meta" : "game__meta";
  93.  
  94. // cosmetics and buttons. div that will contain the new elements
  95. var theDiv = document.getElementsByClassName(cName)[0];
  96.  
  97. // defines the text-accompanying elements
  98. berserkAlwaysCheckbox = document.createElement("input");
  99. berserkAlwaysCheckbox.id = "berserkAlwaysCheckbox";
  100. berserkAlwaysCheckbox.type = "checkbox";
  101.  
  102. berserkBackCheckbox = document.createElement("input");
  103. berserkBackCheckbox.id = "berserkBackCheckbox";
  104. berserkBackCheckbox.type = "checkbox";
  105.  
  106. berserkCutoffCheckbox = document.createElement("input");
  107. berserkCutoffCheckbox.id = "berserkCutoffCheckbox";
  108. berserkCutoffCheckbox.type = "checkbox";
  109.  
  110.  
  111. // defines the divs that will contain the checkboxes and adds them
  112. berserkAlwaysDiv = document.createElement("div");
  113. berserkAlwaysDiv.id = "berserk-always";
  114. berserkAlwaysDiv.appendChild(berserkAlwaysCheckbox);
  115. berserkAlwaysDiv.appendChild(document.createTextNode(" Berserk always"));
  116.  
  117. berserkBackDiv = document.createElement("div");
  118. berserkBackDiv.id = "berserk-back";
  119. berserkBackDiv.appendChild(berserkBackCheckbox);
  120. berserkBackDiv.appendChild(document.createTextNode(" Berserk back"));
  121.  
  122. berserkCutoffDiv = document.createElement("div");
  123. berserkCutoffDiv.id = "berserk-cutoff";
  124. berserkCutoffDiv.appendChild(berserkCutoffCheckbox);
  125. berserkCutoffDiv.appendChild(document.createTextNode(" Berserk-always cutoff (U2000)"));
  126.  
  127. // after everything is setup, add things to the div
  128. theDiv.appendChild(berserkAlwaysDiv);
  129. theDiv.appendChild(berserkBackDiv);
  130. theDiv.appendChild(berserkCutoffDiv);
  131.  
  132. // adds listeners to checkboxes
  133. berserkAlwaysCheckbox.addEventListener("click", function()
  134. {
  135. setStorage("berserkAlwaysCheckbox", this.checked);
  136. checkBoxes();
  137. });
  138.  
  139. berserkBackCheckbox.addEventListener("click", function()
  140. {
  141. setStorage("berserkBackCheckbox", this.checked);
  142. checkBoxes();
  143. });
  144.  
  145. berserkCutoffCheckbox.addEventListener("click", function()
  146. {
  147. setStorage("berserkCutoffCheckbox", this.checked);
  148. checkBoxes();
  149. });
  150.  
  151. berserkAlwaysCheckbox.checked = getStorage("berserkAlwaysCheckbox");
  152. berserkBackCheckbox.checked = getStorage("berserkBackCheckbox");
  153. berserkCutoffCheckbox.checked = getStorage("berserkCutoffCheckbox");
  154.  
  155. opponentRating = parseInt(document.getElementsByTagName("rating")[0].innerText);
  156.  
  157. checkBoxes();
  158. console.log("loaded berserk script");
  159.  
  160. // var rclockGetTest = document.querySelector('.rclock.running')[0];
  161. // var rclockGetTest2 = document.querySelector('.rclock.running');
  162. // console.log(rclockGetTest);
  163. // console.log(rclockGetTest2);
  164.  
  165. }
  166. }, 250);
Tags: tampermonkey
Add Comment
Please, Sign In to add comment