自动签到助手

自动签到 ACG论坛 + 嗶咔漫畫 + MT论坛 + 远景论坛等

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name         自动签到助手
// @version      0.5
// @description  自动签到 ACG论坛 + 嗶咔漫畫 + MT论坛 + 远景论坛等
// @author       Crayon
// @match        *://acgfun.pro/*
// @match        *://manhuabika.com/puser/*
// @match        *://*.binmt.cc/*
// @match        *://*.pcbeta.com/*
// @match        *://fishc.com.cn/*
// @match        *://bbs.kafan.cn/*
// @match        *://*.52pojie.cn/*
// @match        *://*.55188.com/*
// @match        *://*.anywlan.com/*
// @grant        none
// @license      MIT
// @run-at       document-idle
// @namespace https://greasyfork.org/users/1249027
// ==/UserScript==

(function () {
    'use strict';
    // ---------------- 共用状态提示 ----------------
    function createSimpleStatus(site) {
        const statusDiv = document.createElement('div');
        statusDiv.id = 'sign-status';
        statusDiv.style.cssText = `
            position: fixed;
            top: 20px;
            right: 20px;
            padding: 12px 20px;
            border-radius: 8px;
            background: rgba(0, 0, 0, 0.85);
            color: white;
            font-family: Arial, sans-serif;
            font-size: 14px;
            z-index: 9999;
            box-shadow: 0 3px 10px rgba(0,0,0,0.3);
            display: flex;
            align-items: center;
            border-left: 4px solid #ffcc00;
        `;
        const statusText = document.createElement('div');
        statusText.id = 'status-text';
        statusText.innerText = `【${site}】签到助手启动中...`;
        statusText.style.fontWeight = 'bold';
        statusDiv.appendChild(statusText);
        document.body.appendChild(statusDiv);
    }
    function updateStatus(text, color = '#ffcc00') {
        const statusText = document.getElementById('status-text');
        const statusDiv = document.getElementById('sign-status');
        if (statusText) statusText.innerText = text;
        if (statusDiv) statusDiv.style.borderLeftColor = color;
    }

    // ---------------- ACG 签到 ----------------
    function acgSign() {
        const key = 'acg';
        const today = new Date().toDateString();
        const signed = localStorage.getItem(`${key}_signed`) === today;
        if (signed) return;

        createSimpleStatus('ACG');

        if (url.includes('plugin.php?id=k_misign:sign')) {
            const signButton = document.getElementById('JD_sign');
            if (signButton) {
                signButton.click();
                localStorage.setItem(`${key}_signed`, today);
                updateStatus('ACG 签到成功!即将刷新...', '#00ff9d');
                setTimeout(() => location.reload(), 2000);
            } else if (document.querySelector('.btnvisted')) {
                localStorage.setItem(`${key}_signed`, today);
                updateStatus('ACG 今日已签到 ✓', '#00ff9d');
            } else {
                updateStatus('ACG 未找到签到按钮 ❌', '#ff4d4d');
            }
        } else {
            window.location.href = 'https://acgfun.pro/plugin.php?id=k_misign:sign';
        }
    }

    // ---------------- 嗶咔漫畫 签到 ----------------
    function bikaSign() {
        createSimpleStatus('嗶咔');
    const today = new Date().toDateString();
    const signed = localStorage.getItem('bika_sign_date') === today;
    // 是否已经在签到页
    const isSignPage = location.href.includes('/puser/');
    if (!isSignPage) {
        // 如果不是签到页,跳转
        if (!signed) {
            updateStatus('嗶咔 跳转签到页面...', '#ffcc00');
            window.location.href = 'https://manhuabika.com/puser/?vflush=' + Date.now();
        }
        return;
    }
    // 是签到页,执行签到
    const punchButton = document.querySelector('button.my-punch-button');
    if (punchButton && punchButton.innerText.includes('打嗶咔')) {
        punchButton.click();
        localStorage.setItem('bika_sign_date', today);
        updateStatus('嗶咔 漫畫签到成功 ✓', '#00ff9d');
    } else {
        localStorage.setItem('bika_sign_date', today);
        updateStatus('嗶咔 今日已签到或按钮不存在', '#00ff9d');
        }
    }
    // ---------------- MT论坛 签到 ----------------
    function binmtSign() {
    const key = 'bbs_binmt_sign_date';
    const today = new Date().toDateString();
    const signed = localStorage.getItem(key) === today;

    if (location.href.includes("k_misign-sign.html")) {
        createSimpleStatus('MT论坛');
        setTimeout(() => {
            const btn = document.getElementById("JD_sign");
            if (btn) {
                btn.click();
                localStorage.setItem(key, today);
                updateStatus('MT论坛 签到成功 ✓', '#00ff9d');
                setTimeout(() => location.reload(), 2000);
            } else if (document.querySelector(".btnvisted")) {
                localStorage.setItem(key, today);
                updateStatus('MT论坛 今日已签到 ✓', '#00ff9d');
            } else {
                updateStatus('MT论坛 未找到按钮 ❌', '#ff4d4d');
            }
        }, 1000);
    } else if (!signed) {
        location.href = "https://bbs.binmt.cc/k_misign-sign.html";
        }
    }
    // ======= 远景论坛签到 =======
    function handlePcbeta() {
    const key = 'pcbeta';
    const today = new Date().toDateString();
    const signed = localStorage.getItem(`${key}_signed`) === today;
    const taskURL = "/home.php?mod=task&do=apply&id=149";
    if (location.href.includes(taskURL)) {
        createSimpleStatus('远景论坛');
        setTimeout(() => {
            const html = document.body.innerHTML;
            if (html.includes('任务已成功完成')) {
                localStorage.setItem(`${key}_signed`, today);
                updateStatus('远景论坛 签到完成 ✓', '#00ff9d');
            } else if (html.includes('您已申请过此任务')) {
                localStorage.setItem(`${key}_signed`, today);
                updateStatus('远景论坛 今日已签到 ✓', '#00ff9d');
            } else {
                updateStatus('远景论坛 签到失败或任务不存在 ❌', '#ff4d4d');
            }
        }, 1000);
    } else if (!signed) {
        location.href = taskURL;
        }
    }
    // ======= 鱼C论坛签到 =======
    function fishcSign() {
        createSimpleStatus('鱼C论坛');
    const key = 'fishc';
    const today = new Date().toDateString();
    if (localStorage.getItem(`${key}_signed`) === today) return;
    if (location.href.includes('plugin.php?id=k_misign:sign')) {
        // 在签到页面
        const btn = document.querySelector('#JD_sign');
        if (btn) {
            btn.click();
            console.log('签到成功');
            updateStatus('鱼C论坛 签到完成 ✓', '#00ff9d');
        } else if (document.querySelector('.btnvisted')) {
            console.log('今日已签到');
            updateStatus('鱼C论坛 今日已签到 ✓', '#00ff9d');
        }
        localStorage.setItem(`${key}_signed`, today);
    } else {
        // 不是签到页面,跳转
        window.location.href = "https://fishc.com.cn/plugin.php?id=k_misign:sign";
    }
}
    // ======= 52pojie论坛签到 =======
    function sign52pojie() {
        const key = '52pojie';
        const today = new Date().toDateString();
        const signed = localStorage.getItem(`${key}_signed`) === today;
        if (signed) return;

        createSimpleStatus('52pojie');

        const qdImg = document.querySelector("img[src$='qds.png']");
        const applyLink = document.querySelector('a[href^="home.php?mod=task&do=apply&id=2"]');

        if (qdImg && applyLink) {
            localStorage.setItem(`${key}_signed`, today);
            applyLink.click();  // 自动点击签到任务链接
            updateStatus('52pojie 签到中...', '#00ff9d');
        } else {
            updateStatus('52pojie 今日已签到或无按钮', '#00ff9d');
        }
    }
    // ======= 理想论坛签到 =======
    function sign55188() {
        const key = '55188';
        const today = new Date().toDateString();
        const signed = localStorage.getItem(`${key}_signed`) === today;
        const signURL = 'https://www.55188.com/plugin.php?id=sign';
        // 如果今天已签到则退出
        if (signed) return;
        // 如果当前页面不是签到页,自动跳转
        if (!location.href.includes('plugin.php?id=sign')) {
            window.location.href = signURL;
            return;
        }
        createSimpleStatus('55188');
        const signBtn = document.getElementById('addsign');

        if (signBtn) {
            localStorage.setItem(`${key}_signed`, today);
            updateStatus('55188 签到中...', '#00ff9d');
            location.href = 'plugin.php?id=sign&mod=add&jump=1'; // 跳转进行签到
        } else {
            updateStatus('55188 今日已签到或按钮不存在', '#00ff9d');
        }
    }
    // ======= 卡饭论坛签到 =======
    function signKafan() {
        const key = 'kafan';
        const today = new Date().toDateString();
        if (localStorage.getItem(`${key}_signed`) === today) return;

        createSimpleStatus('卡饭论坛');

        const imgs = Array.from(document.querySelectorAll("img"));
        const dkImg = imgs.find(img => img.src.includes('dsu_amupper/images/dk.png'));
        const wbImg = imgs.find(img => img.src.includes('dsu_amupper/images/wb.png'));

        if (dkImg && wbImg && wbImg.closest('a')?.style.display === 'none') {
            const dkLink = dkImg.closest('a');
            if (dkLink) {
                dkLink.click();
                localStorage.setItem(`${key}_signed`, today);
                updateStatus('卡饭论坛 签到中...', '#00ff9d');
            }
        } else {
            updateStatus('卡饭论坛 今日已签到或按钮不可见', '#00ff9d');
        }
    }
    // ======= AnyWlan签到 =======
    function signAnyWlan() {
        const key = 'anywlan';
        const today = new Date().toDateString();
        const signed = localStorage.getItem(`${key}_signed`) === today;
        if (signed) return;

        // 检查是否未登录
        if (document.querySelector('a[href^="member.php?mod=logging&action=login"]')) {
            console.log('AnyWlan 未登录,跳过签到');
            return;
        }

        createSimpleStatus('AnyWlan');

        // 当前是签到页
        if (url.includes('k_misign:sign')) {
            const signBtn = document.getElementById('JD_sign');
            if (signBtn) {
                signBtn.click();
                localStorage.setItem(`${key}_signed`, today);
                updateStatus('AnyWlan 签到成功 ✓', '#00ff9d');
                setTimeout(() => location.reload(), 1500);
            } else if (document.querySelector('.btnvisted')) {
                localStorage.setItem(`${key}_signed`, today);
                updateStatus('AnyWlan 今日已签到 ✓', '#00ff9d');
            } else {
                updateStatus('AnyWlan 未找到签到按钮 ❌', '#ff4d4d');
            }
        } else {
            // 自动跳转到签到页面
            window.location.href = "https://www.anywlan.com/plugin.php?id=k_misign:sign";
        }
    }

    const url = location.href;

    if (url.includes('acgfun.pro')) {
        acgSign();
    } else if (url.includes('manhuabika.com')) {
        bikaSign();
    } else if (url.includes('bbs.binmt.cc')) {
        binmtSign();
    } else if (url.includes('bbs.pcbeta.com') || url.includes('i.pcbeta.com')) {
        handlePcbeta();
    } else if (url.includes('fishc.com.cn')){
        fishcSign()
    } else if (url.includes('52pojie.cn')) {
        sign52pojie();
    } else if (url.includes('55188.com')) {
        sign55188();
    } else if (url.includes('bbs.kafan.cn')) {
        signKafan();
    } else if (url.includes('www.anywlan.com')) {
        signAnyWlan();
    }
})();