Auto Reload Claimer + Full Panel

Stake reload auto claimer (never stuck: guaranteed claim detection + error retry + full panel with reset + last claim date & time)

当前为 2025-09-26 提交的版本,查看 最新版本

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

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

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

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

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name         Auto Reload Claimer + Full Panel
// @version      3.4
// @description  Stake reload auto claimer (never stuck: guaranteed claim detection + error retry + full panel with reset + last claim date & time)
// @author       natah3
// @match        https://stake.com/*
// @match        https://stake.games/*
// @match        https://stake.bet/*
// @match        https://stake.link/*
// @match        https://stake1069.com/*
// @run-at       document-idle
// @namespace    https://greasyfork.org/users/1514052
// ==/UserScript==

(function() {
    'use strict';

    const TARGET_URL = 'https://' + window.location.hostname + '/?tab=rewards&modal=claimReload';
    const CLAIM_WAIT_TIME = 610; // 10 min + 10s buffer
    const ERROR_RETRY_WAIT_TIME = 10 * 1000; // 10 seconds
    const BUTTON_RETRY_INTERVAL = 5000; // retry every 5 seconds

    let claimCounter = parseInt(localStorage.getItem("claimCounter") || "0", 10);
    let lastClaimTime = localStorage.getItem("lastClaimTime") || "None";
    let countdownInterval;
    let buttonRetryInterval;

    // Format date as DD/MM/YYYY HH:mm:ss
    function formatDate(d) {
        const day = String(d.getDate()).padStart(2, "0");
        const month = String(d.getMonth() + 1).padStart(2, "0");
        const year = d.getFullYear();
        const hours = String(d.getHours()).padStart(2, "0");
        const minutes = String(d.getMinutes()).padStart(2, "0");
        const seconds = String(d.getSeconds()).padStart(2, "0");
        return `${day}/${month}/${year} ${hours}:${minutes}:${seconds}`;
    }

    // Create panel
    function createPanel() {
        const panel = document.createElement("div");
        panel.id = "auto-reload-claimer-panel";
        panel.style.position = "fixed";
        panel.style.bottom = "20px";
        panel.style.right = "20px";
        panel.style.backgroundColor = "rgba(0,0,0,0.75)";
        panel.style.color = "#fff";
        panel.style.padding = "12px 15px";
        panel.style.borderRadius = "10px";
        panel.style.zIndex = "9999";
        panel.style.fontSize = "14px";
        panel.style.fontFamily = "monospace";
        panel.innerHTML = `
            <div style="margin-bottom:6px"><b>Auto Reload Claimer</b></div>
            <div>Claims: <span id="arc-counter">${claimCounter}</span></div>
            <div>Last Claim: <span id="arc-last">${lastClaimTime}</span></div>
            <div>Next Reload in: <span id="arc-timer">--:--</span></div>
            <button id="arc-reset" style="margin-top:8px;padding:2px 6px;font-size:12px;background:#c33;color:#fff;border:none;border-radius:4px;cursor:pointer;">Reset</button>
        `;
        document.body.appendChild(panel);
        document.getElementById("arc-reset").addEventListener("click", resetStats);
    }

    // Update panel values
    function updatePanel() {
        document.getElementById("arc-counter").textContent = claimCounter;
        document.getElementById("arc-last").textContent = lastClaimTime;
    }

    // Start countdown
    function startCountdown() {
        let timeLeft = CLAIM_WAIT_TIME;
        const timerDisplay = document.getElementById("arc-timer");

        clearInterval(countdownInterval);
        countdownInterval = setInterval(() => {
            const minutes = Math.floor(timeLeft / 60);
            const seconds = timeLeft % 60;
            timerDisplay.textContent = `${String(minutes).padStart(2,"0")}:${String(seconds).padStart(2,"0")}`;

            if (timeLeft <= 0) {
                clearInterval(countdownInterval);
                reloadPage();
            }
            timeLeft--;
        }, 1000);
    }

    // Init
    function init() {
        createPanel();
        if (window.location.href !== TARGET_URL) {
            window.location.href = TARGET_URL;
        } else {
            tryClaim();
        }
    }

    // Retry until claim button clicked
    function tryClaim() {
        clearInterval(buttonRetryInterval);
        buttonRetryInterval = setInterval(() => {
            const claimButton = document.querySelector('button[data-testid="claim-reload"]');
            const errorModal = Array.from(document.querySelectorAll("h2"))
                .find(el => el.textContent.includes("Reload Unavailable"));

            if (claimButton) {
                claimButton.click();
                clearInterval(buttonRetryInterval);
                onClaimSuccess();
            }
            else if (errorModal) {
                clearInterval(buttonRetryInterval);
                setTimeout(reloadPage, ERROR_RETRY_WAIT_TIME);
            }
            // else → keep retrying
        }, BUTTON_RETRY_INTERVAL);
    }

    // After successful claim
    function onClaimSuccess() {
        claimCounter++;
        lastClaimTime = formatDate(new Date());
        localStorage.setItem("claimCounter", claimCounter);
        localStorage.setItem("lastClaimTime", lastClaimTime);
        updatePanel();
        startCountdown();
    }

    // Reload page
    function reloadPage() {
        window.location.reload();
    }

    // Reset stats
    function resetStats() {
        claimCounter = 0;
        lastClaimTime = "None";
        localStorage.setItem("claimCounter", claimCounter);
        localStorage.setItem("lastClaimTime", lastClaimTime);
        updatePanel();
    }

    window.addEventListener("load", init);
})();