您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
领取现金红包,无套路,辅助脚本,为活动服务
// ==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); } })();