ST BOT v1

Bot Panel for gartic.io

  1. // ==UserScript==
  2. // @name ST BOT v1
  3. // @description Bot Panel for gartic.io
  4. // @version 1.1
  5. // @author STRAGON
  6. // @license MIT
  7. // @match *://gartic.io/*
  8. // @match *://*/*?__cpo=aHR0cHM6Ly9nYXJ0aWMuaW8
  9. // @icon https://static.cdnlogo.com/logos/s/96/st.svg
  10. // @grant GM_setValue
  11. // @grant GM_getValue
  12. // @grant GM_addValueChangeListener
  13. // @grant GM_addStyle
  14. // @grant GM_openInTab
  15. // @namespace https://greasyfork.org/users/1220697
  16. // ==/UserScript==
  17.  
  18.  
  19.  
  20. let rand = x => Math.floor(Math.random() * 1000000),
  21. GM_onMessage = (label, cb) => GM_addValueChangeListener(label, (_, __, data) => cb(...data)),
  22. GM_sendMessage = (label, ...data) => GM_setValue(label, data);
  23.  
  24. let randomNumber = Math.floor(Math.random() * 36) + 1;
  25.  
  26. GM_onMessage('answerinput', (atılacak, _) => {
  27.  
  28. document.querySelector('#answer').value= atılacak
  29. })
  30. GM_onMessage('changedraw', (atılacak, _) => {
  31.  
  32. document.querySelector('#answer').value= atılacak
  33. })
  34. function f(ygn){return document.querySelector(ygn)}
  35. function fa(ygn){return document.querySelectorAll(ygn)}
  36. function num(ICE){return Math.ceil(Math.random()*ICE+1)}
  37. function rc(ygn){let e=f('input[name="chat"]');let lv=e.value;e.value="";let ev=new Event('input',{bubbles:true});ev.simulated=true;let t=e._valueTracker;if(t){t.setValue(lv);};e.dispatchEvent(ev);}
  38. function rs(ygn){let e=f(".search input");let lv=e.value;e.value="";let ev=new Event('input',{bubbles:true});ev.simulated=true;let t=e._valueTracker;if(t){t.setValue(lv);};e.dispatchEvent(ev);}
  39. function rnext(kelime) {
  40. const hd = kelime.split('');
  41. const hu = hd.length;
  42. const yh = [];
  43. const invisibleChars = ['\u200B', '\u200C', '\u200D', '\u2061', '\u2062', '\u2063', '\u2064', '\u2066', '\u17b4', '\u17b5', '\u2068', '\u2069'];
  44. let charCount = 0;
  45.  
  46. for (let i = 0; i < hu; i++) {
  47. yh.push(hd[i]);
  48. charCount++;
  49.  
  50. if (charCount < 18 && i < hu - 1) {
  51. const invisibleChar = invisibleChars[Math.floor(Math.random() * invisibleChars.length)];
  52. yh.push(invisibleChar);
  53. charCount++;
  54. }
  55.  
  56. if (charCount >= 18) {
  57. break;
  58. }
  59. }
  60.  
  61. return yh.join('');
  62. }
  63. let cmd="",wss=[],tojoin=0,usersinroom=[],customkickitems=[],intervalbroadcast,intervalmsg,intervalanswer,botsidvalue=[],botID,botlongID,theme,avatar=localStorage.getItem("avatar"),botnick=localStorage.getItem("botnick"),nick=localStorage.getItem("nick")
  64.  
  65.  
  66. if(window.location.href.indexOf("aHR0cHM6Ly9nYXJ0aWMuaW8")!=-1){
  67. let room,kicknewstat=false,kickjoinstat=false,waitforkick=0
  68.  
  69. const addItem = (arr, ...arguments) => { for (let i = 0; i < arguments.length; i++) { arr[arr.length] = arguments[i]; } return arr; };
  70.  
  71. function arrayFilter(array) {
  72. return array.filter((value, index, arr) => arr.indexOf(value) === index);
  73. }
  74.  
  75. GM_setValue("botekle",rand())
  76.  
  77. GM_addValueChangeListener("resetcount", function(I,C,E,b) {
  78. GM_setValue("botekle",rand())
  79. })
  80. setTimeout(()=>{waitforkick=0},1000)
  81.  
  82. GM_onMessage("join", (room,nick,avatar,botnick,kickonjoin,_) => {
  83. fetch("https://"+window.location.href.split("/")[2]+"/server?check=1&v3=1&room="+room+"&__cpo=aHR0cHM6Ly9nYXJ0aWMuaW8#").then(x=>x.text()).then(x=>{
  84. let ws=new WebSocket("wss://"+window.location.href.split("/")[2]+"/__cpw.php?u="+btoa("wss://"+x.split("https://")[1].split(".")[0]+".gartic.io/socket.io/?c="+x.split("?c=")[1]+"&EIO=3&transport=websocket")+"&o=aHR0cHM6Ly9nYXJ0aWMuaW8=");
  85. ws.onopen=()=>{
  86. let inter=setInterval(()=>{
  87. GM_setValue("ready",rand())
  88. if(tojoin==1){
  89. tojoin=0
  90. if (botnick === '0') {
  91. ws.send('42[3,{"v":20000,"nick":"' + rnext(nick) + '","avatar": 17 ,"platform":69 ,"sala":"' + room.substring(2) + '"}]')
  92. } else if (botnick === '1') {
  93. ws.send('42[3,{"v":20000,"nick":"'+rnext(nick)+'","avatar":'+randomNumber+',"platform":69,"sala":"'+room.substring(2)+'"}]')
  94. }
  95. clearInterval(inter)
  96. }
  97. },50)
  98. }
  99. ws.onclose=()=>{
  100. wss.length=0
  101. ws.close();
  102. }
  103. ws.onmessage=(msg)=>{
  104.  
  105. if(msg.data.indexOf('42["23"')!=-1){
  106. let user=JSON.parse("{"+msg.data.split("{")[1].split("}")[0]+"}")
  107. usersinroom.push(user)
  108. if(kicknewstat){typeof(user.id)=="string"?ws.send('42[45,'+ws.id+',["'+user.id+'",true]]'):ws.send('42[45,'+ws.id+',['+user.id+',true]]');}
  109. }
  110. if(msg.data.indexOf('42["5"')!=-1){
  111. let objlist=JSON.parse('["5"'+msg.data.split('42["5"')[1])
  112. ws.theme=objlist[4].tema
  113. ws.room=objlist[4].codigo
  114. ws.id=objlist[2]
  115. objlist[5].forEach(item=>{usersinroom.push(item)})
  116. let targetid=objlist[5][0].id
  117. botID = objlist[2]
  118. botlongID = objlist[1]
  119. theme = objlist[4].tema
  120. setTimeout(()=>{
  121. f(".roomtheme").innerHTML= theme},10)
  122. setTimeout(()=>{
  123. GM_sendMessage("botsidvalue",botlongID,rand())},777)
  124. setTimeout(()=>{
  125. GM_sendMessage("updatelist",botID,rand())},777)
  126.  
  127. kickjoinstat?typeof(targetid)=="string"?ws.send('42[45,'+ws.id+',["'+targetid+'",true]]'):ws.send('42[45,'+ws.id+',['+targetid+',true]]'):0
  128. ws.send('42[46,'+objlist[2]+']')
  129.  
  130.  
  131.  
  132. GM_onMessage('answerinput', (atılacak, _) => {
  133. f('#answer').value= atılacak
  134. })
  135.  
  136. GM_onMessage("botsidvalue", (datachangex, _) => {
  137.  
  138. botsidvalue.push(datachangex)
  139. });
  140. GM_onMessage("updatelist", (datachangex, _) => {
  141. GM_sendMessage("updatebotidlist",botsidvalue,rand())
  142. });
  143. GM_onMessage("updatebotidlist", (datachangex, _) => {
  144.  
  145. if (!botsidvalue.includes(datachangex)) {
  146. addItem(botsidvalue,...datachangex);
  147. }
  148. botsidvalue = arrayFilter(botsidvalue);
  149. });
  150.  
  151. GM_addValueChangeListener("broadcast", function(I,C,E,b) {
  152. ws.send('42[11,'+objlist[2]+',"'+E.split("►")[0]+'"]')
  153. ws.send('42[13,'+objlist[2]+',"'+E.split("►")[0]+'"]')
  154. });
  155. GM_addValueChangeListener("msg", function(I,C,E,b) {
  156. ws.send('42[11,'+objlist[2]+',"'+E.split("►")[0]+'"]')
  157. })
  158. GM_addValueChangeListener("answer", function(I,C,E,b) {
  159. ws.send('42[13,'+objlist[2]+',"'+E.split("►")[0]+'"]')
  160. })
  161. GM_addValueChangeListener("report", function(I,C,E,b) {
  162. ws.send('42[35,'+objlist[2]+']')
  163. });
  164. GM_addValueChangeListener("jump", function(I,C,E,b) {
  165. ws.send('42[25,'+objlist[2]+']')
  166. });
  167. GM_addValueChangeListener("acceptdraw1", function(I,C,E,b) {
  168. ws.send('42[34,'+objlist[2]+']')
  169. });
  170. GM_addValueChangeListener("acceptdraw2", function(I,C,E,b) {
  171. ws.send('42[34,'+objlist[2]+',1]')
  172. });
  173.  
  174. GM_addValueChangeListener("tips", function(I,C,E,b) {
  175. ws.send('42[30,'+objlist[2]+',1]')
  176. });
  177.  
  178. GM_addValueChangeListener("exit", function(I,C,E,b) {
  179. ws.send('42[24,'+objlist[2]+']')
  180. wss.lenghth=0
  181. usersinroom.length=0
  182. });
  183.  
  184. GM_addValueChangeListener("kick", function(I,C,E,b) {
  185. if(!botsidvalue.includes(E.split("..")[0])){
  186. ws.send('42[45,'+objlist[2]+',["'+E.split("..")[0]+'",true]]')}
  187. })
  188.  
  189.  
  190. JSON.stringify(wss).indexOf(objlist[2])==-1?wss.push({"ws":ws,"id":objlist[2],"lengthID":objlist[1]}):0
  191. let interval=setInterval(()=>{
  192. ws.readyState==1?ws.send('42[42,'+objlist[2]+']'):clearInterval(interval)
  193. ws.readyState==1?ws.send('2'):clearInterval(interval)
  194. },20000);
  195. }
  196. if(msg.data.indexOf('42["34"')!=-1){
  197. let objlist=JSON.parse('["34"'+msg.data.split('42["34"')[1])
  198. var cdd=objlist[1]
  199.  
  200. GM_sendMessage('answerinput', cdd, rand());
  201.  
  202. }
  203.  
  204. }
  205. })
  206. });
  207.  
  208.  
  209.  
  210. GM_addValueChangeListener("join", function(I,C,E,b) {
  211. tojoin=1
  212. });
  213. GM_addValueChangeListener("kicknewset", function(I,C,E,b) {
  214. kicknewstat=E
  215. });
  216. GM_addValueChangeListener("kickjoinset", function(I,C,E,b) {
  217. kickjoinstat=E
  218. });
  219.  
  220.  
  221.  
  222. window.addEventListener("beforeunload",()=>{
  223. GM_setValue("botçıkar",window.location.href.split("/")[2]+"--"+rand())
  224. })
  225. }
  226.  
  227. if(window.location.href.indexOf("gartic.io")!=-1){
  228. const addItem = (arr, ...arguments) => { for (let i = 0; i < arguments.length; i++) { arr[arr.length] = arguments[i]; } return arr; };
  229.  
  230. function arrayFilter(array) {
  231. return array.filter((value, index, arr) => arr.indexOf(value) === index);
  232. }
  233. let customkick = localStorage.getItem("customkick");
  234. if (!customkick) {
  235. localStorage.setItem("customkick", "[]");
  236. }
  237.  
  238. if (customkick) {
  239. let list=JSON.parse(localStorage.getItem("customkick"))
  240.  
  241. list.forEach(user=>{
  242. setTimeout(()=>{
  243. f("#STBOT3").innerHTML+=`<h2 class="customkick" id="customkick.`+user.user+`">`+user.user+`</h2>
  244. <input type="submit" class="customkickremove" id="customkickuser.`+user.user+`" onclick="window.postMessage('customkickremove.`+user.user+`','*')" value="remove">`
  245. addItem(customkickitems, user.user)
  246. },3000)
  247. })
  248. }
  249. let avataritem = localStorage.getItem("avatar");
  250. if (!avataritem) {
  251. localStorage.setItem("avatar", "17");
  252. }
  253. let botnickitem = localStorage.getItem("botnick");
  254. if (!botnickitem) {
  255. localStorage.setItem("botnick", "0");
  256. }
  257. let nickitem = localStorage.getItem("nick");
  258. if (!nickitem) {
  259. localStorage.setItem("nick", "ST BOT");
  260. }
  261. if (avataritem) {
  262. setTimeout(()=>{
  263. f("#avatar").src = 'https://gartic.io/static/images/avatar/svg/' + localStorage.getItem("avatar") + '.svg';
  264.  
  265. },100)
  266. }
  267. window.addEventListener("message",(msg)=>{
  268. if(msg.data=="broadcastspam"){
  269. let broadcastspamMS=f(".broadcastspam").value
  270. f("#broadcastms").innerText='BROADCAST SPAM VALUE: ' + broadcastspamMS
  271. localStorage.setItem("broadcastspam",broadcastspamMS)
  272. }
  273. if(msg.data=="messagespam"){
  274. let messagespamMS=f(".messagespam").value
  275. f("#messagems").innerText='MESSAGE SPAM VALUE: ' + messagespamMS
  276. localStorage.setItem("messagespam",messagespamMS)
  277. }
  278. if(msg.data=="answerspam"){
  279. let answerspamMS=f(".answerspam").value
  280. f("#answerms").innerText='ANSWER SPAM VALUE: ' + answerspamMS
  281. localStorage.setItem("answerspam",answerspamMS)
  282. }
  283. if(msg.data=="nick"){
  284. localStorage.setItem("nick",f("#botnick").value)
  285. }
  286. if(msg.data=="botnick0"){
  287. botnick=0
  288. localStorage.setItem("botnick",0)
  289. }
  290. if(msg.data=="botnick1"){
  291. botnick=1
  292. localStorage.setItem("botnick",1)
  293. }
  294. if(msg.data=="showavatarlist"){
  295. f("#STBOT1").style.display="none"
  296. f("#avatarlist").style.display="block"
  297. }
  298. if(msg.data=="hideavatarlist"){
  299. f("#STBOT1").style.display="block"
  300. f("#avatarlist").style.display="none"
  301. }
  302.  
  303. if(msg.data=="customkickadd"){
  304. const value = f("#kicklistinput").value;
  305. var customkicklist = localStorage.getItem("customkick");
  306. if (!customkicklist.includes(value) && !customkickitems.includes(value)) {
  307. customkickitems.push(value);
  308. let customkickitem = JSON.parse(localStorage.getItem("customkick"));
  309. if (customkickitem.findIndex(item => item.user === value) === -1) {
  310. customkickitem.push({ "user": value });
  311. localStorage.setItem("customkick", JSON.stringify(customkickitem));
  312. f("#STBOT3").innerHTML += `<h2 class="customkick" id="customkick.` + value + `">` + value + `</h2>
  313. <input type="submit" class="customkickremove" id="customkickuser.` + value + `" onclick="window.postMessage('customkickremove.` + value + `','*')" value="remove">`
  314. }
  315. }
  316. }
  317. if(msg.data.indexOf("customkickremove.")!=-1){
  318. let usernick = event.data.split("customkickremove.")[1];
  319. let storage = JSON.parse(localStorage.getItem("customkick"));
  320.  
  321. if (storage && Array.isArray(storage)) {
  322. for (let i = 0; i < storage.length; i++) {
  323. if (storage[i].user === usernick) {
  324. storage.splice(i, 1);
  325. break;
  326. }
  327. }
  328.  
  329. localStorage.setItem("customkick", JSON.stringify(storage));
  330. var value = usernick;
  331. var index = customkickitems.indexOf(value);
  332. if (index > -1) {
  333. customkickitems.splice(index, 1);
  334. }
  335. }
  336. let kickusertext= document.getElementById("customkick."+usernick)
  337. let kickuserremovebtn= document.getElementById("customkickuser."+usernick)
  338. kickusertext.remove()
  339. kickuserremovebtn.remove()
  340.  
  341. }
  342. if(msg.data=="customkickremoveall"){
  343. var elementsCustomKick = document.querySelectorAll('[id*="customkick."]');
  344. var elementsCustomKickUser = document.querySelectorAll('[id*="customkickuser."]');
  345. function deleteElement(element) {
  346. element.parentNode.removeChild(element);
  347. }
  348. elementsCustomKick.forEach(function(element) {
  349. deleteElement(element);
  350. });
  351. elementsCustomKickUser.forEach(function(element) {
  352. deleteElement(element);
  353.  
  354. })
  355. localStorage.setItem("customkick","[]")
  356. customkickitems=[]
  357. }
  358. })
  359. let readyc=0,botc=0,otoeven=0,roomusers=[]
  360.  
  361. let WebSocket=window.WebSocket
  362. window.ginterval=0
  363. window.selectlevel=-1
  364. let originalSend = WebSocket.prototype.send,setTrue=false;
  365. window.wsObj={}
  366. console.log("running")
  367. WebSocket.prototype.send=function(data){
  368. originalSend.apply(this, arguments)
  369. if(Object.keys(window.wsObj).length==0){window.wsObj=this;window.eventAdd()}
  370. };
  371.  
  372. function updatespeckicks(){
  373. f(".userkickmenu").innerHTML=""
  374. roomusers.forEach(user=>{
  375. user.nick.split("‏").join("")!="STBOT"?f(".userkickmenu").innerHTML+=`<input type="submit" class="kickmenubtn" value="`+user.nick+`" onclick="window.postMessage('kickuser.`+user.id+`','*')">`:0
  376. })
  377. }
  378.  
  379. window.eventAdd=()=>{
  380. if(!setTrue){
  381. setTrue=1
  382. window.wsObj.addEventListener("message",(msg)=>{
  383.  
  384. if(msg.data.indexOf('42["5"')!=-1){
  385. let objlist=JSON.parse('["5"'+msg.data.split('42["5"')[1])
  386. objlist[5].forEach(item=>{roomusers.push(item)})
  387. updatespeckicks()
  388. }
  389. if(msg.data.indexOf('42["23"')!=-1){
  390. let user=JSON.parse("{"+msg.data.split("{")[1].split("}")[0]+"}")
  391. roomusers.push(user)
  392. updatespeckicks()
  393. }
  394. if(msg.data.indexOf('42["24"')!=-1){
  395. let user=msg.data.split(",")[1].split('"')[1]
  396. for(let i=0;i<roomusers.length;i++){
  397. typeof(roomusers[i].id)==='undefined'?0:roomusers[i].id==user?roomusers.splice(i,1):0
  398. }
  399. updatespeckicks()
  400. }
  401. })
  402. }
  403. }
  404.  
  405.  
  406.  
  407. let html=`
  408. <div class="userlist">
  409. <div class="userkickmenu"></div>
  410. <input type="submit" style="width:90px; background:red" onclick="window.postMessage('kickall','*')" value="KICK ALL">
  411. <input type="checkbox" class="kickonjoin">&nbsp;Kick on join<br>
  412. <input type="checkbox" class="kickallwhenjoin">&nbsp;Kick when join<hr>
  413. </div>
  414. </div>
  415.  
  416. <div id="STBOT1" class="STBOT">
  417. <h2 style="color:white;margin-top: 10px;">ST BOT V1</h2>
  418. <input type="text" id="roomlink" placeholder="Room link" style="border-radius: 5px; border: 2px solid white; width: 75%; height: 30px;padding: 10px;background-color: #000000; color:white; margin-top: 10px;">
  419. <input type="submit" id="join" onclick="window.postMessage('join','*')" value="JOIN" style="border-radius: 5px; width: 20%; cursor: pointer; height: 30px;color: #ffffff;">
  420. <input type="text" id="botnick" oninput="window.postMessage('nick','*')" placeholder="Bot nick" value="`+localStorage.getItem("nick")+`" style="border-radius: 5px; width: 95%; height: 30px; margin-top: 5px; border: 2px solid white;padding: 10px;background-color: #000000; color:white; margin-top: 10px;">
  421. <input type="submit" class="botnick0" onclick="window.postMessage('botnick0','*')" value="Normal Avatar"style="width: 47%; border-radius: 5px;height: 30px;color: #ffffff;margin-top: 7px;">
  422. <input type="submit" class="botnick1" onclick="window.postMessage('botnick1','*')" value="Random Avatar"style="width: 47%; border-radius: 5px;height: 30px;color: #ffffff;margin-top: 7px;"><br>
  423. <div class="broadcastbox">
  424. <input type="text" id="broadcast" placeholder="Broadcast" style="border-radius: 5px; width: 70%; height: 30px; border: 2px solid white;padding: 10px;background-color: #000000; color:white; ">
  425. <button class="broadcastbtn" onclick="window.postMessage('broadcast','*')" value="Broadcast"style="border-radius: 5px;height: 30px;color: #ffffff;margin-top: 10px;margin-left: 4px;">Send
  426. <path d="m22.34 10.642-.007-.003-20.02-8.303a1.104 1.104 0 0 0-1.04.1 1.156 1.156 0 0 0-.523.966v5.31a1.125 1.125 0 0 0 .915 1.105l10.919 2.02a.187.187 0 0 1 0 .368L1.665 14.224a1.125 1.125 0 0 0-.915 1.104v5.31a1.105 1.105 0 0 0 .496.924 1.123 1.123 0 0 0 1.066.097l20.02-8.256.008-.004a1.5 1.5 0 0 0 0-2.757Z"></path>
  427. </svg></button></div>
  428. <div class="msgbox"><input type="text" id="message" placeholder="Message" style="border-radius: 5px; border: 2px solid white; padding: 10px; background-color: #000000; color:white; "><button class="msgbtn" onclick="window.postMessage('chat','*')" value="Message" style="border-radius: 5px;height: 30px;color: #ffffff;margin-top: 10px;margin-left: 4px;">Send
  429. <path d="m22.34 10.642-.007-.003-20.02-8.303a1.104 1.104 0 0 0-1.04.1 1.156 1.156 0 0 0-.523.966v5.31a1.125 1.125 0 0 0 .915 1.105l10.919 2.02a.187.187 0 0 1 0 .368L1.665 14.224a1.125 1.125 0 0 0-.915 1.104v5.31a1.105 1.105 0 0 0 .496.924 1.123 1.123 0 0 0 1.066.097l20.02-8.256.008-.004a1.5 1.5 0 0 0 0-2.757Z"></path>
  430. </svg></button></div>
  431. <div class="answerbox"><input type="text" id="answer" placeholder="Answer" style="border-radius: 5px; width: 70%; height: 30px; border: 2px solid white; padding: 10px; background-color: #000000; color:white; "><button class="answerbtn" onclick="window.postMessage('answer','*')" value="Answer" style="border-radius: 5px;height: 30px;color: #ffffff;margin-top: 10px;margin-left: 4px;">Send
  432. <path d="m22.34 10.642-.007-.003-20.02-8.303a1.104 1.104 0 0 0-1.04.1 1.156 1.156 0 0 0-.523.966v5.31a1.125 1.125 0 0 0 .915 1.105l10.919 2.02a.187.187 0 0 1 0 .368L1.665 14.224a1.125 1.125 0 0 0-.915 1.104v5.31a1.105 1.105 0 0 0 .496.924 1.123 1.123 0 0 0 1.066.097l20.02-8.256.008-.004a1.5 1.5 0 0 0 0-2.757Z"></path>
  433. </svg></button></div>
  434. <input type="submit" class="kickall" onclick="window.postMessage('kickall','*')" value="KICK ALL"style="width: 95%; border-radius: 5px;height: 30px;color: #ffffff;margin-top: 7px;">
  435. <input type="submit" class="exit" onclick="window.postMessage('exit','*')" value="EXIT" style="border-radius: 5px;height: 30px;width: 47%;color: #ffffff;margin-top: 7px;">
  436. <input type="submit" class="report" onclick="window.postMessage('report','*')" value="REPORT" style=" border-radius: 5px;height: 30px;width: 47%;color: #ffffff;margin-top: 7px;">
  437. <input type="submit" class="jump" onclick="window.postMessage('jump','*')" value="JUMP" style="border-radius: 5px;height: 30px;width: 47%;color: #ffffff;margin-top: 7px;">
  438. <input type="submit" class="acceptdraw1" onclick="window.postMessage('acceptdraw1','*')" value="DRAW" style="border-radius: 5px;height: 30px;width: 47%;color: #ffffff;margin-top: 7px;">
  439. <br>
  440. <h2 class="roomconsole"></h2><span><h2 class="roomtheme"></h2></span>
  441. </div>
  442. <div id="STBOT2" class="STBOT">
  443. <div class="broadcastbox"><input type="text" id="broadcastspam" placeholder="Broadcast (spam)"><button class="broadcastbtn" id="broadcaststart" onclick="window.postMessage('broadcastspamtoggle','*')">
  444. <svg width="20" height="20" fill="#ffffff" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" d="M12 21.6a9.6 9.6 0 1 0 0-19.2 9.6 9.6 0 0 0 0 19.2Zm-.534-12.998A1.2 1.2 0 0 0 9.6 9.6v4.8a1.2 1.2 0 0 0 1.866.998l3.6-2.4a1.2 1.2 0 0 0 0-1.996l-3.6-2.4Z" clip-rule="evenodd"></path></svg>
  445. </button>
  446. <button class="broadcastbtn" id="broadcaststop" onclick="window.postMessage('stopbroadcast','*')">
  447. <svg width="20" height="20" fill="#ffffff" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" d="M21.6 12a9.6 9.6 0 1 1-19.2 0 9.6 9.6 0 0 1 19.2 0ZM8.4 9.6a1.2 1.2 0 1 1 2.4 0v4.8a1.2 1.2 0 1 1-2.4 0V9.6Zm6-1.2a1.2 1.2 0 0 0-1.2 1.2v4.8a1.2 1.2 0 1 0 2.4 0V9.6a1.2 1.2 0 0 0-1.2-1.2Z" clip-rule="evenodd"></path></svg>
  448. </button></div>
  449. <div class="msgbox"><input type="text" id="messagespam" placeholder="Message (spam)"><button class="msgbtn" id="msgstart" onclick="window.postMessage('chatspamtoggle','*')">
  450. <svg width="20" height="20" fill="#ffffff" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" d="M12 21.6a9.6 9.6 0 1 0 0-19.2 9.6 9.6 0 0 0 0 19.2Zm-.534-12.998A1.2 1.2 0 0 0 9.6 9.6v4.8a1.2 1.2 0 0 0 1.866.998l3.6-2.4a1.2 1.2 0 0 0 0-1.996l-3.6-2.4Z" clip-rule="evenodd"></path></svg>
  451. </button>
  452. <button class="msgbtn" id="msgstop" onclick="window.postMessage('stopmsg','*')">
  453. <svg width="20" height="20" fill="#ffffff" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" d="M21.6 12a9.6 9.6 0 1 1-19.2 0 9.6 9.6 0 0 1 19.2 0ZM8.4 9.6a1.2 1.2 0 1 1 2.4 0v4.8a1.2 1.2 0 1 1-2.4 0V9.6Zm6-1.2a1.2 1.2 0 0 0-1.2 1.2v4.8a1.2 1.2 0 1 0 2.4 0V9.6a1.2 1.2 0 0 0-1.2-1.2Z" clip-rule="evenodd"></path></svg>
  454. </button></div>
  455. <div class="answerbox"><input type="text" id="answerspam" placeholder="Answer (spam)"><button class="answerbtn" id="answerstart" onclick="window.postMessage('answerspamtoggle','*')">
  456. <svg width="20" height="20" fill="#ffffff" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" d="M12 21.6a9.6 9.6 0 1 0 0-19.2 9.6 9.6 0 0 0 0 19.2Zm-.534-12.998A1.2 1.2 0 0 0 9.6 9.6v4.8a1.2 1.2 0 0 0 1.866.998l3.6-2.4a1.2 1.2 0 0 0 0-1.996l-3.6-2.4Z" clip-rule="evenodd"></path></svg>
  457. </button>
  458. <button class="answerbtn" id="answerstop" onclick="window.postMessage('stopanswer','*')">
  459. <svg width="20" height="20" fill="#ffffff" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" d="M21.6 12a9.6 9.6 0 1 1-19.2 0 9.6 9.6 0 0 1 19.2 0ZM8.4 9.6a1.2 1.2 0 1 1 2.4 0v4.8a1.2 1.2 0 1 1-2.4 0V9.6Zm6-1.2a1.2 1.2 0 0 0-1.2 1.2v4.8a1.2 1.2 0 1 0 2.4 0V9.6a1.2 1.2 0 0 0-1.2-1.2Z" clip-rule="evenodd"></path></svg>
  460. </button></div>
  461. <h2 class="broadcastspamvalue" id="broadcastms"></h2>
  462. <input class="broadcastspam" type="range" oninput="postMessage('broadcastspam')" min="1000" max="32000">
  463. <h2 class="messagespamvalue" id="messagems"></h2>
  464. <input class="messagespam" type="range" oninput="postMessage('messagespam')" min="1000" max="10000">
  465. <h2 class="answerspamvalue" id="answerms"></h2>
  466. <input class="answerspam" type="range" oninput="postMessage('answerspam')" min="1000" max="10000">
  467. </div>
  468. <div id="STBOT3" class="STBOT">
  469. <h2 class="customkick">Custom kick</h2>
  470. <div class="kicklistbox">
  471. <input type="text" id="kicklistinput" placeholder="Player name">
  472. <input type="submit" id="kicklistaddbtn" onclick="window.postMessage('customkickadd','*')" value="add">
  473. </div>
  474. <input type="submit" id="kicklistremoveallbtn" onclick="window.postMessage('customkickremoveall','*')" value="remove all">
  475. </div>
  476. <div id="STBOT4" class="STBOT">
  477. <div class="autoguessstyle">
  478. <h2 id="autoguesstext">Auto guess &nbsp;</h2>
  479. <input type="submit" id="autoguessenable" class="autoguess" onclick="window.postMessage('autoguessenable','*')" value="enable">
  480. <input type="submit" id="autoguessdisable" class="autoguess" onclick="window.postMessage('autoguessdisable','*')" value="disable"></div>
  481. `
  482.  
  483. function setCSS(){
  484. var css = `
  485. @import url('https://fonts.googleapis.com/css2?family=Roboto&display=swap');
  486. .userlist *{box-sizing:border-box;}
  487.  
  488.  
  489. .userlist {
  490. display:block;text-align:center;opacity:none;font-size:10pt;color:#ff0000;font-style:italic;
  491. position:fixed;left:50%;top:3px;padding:5px 3px !important;margin:0px;background:#000000;font-family: 'Roboto', sans-serif;border:2px solid #303132;
  492. transform:translate(-50%,0);border-radius:15px;z-index:999999999;display:block !important;height:auto !important;width:200px !important;
  493. }
  494.  
  495. .userlist input[type=text]{height:20px;border-radius:3px;font-size:9pt;background:brown;color:white;padding-left:3px;}
  496. .userlist input[type=submit]{height:25px;border-radius:3px;background:#ff0000;}
  497. .userlist input[type=checkbox]{margin-top:2px;}
  498.  
  499. #background{
  500. z-index:99999;width:0px;height:0px;position:fixed;left:0px;top:0px;
  501. }
  502. .option *{box-sizing:border-box;}
  503.  
  504. .option {
  505.  
  506. display:block;text-align:center;opacity:none;font-size:10pt;color:#ff0000;
  507. position:fixed;left:28%;top:3px;padding:5px 3px !important;margin:0px;background:#000000;font-family: 'Roboto', sans-serif;border:2px solid #303132;
  508. transform:translate(-50%,0);border-radius:15px;z-index:999999999;display:block !important;height:auto !important;width:200px !important;
  509. }
  510.  
  511. .option input[type=submit],.STBOTbtn button{cursor:pointer;border:none;background:#ff0000;color:#000000;padding:5px 0px;border-radius:5px;font-size:11pt;margin-top:5px;}
  512. .option input[type=checkbox]{margin-top:2px;}
  513. .option input[type=submit]:hover{background:#b70000;transition:0.2s;}
  514.  
  515. .STBOT *{box-sizing:border-box;}
  516. #STBOT1 {
  517.  
  518. overflow-x:hidden;width:100%;max-height:380px;overflow-y:hidden;
  519. display:block;text-align:center;opacity:none;font-size:10pt;color:#ff0000;
  520. position: fixed; left: -2%; top: 30%; transform: translateX(28%);padding:5px 3px !important;margin:0px;background:#000000;font-family: 'Roboto', sans-serif;
  521. border:2px solid #ff0000;border-radius:15px;z-index:999999999;display:block;height:450px !important;width:240px !important;-index:999999999;display:block;height:450px !important;width:240px !important;
  522. }
  523. .STBOT input[type=submit],.STBOTbtn button{cursor:pointer;border:none;background:#ff0000;color:#000000;padding:5px 0px;border-radius:5px;font-size:11pt;margin-top:5px;}
  524. .STBOT input[type=checkbox]{margin-top:2px;}
  525. .STBOT input[type=submit]:hover{background:#b70000;transition:0.2s;}
  526. .STBOT input[type=range]{accent-color:#ff0000;}
  527. .STBOT input[type=range]:focus::-webkit-slider-runnable-track { background: #3071A9; }
  528.  
  529.  
  530. #join{width:20%;}
  531. .roomlink{display:flex;align-items:center;justify-content:center;}
  532. .roomlink input[type=text]{margin-top:10px !important;width:75% !important;height:30px !important;}
  533. .roomlink input[type=submit],.broadcastbox button{cursor:pointer;border:none;background:#ff0000;color:#000000;padding:5px 0px;border-radius:5px;font-size:11pt;margin-top:5px;}
  534. .roomlink button:hover{background:#b70000;transition:0.2s;}
  535. .botnick input[type=text]{margin-top:10px !important;width:75% !important;height:30px !important;}
  536. .broadcastbox{display:flex;align-items:center;justify-content:center;}
  537. .broadcastbox input[type=text]{margin-top:10px !important;width:75% !important;height:30px !important;}
  538. .broadcastbox input[type=submit],.broadcastbox button{cursor:pointer;border:none;background:#ff0000;color:#000000;padding:5px 0px;border-radius:5px;font-size:11pt;margin-top:5px;}
  539. .broadcastbox button:hover{background:#b70000;transition:0.2s;}
  540. .msgbox{display:flex;align-items:center;justify-content:center;}
  541. .msgbox input[type=text]{margin-top:10px !important;width:75% !important;height:30px !important;}
  542. .msgbox input[type=submit],.msgbox button{cursor:pointer;border:none;background:#ff0000;color:#000000;padding:5px 0px;border-radius:5px;font-size:11pt;margin-top:5px;}
  543. .msgbox button:hover{background:#b70000;transition:0.2s;}
  544. .answerbox{display:flex;align-items:center;justify-content:center;}
  545. .answerbox input[type=text]{margin-top:10px !important;width:75% !important;height:30px !important;}
  546. .answerbox input[type=submit],.answerbox button{cursor:pointer;border:none;background:#ff0000;color:#000000;padding:5px 0px;border-radius:5px;font-size:11pt;margin-top:5px;}
  547. .answerbox button:hover{background:#b70000;transition:0.2s;}
  548.  
  549.  
  550. .botnick0{width:80%;}
  551. .botnick1{width:80%;}
  552. .chooseavatar{width:80%;}
  553. .broadcastbtn{width:20%;},.broadcastbtn input[type=submit]:hover{background:#b70000;transition:0.2s;}
  554. .msgbtn{width:20%;}
  555. .answerbtn{width:20%;}
  556. .report{width:40%;}
  557. .kickall{width:40%;}
  558. .jump{width:40%;}
  559. .exit{width:40%;}
  560. .acceptdraw1{width:40%;}
  561. .acceptdraw2{width:40%;}
  562. .tips{width:40%;}
  563. .autoreport input[type=checkbox]{margin-top:32px}
  564. .autoskip{margin-top:32px;}
  565. .antikick{margin-top:32px;}
  566. .antiafk{margin-top:32px;}
  567.  
  568. .roomconsole{margin-top:3px; text-align:left; color:#ff0000; font-size:17px;}
  569. .roomtheme{margin-top:3px; text-align:left; color:#ff0000; font-size:17px;}
  570.  
  571.  
  572. `;
  573. GM_addStyle(css);
  574. f(".kickallwhenjoin").addEventListener("change",()=>{
  575. GM_setValue("kicknewset",f(".kickallwhenjoin").checked)
  576. })
  577. f(".kickonjoin").addEventListener("change",()=>{
  578. GM_setValue("kickjoinset",f(".kickonjoin").checked)
  579. })
  580. }
  581.  
  582. window.addEventListener("message",function(event){
  583. if(typeof(event.data)==="string"){
  584. if(event.data=="join"){
  585. f("#roomlink").value==""?f("#roomlink").value=window.location.href:0
  586. botc=0;GM_setValue("resetcount",rand())
  587. readyc=0
  588. GM_sendMessage("join",f("#roomlink").value.split("/")[3],f("#botnick").value,avatar,localStorage.getItem("botnick"),f(".kickonjoin").checked,rand())
  589. }
  590. if(event.data.indexOf("kickuser.")!=-1){
  591. let userid=event.data.split("kickuser.")[1]
  592. GM_setValue("kick",userid+".."+num(10000))
  593. }
  594.  
  595. if(event.data=="broadcast"){
  596. GM_setValue("broadcast",f("#broadcast").value+"►"+num(5000))
  597. }
  598. if(event.data=="chat"){
  599. GM_setValue("msg",f("#message").value+"►"+num(5000))
  600. }
  601. if(event.data=="answer"){
  602. GM_setValue("answer",f("#answer").value+"►"+num(5000))
  603. }
  604. if(event.data=="report"){
  605. GM_setValue('report', num(5000));
  606. }
  607. if(event.data=="jump"){
  608. GM_setValue('jump', num(5000));
  609. }
  610. if(event.data=="acceptdraw1"){
  611. GM_setValue('acceptdraw1', num(5000));
  612. }
  613. if(event.data=="acceptdraw2"){
  614. GM_setValue('acceptdraw2', num(5000));
  615. }
  616. if(event.data=="tips"){
  617. GM_setValue('tips', num(5000));
  618. }
  619. if(event.data=="exit"){
  620. GM_setValue('exit', num(5000));
  621. }
  622.  
  623.  
  624. if(event.data=="kickall"){
  625. var elements = document.getElementsByClassName("kickmenubtn");
  626. var elementsvalue = [];
  627.  
  628. for (var i = 0; i < elements.length; i++) {
  629. elementsvalue.push(elements[i].getAttribute("onclick"));
  630. }
  631.  
  632. elementsvalue.forEach(function(value, index) {
  633. setTimeout(function() {
  634. let userid = value.split("kickuser.")[1].split("','*")[0];
  635.  
  636. GM_setValue("kick",userid+".."+num(10000))
  637. }, 550 * index);
  638. })}
  639. if(event.data=="broadcastspamtoggle"){
  640. let broadcastspamMS=parseInt(localStorage.getItem("broadcastspam"))
  641. var broadcastspam = f("#broadcastspam").value
  642. intervalbroadcast=setInterval(()=>{
  643. GM_setValue("broadcast",broadcastspam+"►"+num(5000))
  644. },broadcastspamMS)
  645. f("#broadcaststart").style.display="none"
  646. f("#broadcaststop").style.display="block"
  647. }
  648. if(event.data=="chatspamtoggle"){
  649. let messagespamMS=parseInt(localStorage.getItem("messagespam"))
  650. var messagespam = f("#messagespam").value
  651. intervalmsg=setInterval(()=>{
  652. var chatspam = f("#messagespam").value
  653. GM_setValue("msg",chatspam+"►"+num(5000))
  654. },messagespamMS)
  655. f("#msgstart").style.display="none"
  656. f("#msgstop").style.display="block"
  657. }
  658. if(event.data=="answerspamtoggle"){
  659. let answerspamMS=parseInt(localStorage.getItem("answerspam"))
  660. var answerspam = f("#answerspam").value
  661. intervalanswer=setInterval(()=>{
  662. var answerspam = f("#answerspam").value
  663. GM_setValue("answer",answerspam+"►"+num(5000))
  664. },answerspamMS)
  665. f("#answerstart").style.display="none"
  666. f("#answerstop").style.display="block"
  667. }
  668. if(event.data=="stopbroadcast"){
  669. clearInterval(intervalbroadcast)
  670. f("#broadcaststart").style.display="block"
  671. f("#broadcaststop").style.display="none"
  672. }
  673. if(event.data=="stopmsg"){
  674. clearInterval(intervalmsg)
  675. f("#msgstart").style.display="block"
  676. f("#msgstop").style.display="none"
  677. }
  678. if(event.data=="stopanswer"){
  679. clearInterval(intervalanswer)
  680. f("#answerstart").style.display="block"
  681. f("#answerstop").style.display="none"
  682. }
  683.  
  684. }
  685. })
  686.  
  687. localStorage.getItem("botc")?0:window.localStorage.setItem("botc",0)
  688. GM_setValue("resetcount",rand())
  689. //
  690. setInterval(()=>{
  691. if(f("#users")){
  692. fa(".kickmenubtn").forEach(ele=>{
  693. f(".scrollElements").innerText.indexOf(ele.value)==-1?ele.remove():0
  694. })
  695. f("g")?f("g").remove():0;
  696. }
  697. if(f("input[name=chat]")){
  698. f(".contentPopup")&&f(".btYellowBig.ic-yes")?f(".btYellowBig.ic-yes").click():0;
  699.  
  700. if(f(".contentPopup .nick")&&f(".ic-votekick")&&otoeven==0){
  701. otoeven=1//
  702. f(".close").addEventListener("click",()=>{otoeven=0})
  703. f(".ic-ignore").addEventListener("click",()=>{otoeven=0})
  704. f(".ic-votekick").addEventListener("click",()=>{
  705. otoeven=0
  706. GM_setValue("kick",f(".contentPopup .nick").innerText+".."+num(10000))
  707. })
  708. }
  709. }
  710. f("input[name=chat]")?f("input[name=chat]").setAttribute("placeholder",+botc+" bot aktif"):0
  711. f(".taktifbot")?f(".taktifbot").innerText=botc:0
  712.  
  713. if(f("#background")&&!f(".userlist")&&!f(".option")&&!f(".STBOT")){
  714. f("#background").innerHTML+=html
  715. setCSS()
  716. }
  717. },100)
  718. GM_addValueChangeListener("botekle", function(I,C,E,b) {
  719. botc++
  720. f(".taktifbot")?f(".taktifbot").innerText=botc:0
  721. })
  722.  
  723. GM_addValueChangeListener("ready", function(I,C,E,b) {
  724. readyc++
  725. readyc>=botc&&botc!=0?GM_setValue("join",rand()):0
  726. })
  727.  
  728. GM_addValueChangeListener("botexit", function(I,C,E,b) {
  729. //botc--
  730. })
  731. }