Chess.com Assistant Mazurka1

Advanced chess assistant with undetectable features

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。

您需要先安装用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         Chess.com  Assistant Mazurka1
// @namespace    SecureChess
// @version      2.0.0
// @description  Advanced chess assistant with undetectable features
// @author       SecureChess
// @match        https://www.chess.com/play/*
// @match        https://www.chess.com/game/*
// @match        https://www.chess.com/puzzles/*
// @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://code.jquery.com/jquery-3.6.0.min.js
// @run-at       document-start
// @antifeature  none
// ==/UserScript==

(function() {
    'use strict';

    // Configuration
    const config = {
        version: '2.0.0',
        defaultDepth: 11,      // Default engine depth (1-25)
        minDelay: 0.5,         // Minimum delay (seconds) for auto-run
        maxDelay: 2.0,         // Maximum delay (seconds) for auto-run
        stealthMode: false,     // Disables highlights/animations
        autoMove: false,       // Auto-execute best move
        autoRun: false          // Auto-run engine on turn
    };

    // State
    let engine = null;
    let isThinking = false;
    let canRun = true;
    let currentDepth = config.defaultDepth;
    let board = null;

    // Initialize Stockfish engine
    function initEngine() {
        if (!engine) {
            const stockfishURL = URL.createObjectURL(
                new Blob([GM_getResourceText('stockfish.js')], { type: 'application/javascript' })
            );
            engine = new Worker(stockfishURL);
            engine.onmessage = handleEngineResponse;
            engine.postMessage('ucinewgame');
            console.log('[Pentest] Engine initialized');
        }
    }

    // Handle engine responses (best moves)
    function handleEngineResponse(e) {
        if (e.data.includes('bestmove')) {
            const bestMove = e.data.split(' ')[1];
            if (bestMove && bestMove !== '(none)') {
                highlightMove(bestMove);
                if (config.autoMove) executeMove(bestMove);
            }
            isThinking = false;
        }
    }

    // Highlight suggested move (if stealth mode is off)
    function highlightMove(move) {
        if (config.stealthMode) return;

        const from = move.substring(0, 2);
        const to = move.substring(2, 4);
        const boardElement = $(board.nodeName);

        boardElement.prepend(`
            <div class="highlight square-${to}" style="background-color: rgba(235, 97, 80, 0.7);"></div>
            <div class="highlight square-${from}" style="background-color: rgba(235, 97, 80, 0.7);"></div>
        `);

        setTimeout(() => boardElement.find('.highlight').remove(), 1800);
    }

    // Execute the move on the board
    function executeMove(move) {
        const legalMoves = board.game.getLegalMoves();
        for (const legalMove of legalMoves) {
            if (legalMove.from === move.substring(0, 2) && legalMove.to === move.substring(2, 4)) {
                board.game.move({
                    ...legalMove,
                    promotion: false,
                    animate: false,
                    userGenerated: true
                });
                break;
            }
        }
    }

    // Run engine with current depth
    function runEngine(depth) {
        if (!isThinking && board?.game) {
            const fen = board.game.getFEN();
            engine.postMessage(`position fen ${fen}`);
            engine.postMessage(`go depth ${depth}`);
            isThinking = true;
            currentDepth = depth;
        }
    }

    // Auto-run logic (with randomized delays)
    function autoRun() {
        if (config.autoRun && canRun && !isThinking && board?.game.getTurn() === board.game.getPlayingAs()) {
            canRun = false;
            const delay = (Math.random() * (config.maxDelay - config.minDelay) + config.minDelay) * 1000;
            setTimeout(() => {
                runEngine(currentDepth);
                canRun = true;
            }, delay);
        }
    }

    // Initialize the UI panel
    function initUI() {
        const ui = `
            <div id="chessAssistantUI" style="
                background: #2d2d2d;
                color: #fff;
                padding: 12px;
                border-radius: 8px;
                margin: 10px;
                font-family: Arial, sans-serif;
                box-shadow: 0 2px 10px rgba(0,0,0,0.5);
                width: 220px;
                position: fixed;
                right: 10px;
                top: 10px;
                z-index: 9999;
                display: flex;
                flex-direction: column;
                justify-content: space-between;
                height: auto;
            ">
                <div>
                    <h3 style="margin: 0 0 10px 0; font-size: 16px;">♔ Chess Assistant</h3>
                    <div style="margin-bottom: 10px;">
                        <label style="display: block; margin-bottom: 5px;">Depth: <span id="depthValue">${currentDepth}</span></label>
                        <input type="range" id="depthSlider" min="1" max="25" value="${currentDepth}" style="width: 100%;">
                    </div>
                    <div style="margin-bottom: 10px;">
                        <input type="checkbox" id="autoRunCheckbox" ${config.autoRun ? 'checked' : ''}>
                        <label for="autoRunCheckbox">Auto Run</label>
                    </div>
                    <div style="margin-bottom: 10px;">
                        <input type="checkbox" id="autoMoveCheckbox" ${config.autoMove ? 'checked' : ''}>
                        <label for="autoMoveCheckbox">Auto Move</label>
                    </div>
                    <div style="margin-bottom: 15px;">
                        <input type="checkbox" id="stealthModeCheckbox" ${config.stealthMode ? 'checked' : ''}>
                        <label for="stealthModeCheckbox">Stealth Mode</label>
                    </div>
                    <button id="runEngineButton" style="
                        width: 100%;
                        padding: 8px;
                        background: #4CAF50;
                        color: white;
                        border: none;
                        border-radius: 4px;
                        cursor: pointer;
                    ">Run Engine</button>
                </div>
                <div style="margin-top: 10px; font-size: 11px; color: #888; text-align: center; user-select: none;">
                    Made by Mazurka
                </div>
            </div>
        `;

        $('body').append(ui);

        // Event listeners
        $('#depthSlider').on('input', function() {
            currentDepth = parseInt($(this).val());
            $('#depthValue').text(currentDepth);
        });

        $('#autoRunCheckbox').change(() => config.autoRun = $('#autoRunCheckbox').is(':checked'));
        $('#autoMoveCheckbox').change(() => config.autoMove = $('#autoMoveCheckbox').is(':checked'));
        $('#stealthModeCheckbox').change(() => config.stealthMode = $('#stealthModeCheckbox').is(':checked'));
        $('#runEngineButton').click(() => runEngine(currentDepth));
    }

    // Main loop (checks for board and runs auto-logic)
    function mainLoop() {
        if (!board) {
            board = $('chess-board')[0] || $('wc-chess-board')[0];
            if (board) {
                initEngine();
                initUI();
            }
        }
        autoRun();
        setTimeout(mainLoop, 100);
    }

    // Start the script
    window.addEventListener('load', mainLoop);
})();