♟-GabiBot-: Chess Bot And ModMenu!♟

GabiBot is a ModMenu that lets you use stockfish to cheat on Chess.com with up to 3100Elo, GabiBot is one of the fastest out there, and can beat every chess bot.

// ==UserScript==
// @name         ♟-GabiBot-: Chess Bot And ModMenu!♟ 
// @namespace    http://tampermonkey.net/
// @version      1.0
// @description  GabiBot is a ModMenu that lets you use stockfish to cheat on Chess.com with up to 3100Elo, GabiBot is one of the fastest out there, and can beat every chess bot.
// @author       GabiHarMotion
// @match        https://www.chess.com/play/*
// @match        https://www.chess.com/game/*
// @license      MIT
// @icon         https://www.google.com/s2/favicons?sz=64&domain=chess.com
// @grant        none
// @antifeature  membership
// ==/UserScript==
 
(async function() {
 
 
    setTimeout(async function(){
        alert("Stockfish Loaded!")
 
        var keyMenuWrap = document.createElement("div")
        keyMenuWrap.style=`
    font-family: monospace;
    border-radius: 1vh;
    z-index: 1000000;
    width: 300px;
    grid: none;display: grid;
    grid-template-columns: 70%;
    grid-template-rows: 30% 50% 15%;
    justify-content: center;
    height: 40%;
    position: absolute;
    border: 1px solid rgb(100 100 100);
    background: rgb(16, 16, 16);
    opacity: 0.98;
    user-select: none;
    max-width: 60vw;
    top: 100px;
    left: 100px;`
 
        keyMenuWrap.innerHTML=`
<a style="
color: white;
justify-self: center;
margin-top: 5%;
font-size: 15px;
">-GabiBot-</a>
<div style="text-align: center;font-size: 14px;">
<a onClick="window.open('https://link-hub.net/1346380/gabibot-key', '_blank').focus();" style="
color: #eeeeee;
font-weight: bold;
font-size: 16px;
text-decoration-line: underline;
 
">Click Me To Get The Key</a>
<input id="keyInput" placeholder="Key..." style="
margin: 7%;
outline: none;
color: #b0b0b0;
background: #202020;
height: 20%;
width: 90%;
font-size: 13px;
border: none;
border-radius: 0.3vw;
">
<button id="keyButton" style="
border: none;
width: 30%;
height: 20%;
font-size: 14px;
border-radius: 0.3vw;
background: #606060;
color: #c0c0c0;
">Enter</button>
</div>
<a id="keyResponse" style="
text-align: center;
align-self: center;
color: white;
 
"></a>
`
        document.body.appendChild(keyMenuWrap)
 
        async function startStockfish(key){
            var menuWrap = document.createElement("div")
            menuWrap.id="menuWrap"
            var menuWrapStyle = document.createElement("style")
            menuWrap.innerHTML=`
    <div id="topText">
        <a id="modTitle">-GabiBot-</a>
        <a>Ctrl+B To Hide</a>
    </div>
    <div id="itemsList">
        <div name="enableHack" class="listItem">
            <input class="checkboxMod" type="checkbox">
            <a class="itemDescription">Enable Hack: </a>
            <a class="itemState">Off</a>
        </div>
        <div name="autoMove" class="listItem">
            <input class="checkboxMod" type="checkbox">
            <a class="itemDescription">Auto Move:</a>
            <a class="itemState">Off</a>
        </div>
        <div name="botPower" class="listItem">
            <input min="1" max="15" value="12" class="rangeSlider" type="range">
            <a class="itemDescription">Bot Power:</a>
            <a class="itemState">12</a>
        </div>
        <div name="autoMoveSpeed" class="listItem">
            <input min="1" max="10" value="4" class="rangeSlider" type="range">
            <a class="itemDescription">Auto Move Speed:</a>
            <a class="itemState">3</a>
        </div>
        <div name="updateSpeed" class="listItem">
            <input min="1" max="10" value="8" class="rangeSlider" type="range">
            <a class="itemDescription">Update Speed:</a>
            <a class="itemState">8</a>
        </div>
        <div name="currentEvaluation" class="listItem">
            <a class="itemDescription">Current Evaluation:</a>
            <a class="itemState">-</a>
        </div>
        <div name="bestMove" class="listItem">
            <a class="itemDescription">Best Move:</a>
            <a class="itemState">-</a>
        </div>
        <div name="information" class="listItem">
            <a class="itemDescription">Information: </a>
            <a class="itemState">GabiHarMotion (1242 Elo)</a>
        </div>
    `
            menuWrapStyle.innerHTML=`
        #menuWrap {
            font-family: monospace;
            border-radius: 1vh;
            z-index: 1000000;
            grid: none;
            display: grid;
            grid-template-columns: 90%;
            grid-template-rows: 15% 85%;
            justify-content: center;
            width: 350px;
            height: 400px;
            position: absolute;
            border: 1px solid rgb(100 100 100);
            background: rgb(16, 16, 16);
            opacity: 0.98;
            user-select: none;
            max-width: 60vw;
            top: 100px;
            left: 100px;
        }
        #topText {
            width: 40%;
            justify-self: center;
            text-align: center;
        }
        #modTitle {
            color: white;
            justify-self: center;
            margin-bottom: 5%;
            font-size: 17px;
        }
        #itemsList{
            overflow-x: hidden;
        }
        ::-webkit-scrollbar {
            width: 8px;
        }
        ::-webkit-scrollbar-thumb {
            background: #888;
            height: 10px;
 
        }
 
 
        .listItem {
            display: flex;
            align-items: center;
            margin-bottom: 6%;
        }
        .checkboxMod {
            outline: #acacac 1px solid;
            vertical-align: middle;
            appearance: none;
            border-radius: 30%;
            height: 20px;
            width: 20px;
            top: 30%;
            background: #303030;
            margin-right: 5%;
        }
 
        .checkboxMod:checked {
            background-color: #808080;
        }
 
        .rangeSlider {
            -webkit-appearance: none;
            width: 45%;
            height: 15px;
            border-radius: 5px;
            background: #b0b0b0;
            outline: none;
            margin-right: 6%;
        }
        .rangeSlider::-webkit-slider-thumb {
            appearance: none;
            width: 17px;
            height: 17px;
            border-radius: 50%;
            background: #505050;
            cursor: pointer;
 
        }
        .itemDescription{
            color: white;
        }
        .itemState{
            color: white;
            margin-left: 3%;
        }`
            document.body.appendChild(menuWrap)
            document.body.appendChild(menuWrapStyle)
 
 
            window.hackEnabled = 0
            window.botPower = 12
            window.updateSpeed = 8
            window.autoMove = 0
            window.autoMoveSpeed = 4
            window.currentEvaluation = 0
            window.bestMove = ""
 
            var itemWrap = document.getElementById("menuWrap")
 
            function getElementByName(name,selector){return selector.querySelector(`[name="${name}"]`)}
            function getInputElement(element){return element.children[0]}
            function getStateElement(element){return element.children[element.children.length-1]}
 
            function modFunction(name,type,variable){
                var modElement = getElementByName(name,itemWrap)
                var modState = getStateElement(modElement)
                var modInput = getInputElement(modElement)
 
                if(type=="text"){
                    modState.innerHTML=eval(variable)
                }
                modInput.onmouseup=e=>{
                    if(e.button==0){
                        if(type=="checkbox"){
                            modState.innerHTML=["Off","On"][Number(!modInput.checked)]
                            eval(`${variable}=${!modInput.checked}`)
                        }
                        if(type=="range"){
                            modState.innerHTML=modInput.value
                            eval(`${variable}=${modInput.value}`)
                        }
                    }
                }
            }
 
            modFunction("enableHack","checkbox","window.hackEnabled")
            modFunction("autoMove","checkbox","window.autoMove")
 
            modFunction("botPower","range","window.botPower")
            modFunction("autoMoveSpeed","range","window.autoMoveSpeed")
            modFunction("updateSpeed","range","window.updateSpeed")
 
            function updateTexts(){
                modFunction("currentEvaluation","text","window.currentEvaluation");
                modFunction("bestMove","text","window.bestMove");
                modFunction("information","text","`${context.user.username} (${context.user.rating} Elo)`");
            }
 
 
            var board = document.querySelector('.board');
            var drawingBoard = document.createElement("canvas");
            var drawingBoardCTX = drawingBoard.getContext("2d");
 
 
            drawingBoard.width=board.clientWidth;
            drawingBoard.height=board.clientHeight;
            board.appendChild(drawingBoard);
 
            function clear(){
                drawingBoardCTX.clearRect(0,0,board.clientWidth,board.clientHeight)
            }
 
            async function executeAction(bestmove){
 
                if(board.game.getPlayingAs()==2){
                    drawingBoard.style.rotate="180deg"
                }else{
                    drawingBoard.style.rotate="0deg"
                }
                clear()
 
                console.log(bestmove)
                bestmove = bestmove.split(" ")[1]
 
                var tileSize = (drawingBoard.clientWidth/8)
                var letters = ["a","b","c","d","e","f","g","h"];
                var position = "%s".replaceAll(' ','');
                var x1 = letters.indexOf(bestmove[0])+1;
                var y1 = 9-Number(bestmove[1]);
                var x2 = letters.indexOf(bestmove[2])+1;
                var y2 = 9-Number(bestmove[3]);
 
                drawingBoardCTX.beginPath();
                drawingBoardCTX.moveTo(x1*tileSize-(tileSize/2),y1*tileSize-(tileSize/2));
                drawingBoardCTX.lineTo(x2*tileSize-(tileSize/2),y2*tileSize-(tileSize/2));
                drawingBoardCTX.lineWidth=tileSize/5;
                drawingBoardCTX.strokeStyle="#00ff0050";
                drawingBoardCTX.stroke();
 
 
                if(window.autoMove){
                    setTimeout(function(){
                        var legalMoves = game.getLegalMoves()
                        for(var i=0;i<legalMoves.length;i++){
                            if(legalMoves[i].from==bestmove.split("")[0]+bestmove.split("")[1]){
                                if(legalMoves[i].to==bestmove.split("")[2]+bestmove.split("")[3]){
                                    var move = legalMoves[i]
                                    game.move({
                                        ...move,
                                        promotion: 'false',
                                        animate: false,
                                        userGenerated: true
                                    });
                                }
                            }
                        }
                    },5000-window.autoMoveSpeed*500)
                }
            }
 
            var updateBotRunning = false;
 
            async function updateBot() {
                var updateBotInterval = setTimeout(async function(){
                    updateTexts();
                    if(!window.hackEnabled) {
                        clear();
                        updateBotRunning = false;
                        clearInterval(updateBotInterval)
                        return;
                    }
                    updateBotRunning = true;
                    var board = document.querySelector('.board');
                    var FEN = board.game.getFEN();
                    var depth = window.botPower;
                    let response = await fetch(`https://stockfish.online/api/s/v2.php?fen=${encodeURIComponent(FEN)}&depth=${depth}`);
                    let data = await response.json();
                    window.bestMove = data.bestmove;
                    window.currentEvaluation = data.evaluation;
                    var bestmove = data.bestmove;
                    executeAction(bestmove);
                    requestAnimationFrame(()=>{
                        if (updateBotRunning) updateBot();
                    });
                },1100-(window.updateSpeed*100))
                }
            document.addEventListener("change", updateBot);
            if(await getStockFish(key)){updateBot();}
 
 
            var draggingElement = document.getElementById("modTitle")
            dragElement(itemWrap,draggingElement);
 
            function dragElement(elmnt,elmnt2) {
                var pos1 = 0, pos2 = 0, pos3 = 0, pos4 = 0;
                elmnt2.onmousedown = dragMouseDown;
                function dragMouseDown(e) {
                    e = e || window.event;
                    e.preventDefault();
                    pos3 = e.clientX;
                    pos4 = e.clientY;
                    document.onmouseup = closeDragElement;
                    document.onmousemove = elementDrag;
                }
                function elementDrag(e) {
                    e = e || window.event;
                    e.preventDefault();
                    pos1 = pos3 - e.clientX;
                    pos2 = pos4 - e.clientY;
                    pos3 = e.clientX;
                    pos4 = e.clientY;
                    elmnt.style.top = (elmnt.offsetTop - pos2) + "px";
                    elmnt.style.left = (elmnt.offsetLeft - pos1) + "px";
                }
                function closeDragElement() {
                    document.onmouseup = null;
                    document.onmousemove = null;
                }
            }
 
            var menuHidden = 0
            document.addEventListener("keyup",(e)=>{
                if(e.key=="b"&&e.ctrlKey){
                    if(!menuHidden){menuWrap.style.display="none"}
                    else{menuWrap.style.display="grid"}
                    menuHidden^=1
                }
            })
        }
 
 
 
        var keyInput = document.getElementById("keyInput")
        var keyButton = document.getElementById("keyButton")
        var keyResponse = document.getElementById("keyResponse")
 
        keyButton.addEventListener("click",async function(){
            if(await getStockFish(keyInput.value)){
                keyMenuWrap.remove()
                await startStockfish(keyInput.value)
                localStorage.setItem("stockfishLoaded",keyInput.value)
            }else{keyResponse.innerHTML=atob('V3JvbmcgUGFzcyE=')}
        })
 
        if(localStorage.getItem("stockfishLoaded")!=null){
            if(await getStockFish(localStorage.getItem("stockfishLoaded"))){
                await startStockfish(localStorage.getItem("stockfishLoaded"))
                keyMenuWrap.remove()
            }
        }
 
        async function getStockFish(input) {
            const hashHex=[...new Uint8Array(await crypto.subtle.digest("SHA-256",new TextEncoder().encode(input)))]
            .map(b=>b.toString(16).padStart(2,'0')).join('');
            return hashHex==="719efeec314f905eb15a872ed9f4e869441c093fd445d75a96b35067096d31dc"
        }
    },3000)
})();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址