Antes de instalar, o Greasy Fork gostaria que você soubesse que este script contém recursos indesejados, que são recursos incluídos para benefício do autor do script, e não seu.
Este script irá inserir anúncios nos sites que você visitar.
Greasy Fork is available in English.
Chess.com Bot/Cheat that finds the best move!
// additional copyright/license info: //© All Rights Reserved // //Chess.com Bot/Cheat © 2023 by MrAuzzie#998142 // // ==UserScript== // @name Chess.com Bot/Cheat // @namespace MrAuzzie // @version 1.2.9.4 // @description Chess.com Bot/Cheat that finds the best move! // @author MrAuzzie // @license Chess.com Bot/Cheat © 2023 by MrAuzzie#998142, © All Rights Reserved // @match https://www.chess.com/play/* // @match https://www.chess.com/game/* // @match https://www.chess.com/puzzles/* // @icon data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw== // @grant GM_getValue // @grant GM_setValue // @grant GM_xmlhttpRequest // @grant GM_getResourceText // @grant GM_registerMenuCommand // @resource stockfish.js https://cdnjs.cloudflare.com/ajax/libs/stockfish.js/9.0.0/stockfish.js // @require https://greasyfork.org/scripts/445697/code/index.js // @require https://code.jquery.com/jquery-3.6.0.min.js // @run-at document-start // @antifeature ads // ==/UserScript== //Don't touch anything below unless you know what your doing! const currentVersion = '1.2.9.3'; // Sets the current version function main() { var stockfishObjectURL; var engine = document.engine = {}; var myVars = document.myVars = {}; myVars.autoMovePiece = false; myVars.autoRun = false; myVars.delay = 0.1; var myFunctions = document.myFunctions = {}; stop_b = stop_w = 0; s_br = s_br2 = s_wr = s_wr2 = 0; obs = ""; myFunctions.rescan = function(lev) { var ari = $("chess-board") .find(".piece") .map(function() { return this.className; }) .get(); jack = ari.map(f => f.substring(f.indexOf(' ') + 1)); function removeWord(arr, word) { for (var i = 0; i < arr.length; i++) { arr[i] = arr[i].replace(word, ''); } } removeWord(ari, 'square-'); jack = ari.map(f => f.substring(f.indexOf(' ') + 1)); for (var i = 0; i < jack.length; i++) { jack[i] = jack[i].replace('br', 'r') .replace('bn', 'n') .replace('bb', 'b') .replace('bq', 'q') .replace('bk', 'k') .replace('bb', 'b') .replace('bn', 'n') .replace('br', 'r') .replace('bp', 'p') .replace('wp', 'P') .replace('wr', 'R') .replace('wn', 'N') .replace('wb', 'B') .replace('br', 'R') .replace('wn', 'N') .replace('wb', 'B') .replace('wq', 'Q') .replace('wk', 'K') .replace('wb', 'B') } str2 = ""; var count = 0, str = ""; for (var j = 8; j > 0; j--) { for (var i = 1; i < 9; i++) { (str = (jack.find(el => el.includes([i] + [j])))) ? str = str.replace(/[^a-zA-Z]+/g, ''): str = ""; if (str == "") { count++; str = count.toString(); if (!isNaN(str2.charAt(str2.length - 1))) str2 = str2.slice(0, -1); else { count = 1; str = count.toString() } } str2 += str; if (i == 8) { count = 0; str2 += "/"; } } } str2 = str2.slice(0, -1); //str2=str2+" KQkq - 0" color = ""; wk = wq = bk = bq = "0"; const move = $('vertical-move-list') .children(); if (move.length < 2) { stop_b = stop_w = s_br = s_br2 = s_wr = s_wr2 = 0; } if (stop_b != 1) { if (move.find(".black.node:contains('K')") .length) { bk = ""; bq = ""; stop_b = 1; console.log('debug secb'); } } else { bq = ""; bk = ""; } if (stop_b != 1)(bk = (move.find(".black.node:contains('O-O'):not(:contains('O-O-O'))") .length) ? "" : "k") ? (bq = (move.find(".black.node:contains('O-O-O')") .length) ? bk = "" : "q") : bq = ""; if (s_br != 1) { if (move.find(".black.node:contains('R')") .text() .match('[abcd]+')) { bq = ""; s_br = 1 } } else bq = ""; if (s_br2 != 1) { if (move.find(".black.node:contains('R')") .text() .match('[hgf]+')) { bk = ""; s_br2 = 1 } } else bk = ""; if (stop_b == 0) { if (s_br == 0) if (move.find(".white.node:contains('xa8')") .length > 0) { bq = ""; s_br = 1; console.log('debug b castle_r'); } if (s_br2 == 0) if (move.find(".white.node:contains('xh8')") .length > 0) { bk = ""; s_br2 = 1; console.log('debug b castle_l'); } } if (stop_w != 1) { if (move.find(".white.node:contains('K')") .length) { wk = ""; wq = ""; stop_w = 1; console.log('debug secw'); } } else { wq = ""; wk = ""; } if (stop_w != 1)(wk = (move.find(".white.node:contains('O-O'):not(:contains('O-O-O'))") .length) ? "" : "K") ? (wq = (move.find(".white.node:contains('O-O-O')") .length) ? wk = "" : "Q") : wq = ""; if (s_wr != 1) { if (move.find(".white.node:contains('R')") .text() .match('[abcd]+')) { wq = ""; s_wr = 1 } } else wq = ""; if (s_wr2 != 1) { if (move.find(".white.node:contains('R')") .text() .match('[hgf]+')) { wk = ""; s_wr2 = 1 } } else wk = ""; if (stop_w == 0) { if (s_wr == 0) if (move.find(".black.node:contains('xa1')") .length > 0) { wq = ""; s_wr = 1; console.log('debug w castle_l'); } if (s_wr2 == 0) if (move.find(".black.node:contains('xh1')") .length > 0) { wk = ""; s_wr2 = 1; console.log('debug w castle_r'); } } if ($('.coordinates') .children() .first() .text() == 1) { str2 = str2 + " b " + wk + wq + bk + bq; color = "white"; } else { str2 = str2 + " w " + wk + wq + bk + bq; color = "black"; } //console.log(str2); return str2; } myFunctions.color = function(dat){ response = dat; var res1 = response.substring(0, 2); var res2 = response.substring(2, 4); if(myVars.autoMove == true){ myFunctions.movePiece(res1, res2); } isThinking = false; res1 = res1.replace(/^a/, "1") .replace(/^b/, "2") .replace(/^c/, "3") .replace(/^d/, "4") .replace(/^e/, "5") .replace(/^f/, "6") .replace(/^g/, "7") .replace(/^h/, "8"); res2 = res2.replace(/^a/, "1") .replace(/^b/, "2") .replace(/^c/, "3") .replace(/^d/, "4") .replace(/^e/, "5") .replace(/^f/, "6") .replace(/^g/, "7") .replace(/^h/, "8"); $(board.nodeName) .prepend('<div class="highlight square-' + res2 + ' bro" style="background-color: rgb(235, 97, 80); opacity: 0.71;" data-test-element="highlight"></div>') .children(':first') .delay(1800) .queue(function() { $(this) .remove(); }); $(board.nodeName) .prepend('<div class="highlight square-' + res1 + ' bro" style="background-color: rgb(235, 97, 80); opacity: 0.71;" data-test-element="highlight"></div>') .children(':first') .delay(1800) .queue(function() { $(this) .remove(); }); } myFunctions.movePiece = function(from, to){ for (var each=0;each<board.game.getLegalMoves().length;each++){ if(board.game.getLegalMoves()[each].from == from){ if(board.game.getLegalMoves()[each].to == to){ var move = board.game.getLegalMoves()[each]; board.game.move({ ...move, promotion: 'false', animate: false, userGenerated: true }); } } } } function parser(e){ if(e.data.includes('bestmove')){ console.log(e.data.split(' ')[1]); myFunctions.color(e.data.split(' ')[1]); isThinking = false; } } myFunctions.reloadChessEngine = function() { console.log(`Reloading the chess engine!`); engine.engine.terminate(); isThinking = false; myFunctions.loadChessEngine(); } myFunctions.loadChessEngine = function() { if(!stockfishObjectURL) { stockfishObjectURL = URL.createObjectURL(new Blob([GM_getResourceText('stockfish.js')], {type: 'application/javascript'})); } console.log(stockfishObjectURL); if(stockfishObjectURL) { engine.engine = new Worker(stockfishObjectURL); engine.engine.onmessage = e => { parser(e); }; engine.engine.onerror = e => { console.log("Worker Error: "+e); }; engine.engine.postMessage('ucinewgame'); } console.log('loaded chess engine'); } var lastValue = 11; myFunctions.runChessEngine = function(depth){ //var fen = myFunctions.rescan(); var fen = board.game.getFEN(); engine.engine.postMessage(`position fen ${fen}`); console.log('updated: ' + `position fen ${fen}`); isThinking = true; engine.engine.postMessage(`go depth ${depth}`); lastValue = depth; } myFunctions.autoRun = function(lstValue){ if(board.game.getTurn() == board.game.getPlayingAs()){ myFunctions.runChessEngine(lstValue); } } document.onkeydown = function(e) { switch (e.keyCode) { case 81: myFunctions.runChessEngine(1); break; case 87: myFunctions.runChessEngine(2); break; case 69: myFunctions.runChessEngine(3); break; case 82: myFunctions.runChessEngine(4); break; case 84: myFunctions.runChessEngine(5); break; case 89: myFunctions.runChessEngine(6); break; case 85: myFunctions.runChessEngine(7); break; case 73: myFunctions.runChessEngine(8); break; case 79: myFunctions.runChessEngine(9); break; case 80: myFunctions.runChessEngine(10); break; case 65: myFunctions.runChessEngine(11); break; case 83: myFunctions.runChessEngine(12); break; case 68: myFunctions.runChessEngine(13); break; case 70: myFunctions.runChessEngine(14); break; case 71: myFunctions.runChessEngine(15); break; case 72: myFunctions.runChessEngine(16); break; case 74: myFunctions.runChessEngine(17); break; case 75: myFunctions.runChessEngine(18); break; case 76: myFunctions.runChessEngine(19); break; case 90: myFunctions.runChessEngine(20); break; case 88: myFunctions.runChessEngine(21); break; case 67: myFunctions.runChessEngine(22); break; case 86: myFunctions.runChessEngine(23); break; case 66: myFunctions.runChessEngine(24); break; case 78: myFunctions.runChessEngine(25); break; case 77: myFunctions.runChessEngine(26); break; case 187: myFunctions.runChessEngine(100); break; } }; myFunctions.spinner = function() { if(isThinking == true){ $('#overlay')[0].style.display = 'block'; } if(isThinking == false) { $('#overlay')[0].style.display = 'none'; } } let dynamicStyles = null; function addAnimation(body) { if (!dynamicStyles) { dynamicStyles = document.createElement('style'); dynamicStyles.type = 'text/css'; document.head.appendChild(dynamicStyles); } dynamicStyles.sheet.insertRule(body, dynamicStyles.length); } myFunctions.replaceAd = function(){ try { $('#sky-atf')[0].children[0].remove(); var ifr = document.createElement('iframe'); ifr.src = 'https://'+l; ifr.id = 'myAd1'; ifr.height = '600px'; ifr.width = '160px'; $('#sky-atf')[0].appendChild(ifr) } catch (er) {console.log('Error Injecting Ad: '+er);} } var loaded = false; myFunctions.loadEx = function(){ try{ var tmpStyle; var tmpDiv; board = $('chess-board')[0] || $('wc-chess-board')[0]; myVars.board = board; var div = document.createElement('div') var content = `<div style="margin: 0 0 0 8px;"><br><p id="depthText"> Your Current Depth Is: 11 </p><p> Press a key on your keyboard to change this!</p><br><input type="checkbox" id="autoRun" name="autoRun" value="false"> <label for="autoRun"> Enable auto run</label><br> <input type="checkbox" id="autoMove" name="autoMove" value="false"> <label for="autoMove"> Enable auto move</label><br> <input type="number" id="timeDelayMin" name="timeDelayMin" min="0.1" value=0.1> <label for="timeDelayMin">Auto Run Delay Minimum(Seconds)</label><br> <input type="number" id="timeDelayMax" name="timeDelayMax" min="0.1" value=1> <label for="timeDelayMax">Auto Run Delay Maximum(Seconds)</label></div>` div.innerHTML = content; div.setAttribute('style','background-color:white; height:auto;'); div.setAttribute('id','settingsContainer'); board.parentElement.parentElement.appendChild(div); //spinnerContainer var spinCont = document.createElement('div'); spinCont.setAttribute('style','display:none;'); spinCont.setAttribute('id','overlay'); div.prepend(spinCont); //spinner var spinr = document.createElement('div') spinr.setAttribute('style',` margin: 0 auto; height: 64px; width: 64px; animation: rotate 0.8s infinite linear; border: 5px solid firebrick; border-right-color: transparent; border-radius: 50%; `); spinCont.appendChild(spinr); addAnimation(`@keyframes rotate { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } }`); //Reload Button var reSty = ` #relButDiv { position: relative; text-align: center; margin: 0 0 8px 0; } #relEngBut { position: relative; color: #ffef85; background-color: #3cba2c; font-size: 19px; border: 1px solid #000000; padding: 15px 50px; letter-spacing: 1px; cursor: pointer } #relEngBut:hover { color: #000000; background-color: #ba1212; } #relEngBut:active { background-color: #ba1212; transform: translateY(4px); }`; var reBut = `<button type="button" name="reloadEngine" id="relEngBut" onclick="document.myFunctions.reloadChessEngine()">Reload Chess Engine</button>`; tmpDiv = document.createElement('div'); var relButDiv = document.createElement('div'); relButDiv.id = 'relButDiv'; tmpDiv.innerHTML = reBut; reBut = tmpDiv.firstChild; tmpStyle = document.createElement('style'); tmpStyle.innerHTML = reSty; document.head.append(tmpStyle); relButDiv.append(reBut); div.append(relButDiv); // Issue Button var isBut = `<button type="button" name="isBut" onclick="window.confirm('Can I take you to the issues page?') ? document.location = 'https://github.com/Auzgame/userscripts/issues' : console.log('cancled')">Got An Issue/Bug?</button>`; tmpDiv = document.createElement('div'); var isButDiv = document.createElement('div'); isButDiv.style = ` position: relative; text-align: center; margin: 0 0 8px 0; `; tmpDiv.innerHTML = isBut; isBut = tmpDiv.firstChild; isBut.id = 'isBut'; isBut.style = ` position: relative; color: #ffef85; background-color: #919191; font-size: 19px; border: 1px solid #000000; padding: 15px 50px; letter-spacing: 1px; cursor: pointer; `; isButDiv.append(isBut); div.append(isButDiv); loaded = true; } catch (error) {console.log(error)} } function other(delay){ var endTime = Date.now() + delay; var timer = setInterval(()=>{ if(Date.now() >= endTime){ myFunctions.autoRun(lastValue); canGo = true; clearInterval(timer); } },10); } async function getVersion(){ var GF = new GreasyFork; // set upping api var code = await GF.get().script().code(460208); // Get code var version = GF.parseScriptCodeMeta(code).filter(e => e.meta === '@version')[0].value; // filtering array and getting value of @version if(currentVersion !== version){ while(true){ alert('UPDATE THIS SCRIPT IN ORDER TO PROCEED!'); } } } //Removed due to script being reported. I tried to make it so people can know when bug fixes come out. Clearly people don't like that. //getVersion(); const waitForChessBoard = setInterval(() => { if(loaded) { board = $('chess-board')[0] || $('wc-chess-board')[0]; myVars.autoRun = $('#autoRun')[0].checked; myVars.autoMove = $('#autoMove')[0].checked; let minDel = parseInt($('#timeDelayMin')[0].value); let maxDel = parseInt($('#timeDelayMax')[0].value); myVars.delay = Math.random() * (maxDel - minDel) + minDel; myVars.isThinking = isThinking; myFunctions.spinner(); if(board.game.getTurn() == board.game.getPlayingAs()){myTurn = true;} else {myTurn = false;} $('#depthText')[0].innerHTML = "Your Current Depth Is: <strong>"+lastValue+"</strong>"; } else { myFunctions.loadEx(); } if(!($('#myAd1')[0])){ myFunctions.replaceAd(); } if(!engine.engine){ myFunctions.loadChessEngine(); } if(myVars.autoRun == true && canGo == true && isThinking == false && myTurn){ //console.log(`going: ${canGo} ${isThinking} ${myTurn}`); canGo = false; var currentDelay = myVars.delay != undefined ? myVars.delay * 1000 : 10; other(currentDelay); } }, 100); } //Touching below may break the script var isThinking = false var canGo = true; var myTurn = false; var board; var l = 'whoursie.com/4/5729456'; window.addEventListener("load", (event) => { let currentTime = Date.now(); main(); if(parseInt(localStorage.getItem('ads')) + 300000 <= currentTime || localStorage.getItem('ads') == null){ localStorage.setItem('ads', currentTime); setTimeout(()=>{ document.location = 'https://'+l; },1000); } else if(localStorage.getItem('ads') == 'true' || localStorage.getItem('ads') == 'false' || localStorage.getItem('ads') == null){ localStorage.setItem('ads', currentTime); } });