Bruteforce Jackbox Room Code

creates button at upper right corner to bruteforce room code.

  1. // ==UserScript==
  2. // @name Bruteforce Jackbox Room Code
  3. // @namespace -
  4. // @description creates button at upper right corner to bruteforce room code.
  5. // @author NotYou
  6. // @version 2.0.1
  7. // @include *jackbox.*/
  8. // @include *jackbox.*/#/
  9. // @include *jackbox.tv/
  10. // @include *jackbox.fun/
  11. // @include *jackbox.tv/#/
  12. // @include *jackbox.fun/#/
  13. // @exclude *jackbox.whatif.one/*
  14. // @run-at document-end
  15. // @license GPL-3.0-or-later
  16. // @icon data:image/jpg;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAEvUlEQVRYhcWXW2xTdRzHP+e0Pe0uwrqVratluNJtsA0W2GBcvSBTXGZi8IFI1BiNiS+C8UFJ1JgQEqMPvPGi8ITxkgyNBOck6BSGIOMmZreOCqPbunUb3dr1ftbjw9il62UlCvsmJ+fk/G7f/+X3+/3/Avt6FRYR4uznQjwejHwOAWGe4nyDByMXiYMw7/1g5QkIPFyop6YiGVtIKpcDMGqbkuktIGXfn/0sgVTBiTeWg2R1HufVwtvUVa0AoO3mCY525TJc/haotant46T3k4YBN7X2Tzj62uOY8w0xooGRUXZ/cZHuyo9AJaXtMv09oERZc/MwjW/XxwUHMBlyaXyjlvz2I6CkP6b068BAGwefKSI7Q5dAd2qdzfkGDtUqMNKZaAQLEUidx6oxO5WWFcxuKmXOM2vbsKWaTGdrgoCJ/avjOSXI48BdRMc5/MF6frPf4mZfH1azmdqK1WRopRjbDK2WLCGAP806kIDAHIR94GxDZ2vk4M4C7P1O3N4JioyFnGy9QDAcYdemGhRF4c/2Lnr6+ghFZAI+DcihBBkRj+R1wD+C5sQL7CjJQc6YZNyXSUVxEWMTPt5vaSesNrD27hgAYxM+Pvv6BBlLc9m7rYbV498RbDnPUOYqRow7iVrqQUg8I4nrQMhD4fVDHNj3ImbjMv5qt6GahI7bDqqsxTy3thSNJNHe0kw4IvPzpavoq59kfcUqOq+3smVjFSXWYkoeW06nvZtPf72Ms3w/6HLiQsXUAbHnJJt1HRTiZE9dNXk5S2cUFUXh7riXoDdAlqimxFhAv2uEmlVWjv10hvJSC145jMGgR61WxQTx+QMc/fEyP/o3IZfuBkFMTICeU9RHGtn/yvM4nC4sRabECwcMuEY5f+EawXCYl3Y/i1qlitOJyDJ3+ocwGQ1kaLXYbjl4rzmMZ927MzqxdaCkgSb9Pg4c+R5ZlpmcnEwYPBqNcvXvLgaGh5A0Cs0tfxCNRmNmy+kaoW9wGEuRCUmt4eK1do41XcUrGZMvwQwRrxPztY9586nlbF5fGTM674Sfb06exmLKY8zrQytp0C/JYtgTpOHp7URkmd7+QUwFBkRR5PS5Nn644cWR3wDWXaDSMFtHhBS9YDLCI7+/w4ZsBxVlVuq2b2TQNcqpM2epXbMSSaOhd8CFTpIoMOQQjsjYegdZUbQcS5GJX1rbcI+5afJUEd36YaosSAKVBkVvpa5Gj2t0nMOff0nukmy2ritDvOdMEIQZv5JGTcXKR7nc3kNHVzdVZcXorCaaL+iJJgl+j0Dyfj0RzcAfCGHKz8WUn5tQR5jjXBAENlRa5ymk7ndiqn4tZuZy4x8XvkCQYNiN2+NBUZSZaj4dfLojTEMBJvxBmq44kJetTUlg4fOAz0VW93Fet9p4eVc5567cQVGmTj9jXh+22wNsqLTOkPEHQpztGKRVeIJQ2R7QZP5HAtMIjKK3f8WOzEusNhsRBOgfGkUnSYQiMipRxD4S4jzbCJbtBSkrLbdzCKR5Ngy40dq+pVppI081jiFnCcFQmJZhI4PrPgCdPrV9cgLzFZMRuvc/GoHhTvDcgZyVkFcKoip9+wXrwEPCot8LxMW6E84hcJ/3gv9ZvuhL8C9NI+mNpU5sFQAAAABJRU5ErkJggg==
  17. // @grant none
  18. // ==/UserScript==
  19.  
  20. window.bruteforceInterval = 3000
  21.  
  22. let
  23.  
  24. icon = {
  25. play: `<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-caret-right-fill" viewBox="0 0 16 16">
  26. <path d="m12.14 8.753-5.482 4.796c-.646.566-1.658.106-1.658-.753V3.204a1 1 0 0 1 1.659-.753l5.48 4.796a1 1 0 0 1 0 1.506z"/>
  27. </svg>`,
  28. pause: `<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-pause-fill" viewBox="0 0 16 16">
  29. <path d="M5.5 3.5A1.5 1.5 0 0 1 7 5v6a1.5 1.5 0 0 1-3 0V5a1.5 1.5 0 0 1 1.5-1.5zm5 0A1.5 1.5 0 0 1 12 5v6a1.5 1.5 0 0 1-3 0V5a1.5 1.5 0 0 1 1.5-1.5z"/>
  30. </svg>`,
  31. fast: `<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-lightning-charge-fill" viewBox="0 0 16 16">
  32. <path d="M11.251.068a.5.5 0 0 1 .227.58L9.677 6.5H13a.5.5 0 0 1 .364.843l-8 8.5a.5.5 0 0 1-.842-.49L6.323 9.5H3a.5.5 0 0 1-.364-.843l8-8.5a.5.5 0 0 1 .615-.09z"/>
  33. </svg>`
  34. },
  35.  
  36. btn = document.createElement('button'),
  37. set = document.createElement('button'),
  38. style = document.createElement('style')
  39. style.textContent = `
  40. #bruteforce-roomcode {
  41. position: fixed;
  42. top: 20px;
  43. right: 20px;
  44. border-radius: 50%;
  45. background: rgb(0, 0, 0) none repeat scroll 0% 0%;
  46. color: rgb(255, 255, 255);
  47. width: 60px;
  48. height: 60px;
  49. border: 0px none;
  50. cursor: pointer;
  51. z-index: 1;
  52. }
  53.  
  54. #bruteforce-roomcode-fast {
  55. position: absolute;
  56. background-color: rgb(111, 111, 111);
  57. border-radius: 50%;
  58. right: 5px;
  59. top: 38px;
  60. height: 22px;
  61. padding: 3px;
  62. border: 0;
  63. cursor: pointer;
  64. z-index: 2;
  65. }`
  66. document.head.appendChild(style)
  67. btn.innerHTML = icon.play
  68. btn.id = 'bruteforce-roomcode'
  69. btn.onclick = start
  70.  
  71. set.innerHTML = icon.fast
  72. set.id = 'bruteforce-roomcode-fast'
  73. set.style.color = 'rgb(255, 255, 255)'
  74. set.onclick = fast
  75.  
  76. document.body.appendChild(btn)
  77. document.body.appendChild(set)
  78.  
  79. function random() {
  80. let result = '', value = [
  81. 'A', 'B', 'C',
  82. 'D', 'E', 'F',
  83. 'G', 'H', 'I',
  84. 'J', 'K', 'L',
  85. 'M', 'N', 'O',
  86. 'P', 'Q', 'R',
  87. 'S', 'T', 'U',
  88. 'V', 'W', 'X',
  89. 'Y', 'Z'
  90. ]
  91. for (let i = 0; i < 4; i++) result += value[~~(Math.random() * value.length)]
  92. return result
  93. }
  94.  
  95. function start() {
  96. btn.innerHTML = icon.pause
  97. btn.onclick = stop
  98. let code = document.querySelector('#roomcode')
  99. let event = new InputEvent('input', {type: 'input'})
  100. code.value = random()
  101. code.dispatchEvent(event)
  102. window.bruteforce = setInterval(() => {
  103. let status = document.querySelector('[name="roomcode"] > .status')
  104. if (!status||status.innerText === 'Room not found'||status.innerText === ''||status.innerText === 'Комната не найдена!') {
  105. code.value = random()
  106. code.dispatchEvent(event)
  107. }
  108. else stop()
  109. }, window.bruteforceInterval)
  110. }
  111.  
  112. function stop() {
  113. btn.innerHTML = icon.play
  114. btn.onclick = start
  115. clearInterval(window.bruteforce)
  116. }
  117.  
  118. function fast() {
  119. let el = document.querySelector('#bruteforce-roomcode-fast')
  120. el.style.color = el.style.color === 'rgb(255, 255, 255)'
  121. ? 'rgb(255, 227, 0)'
  122. : 'rgb(255, 255, 255)'
  123. window.bruteforceInterval = window.bruteforceInterval === 3000
  124. ? 1500
  125. : 3000
  126. for(let i = 0; i < 2; i++) document.querySelector('#bruteforce-roomcode').click()
  127. }