幻域—自助领取现金红包

领取现金红包,无套路,辅助脚本,为活动服务

// ==UserScript==
// @name         幻域—自助领取现金红包
// @namespace    http://tampermonkey.net/
// @version      0.6
// @description  领取现金红包,无套路,辅助脚本,为活动服务
// @author       您
// @match        *://*/*
// @grant        GM_setValue
// @grant        GM_getValue
// @grant        GM_notification
// @grant        GM_addStyle
// @grant        GM_xmlhttpRequest
// @grant        GM_openInTab
// ==/UserScript==

(function() {
    'use strict';

    const CONFIG = {
        TARGET_URL: "https://hyzy.0189700.xyz/forum.php?mod=viewthread&tid=7232",
        REPLACE_URL: "https://link3.cc/rwcc",
        BUTTON_STYLE: {
            position: "fixed",
            bottom: "20px",
            right: "20px",
            zIndex: "9999",
            padding: "10px 15px",
            backgroundColor: "#4CAF50",
            color: "white",
            border: "none",
            borderRadius: "5px",
            cursor: "pointer",
            fontSize: "14px",
            boxShadow: "0 2px 5px rgba(0,0,0,0.3)"
        },
        CHECK_INTERVAL: 60000
    };

    GM_addStyle(`
        .manual-check-btn {
            transition: all 0.2s ease;
        }
        .manual-check-btn:hover {
            background-color: #45a049 !important;
        }
        .manual-check-btn:active {
            transform: scale(0.98);
        }
        .manual-check-btn.loading {
            background-color: #2196F3 !important;
        }
        .manual-check-btn.error {
            background-color: #f44336 !important;
        }
    `);

    function isTodayProcessed() {
        const today = new Date().toDateString();
        return GM_getValue('lastProcessDate') === today;
    }

    function markTodayProcessed() {
        const today = new Date().toDateString();
        GM_setValue('lastProcessDate', today);
    }

    function parsePostContent(html) {
        try {
            const parser = new DOMParser();
            const doc = parser.parseFromString(html, 'text/html');
            const posts = doc.querySelectorAll('.t_f');
            return posts.length > 0 ? posts[posts.length-1].textContent.trim() : null;
        } catch (e) {
            console.error("出错了(ノ´д`)别找我,我也不会处理呢:", e);
            return null;
        }
    }

    async function fetchPostContent() {
        return new Promise((resolve, reject) => {
            GM_xmlhttpRequest({
                method: "GET",
                url: CONFIG.TARGET_URL,
                timeout: 10000,
                onload: function(response) {
                    if (response.status === 200) {
                        const content = parsePostContent(response.responseText);
                        content ? resolve(content) : reject(new Error("没找到"));
                    } else {
                        reject(new Error(`HTTP错误: ${response.status}`));
                    }
                },
                onerror: function(error) {
                    reject(new Error(`请求失败,呃,哈哈哈: ${error.statusText}`));
                },
                ontimeout: function() {
                    reject(new Error("请求超时,试试挂梯子"));
                }
            });
        });
    }

    function openTargetLink() {
        try {
            // 方法1: 使用GM_openInTab(推荐)
            if (typeof GM_openInTab === 'function') {
                GM_openInTab(CONFIG.REPLACE_URL, { active: true });
                return true;
            }
            
            // 方法2: 使用window.open
            const newWindow = window.open(CONFIG.REPLACE_URL, '_blank');
            if (!newWindow || newWindow.closed) {
                throw new Error("弹出窗口被阻止");
            }
            return true;
            
        } catch (e) {
            console.error("打开链接失败:", e);
            GM_notification({
                text: `无法自动打开链接,请手动访问: ${CONFIG.REPLACE_URL}`,
                title: "论坛回复检测 - 操作需要",
                timeout: 8000
            });
            return false;
        }
    }

    async function checkReply(isManual = false) {
        const btn = document.querySelector('.manual-check-btn');
        if (btn) {
            btn.classList.add('loading');
            btn.textContent = '检测中...';
        }

        try {
            if (!isManual && isTodayProcessed()) {
                console.log("今日已检测过");
                return;
            }

            const lastReply = await fetchPostContent();
            if (!lastReply) throw new Error("未获取到有效回复");

            console.log("检测到回复内容:", lastReply);
            
            if (lastReply === "1") {
                if (!openTargetLink()) {
                    throw new Error("链接打开失败");
                }
                GM_notification({
                    text: "已执行1的操作并打开链接",
                    title: "检测结果",
                    timeout: 5000
                });
            } else {
                GM_notification({
                    text: `当前回复内容: ${lastReply}`,
                    title: "检测结果",
                    timeout: 5000
                });
            }

            if (!isManual) markTodayProcessed();
            
        } catch (error) {
            console.error("检测出错:", error);
            GM_notification({
                text: `错误: ${error.message}`,
                title: "检测失败",
                timeout: 6000,
                highlight: true
            });
            if (btn) btn.classList.add('error');
        } finally {
            if (btn) {
                btn.classList.remove('loading', 'error');
                btn.textContent = '检测是否有红包';
            }
        }
    }

    function createManualButton() {
        if (document.querySelector('.manual-check-btn')) return;
        
        const btn = document.createElement('button');
        btn.className = 'manual-check-btn';
        btn.textContent = '检测红包';
        Object.assign(btn.style, CONFIG.BUTTON_STYLE);
        btn.addEventListener('click', () => checkReply(true));
        document.body.appendChild(btn);
    }

    function startAutoCheck() {
        setInterval(() => {
            const now = new Date();
            if (now.getHours() === 12 && now.getMinutes() === 0) {
                checkReply();
            }
        }, CONFIG.CHECK_INTERVAL);
    }

    function init() {
        createManualButton();
        startAutoCheck();
        console.log("脚本已初始化,目标URL:", CONFIG.TARGET_URL);
    }

    if (document.readyState === 'complete') {
        init();
    } else {
        window.addEventListener('load', init);
    }
})();