红豆饭种子自动认领

红豆饭自动认领种子,带美化UI

// ==UserScript==
// @name         红豆饭种子自动认领
// @namespace    http://tampermonkey.net/
// @version      1.0
// @description  红豆饭自动认领种子,带美化UI
// @author       bitptpt
// @match        *://*/userdetails.php*
// @grant        none
// @run-at       document-end
// @license MIT
// ==/UserScript==

(function() {
    'use strict';

    // 创建优化后的控制面板
    function createControlPanel() {
        // 创建样式
        const style = document.createElement('style');
        style.textContent = `
            .auto-claim-panel {
                position: fixed;
                top: 20px;
                right: 20px;
                z-index: 99999;
                background: linear-gradient(135deg, #2b5876, #4e4376);
                border-radius: 10px;
                box-shadow: 0 8px 20px rgba(0,0,0,0.2);
                color: white;
                font-family: Arial, sans-serif;
                padding: 15px;
                width: 220px;
                transition: all 0.3s ease;
                opacity: 0.95;
            }
            .auto-claim-panel:hover {
                opacity: 1;
                box-shadow: 0 10px 25px rgba(0,0,0,0.3);
            }
            .auto-claim-title {
                font-size: 16px;
                font-weight: bold;
                margin-bottom: 15px;
                text-align: center;
                padding-bottom: 10px;
                border-bottom: 1px solid rgba(255,255,255,0.2);
            }
            .auto-claim-buttons {
                display: flex;
                justify-content: space-between;
                margin-bottom: 15px;
            }
            .auto-claim-btn {
                padding: 8px 15px;
                border: none;
                border-radius: 5px;
                cursor: pointer;
                font-weight: bold;
                transition: all 0.2s;
                width: 45%;
                box-shadow: 0 3px 6px rgba(0,0,0,0.1);
            }
            .auto-claim-btn:hover {
                transform: translateY(-2px);
                box-shadow: 0 5px 10px rgba(0,0,0,0.15);
            }
            .auto-claim-start {
                background-color: #4CAF50;
                color: white;
            }
            .auto-claim-start:disabled {
                background-color: #888;
                cursor: not-allowed;
                transform: none;
                box-shadow: none;
            }
            .auto-claim-stop {
                background-color: #f44336;
                color: white;
            }
            .auto-claim-status {
                background-color: rgba(0,0,0,0.2);
                padding: 10px;
                border-radius: 5px;
                margin-bottom: 10px;
                min-height: 20px;
                font-size: 14px;
            }
            .auto-claim-stats {
                display: flex;
                justify-content: space-between;
                margin-top: 15px;
                padding-top: 10px;
                border-top: 1px solid rgba(255,255,255,0.2);
            }
            .auto-claim-stat {
                text-align: center;
                flex: 1;
            }
            .auto-claim-stat-value {
                font-size: 20px;
                font-weight: bold;
                margin-bottom: 5px;
            }
            .auto-claim-stat-label {
                font-size: 12px;
                opacity: 0.8;
            }
            .auto-claim-footer {
                font-size: 11px;
                text-align: center;
                margin-top: 15px;
                opacity: 0.7;
            }
            .auto-claim-progress {
                height: 6px;
                background-color: rgba(255,255,255,0.2);
                border-radius: 3px;
                margin: 10px 0;
                overflow: hidden;
            }
            .auto-claim-progress-bar {
                height: 100%;
                background-color: #4CAF50;
                width: 0%;
                transition: width 0.3s ease;
            }
            .blink-status {
                animation: blink 1s linear infinite;
            }
            @keyframes blink {
                0% { opacity: 1; }
                50% { opacity: 0.5; }
                100% { opacity: 1; }
            }
        `;
        document.head.appendChild(style);

        // 创建面板
        const panel = document.createElement('div');
        panel.className = 'auto-claim-panel';

        panel.innerHTML = `
            <div class="auto-claim-title">自动认领工具</div>
            <div class="auto-claim-buttons">
                <button class="auto-claim-btn auto-claim-start">开始认领</button>
                <button class="auto-claim-btn auto-claim-stop">停止</button>
            </div>
            <div class="auto-claim-status">状态: 准备就绪</div>
            <div class="auto-claim-progress">
                <div class="auto-claim-progress-bar"></div>
            </div>
            <div class="auto-claim-stats">
                <div class="auto-claim-stat">
                    <div class="auto-claim-stat-value" id="claimed-count">0</div>
                    <div class="auto-claim-stat-label">已认领</div>
                </div>
                <div class="auto-claim-stat">
                    <div class="auto-claim-stat-value" id="remaining-count">0</div>
                    <div class="auto-claim-stat-label">待认领</div>
                </div>
            </div>
            <div class="auto-claim-footer">© 自动化认领工具 v1.2</div>
        `;

        document.body.appendChild(panel);

        return {
            panel,
            startButton: panel.querySelector('.auto-claim-start'),
            stopButton: panel.querySelector('.auto-claim-stop'),
            statusText: panel.querySelector('.auto-claim-status'),
            claimedCount: panel.querySelector('#claimed-count'),
            remainingCount: panel.querySelector('#remaining-count'),
            progressBar: panel.querySelector('.auto-claim-progress-bar')
        };
    }

    // 主要功能函数
    function initAutoClaimButtons() {
        let intervalId = null;
        let waitTime = 1000; // 初始等待时间1秒
        let currentState = 'idle'; // 状态:idle, claiming, waitingForPopup, confirmingPopup
        let running = false;
        let claimedCount = 0;
        let processingAnimation = null;

        const {
            startButton,
            stopButton,
            statusText,
            claimedCount: claimedCountElement,
            remainingCount: remainingCountElement,
            progressBar
        } = createControlPanel();

        // 更新认领统计
        function updateStats() {
            // 计算剩余可认领数量
            const remainingButtons = document.querySelectorAll('button[data-action="addClaim"][style*="display: flex"]').length;
            remainingCountElement.textContent = remainingButtons;

            // 更新进度条(如果有可认领按钮)
            const totalButtons = claimedCount + remainingButtons;
            if (totalButtons > 0) {
                const progress = (claimedCount / totalButtons) * 100;
                progressBar.style.width = `${progress}%`;
            }
        }

        // 点击认领按钮
        function clickClaimButton() {
            // 更新统计
            updateStats();

            // 寻找所有显示的认领按钮
            const claimButtons = document.querySelectorAll('button[data-action="addClaim"][style*="display: flex"]');

            if (claimButtons.length > 0) {
                currentState = 'claiming';
                statusText.textContent = `状态: 正在点击认领按钮...`;
                statusText.classList.add('blink-status');

                // 点击第一个可见的认领按钮
                claimButtons[0].click();

                // 等待确认弹窗出现
                currentState = 'waitingForPopup';
                waitTime = 500; // 短暂等待确认弹窗
            } else {
                statusText.textContent = `状态: 未找到认领按钮`;
                statusText.classList.remove('blink-status');
                waitTime = 1000; // 重置等待时间
            }
        }

        // 处理确认弹窗
        function handleConfirmPopup() {
            // 查找确认弹窗中的OK按钮
            const confirmButtons = document.querySelectorAll('.layui-layer-btn .layui-layer-btn0');

            if (confirmButtons.length > 0) {
                statusText.textContent = '状态: 确认认领中...';
                confirmButtons[0].click();
                claimedCount++;
                claimedCountElement.textContent = claimedCount;

                // 更新统计
                updateStats();

                // 确认完成后,设置状态为idle,短暂等待后继续寻找下一个认领按钮
                currentState = 'idle';
                waitTime = 1000; // 确认后等待1秒再继续
            } else {
                // 如果没找到确认按钮,可能弹窗未加载或已消失
                if (currentState === 'waitingForPopup') {
                    // 继续等待弹窗出现
                    waitTime = 300; // 短暂等待
                    statusText.textContent = '状态: 等待确认框出现...';
                } else {
                    // 重置状态
                    currentState = 'idle';
                    waitTime = 1000;
                }
            }
        }

        // 主循环函数
        function mainLoop() {
            if (!running) return;

            switch (currentState) {
                case 'idle':
                    clickClaimButton();
                    break;
                case 'waitingForPopup':
                case 'claiming':
                    handleConfirmPopup();
                    break;
                default:
                    currentState = 'idle';
            }

            // 设置下一次执行
            clearTimeout(intervalId);
            intervalId = setTimeout(mainLoop, waitTime);
        }

        // 开始自动点击
        startButton.addEventListener('click', function() {
            if (running) return;

            running = true;
            currentState = 'idle';
            statusText.textContent = '状态: 开始自动认领';
            startButton.disabled = true;

            // 更新初始统计
            updateStats();

            // 开始主循环
            mainLoop();

            // 定时更新统计信息
            processingAnimation = setInterval(updateStats, 2000);
        });

        // 停止自动点击
        stopButton.addEventListener('click', function() {
            if (intervalId) {
                clearTimeout(intervalId);
                intervalId = null;
            }

            if (processingAnimation) {
                clearInterval(processingAnimation);
                processingAnimation = null;
            }

            running = false;
            currentState = 'idle';
            startButton.disabled = false;
            statusText.textContent = '状态: 已停止';
            statusText.classList.remove('blink-status');
        });

        // 初始统计
        updateStats();
    }

    // 初始化
    if (window.location.href.includes('details.php') || window.location.href.includes('userdetails.php')) {
        // 确保页面完全加载后再初始化
        window.addEventListener('load', function() {
            setTimeout(initAutoClaimButtons, 500);
        });
    }
})();

QingJ © 2025

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