Greasy Fork

Greasy Fork is available in English.

魂+自动回贴刷新

自动回贴刷新

当前为 2024-11-29 提交的版本,查看 最新版本

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name         魂+自动回贴刷新
// @namespace    http://tampermonkey.net/
// @version      1.0.2
// @description  自动回贴刷新
// @author       zzx114
// @include      *://*-plus.net/read.php?tid*
// @grant        GM_addStyle
// @grant        GM_registerMenuCommand
// @grant        GM_setValue
// @grant        GM_getValue
// @icon         data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
// @license MIT
// ==/UserScript==

(function() {
    'use strict';

    // 精确检查 URL 是否符合要求,可改成 // @include     /^https:\/\/level-plus\.net\/read\.php\?tid[-=]\d+(-fpage-\d+)?\.html?$/

    if (!/^https:\/\/level-plus\.net\/read\.php\?tid[-=]\d+(-fpage-\d+)?(.html?)?$/.test(window.location.href)) {
        return; // 不满足条件则直接退出
    }

    // 添加样式
    GM_addStyle(`
        #settingsDiv {
            position: fixed;
            top: 50%;
            left: 50%;
            transform: translate(-50%, -50%);
            width: 300px;
            padding: 20px;
            background: white;
            border: 1px solid #000;
            box-shadow: 0 0 10px rgba(0,0,0,0.5);
            z-index: 1000;
            text-align: center;
        }
        #settingsDiv h3 {
            margin-top: 0;
        }
        #settingsDiv label {
            display: block;
            margin: 10px 0;
        }
        #settingsDiv button {
            margin-top: 20px;
        }
    `);

    // 注册设置菜单命令
    GM_registerMenuCommand("自动回贴刷新设置", showSettings);

    // 设置变量
    let settingsDiv = null;
    const useAlertKey = 'useAlert';
    const useConsoleKey = 'useConsole';
    const defaultUseAlert = true; // 默认使用 alert
    const defaultUseConsole = false; // 默认不使用 console.log

    // 显示设置界面
    function showSettings() {
        if (settingsDiv) {
            settingsDiv.style.display = settingsDiv.style.display === 'block' ? 'none' : 'block';
            return;
        }

        settingsDiv = document.createElement('div');
        settingsDiv.id = 'settingsDiv';
        settingsDiv.innerHTML = `
            <h3>提示消息设置</h3>
            <label><input type="checkbox" id="useAlertCheckbox"> 使用 alert 显示消息</label>
            <label><input type="checkbox" id="useConsoleCheckbox"> 使用 console.log 显示消息</label>
            <button id="saveSettings">保存设置</button>
        `;

        document.body.appendChild(settingsDiv);

        // 初始化复选框状态
        document.getElementById('useAlertCheckbox').checked = GM_getValue(useAlertKey, defaultUseAlert);
        document.getElementById('useConsoleCheckbox').checked = GM_getValue(useConsoleKey, defaultUseConsole);

        // 保存设置按钮事件
        document.getElementById('saveSettings').addEventListener('click', () => {
            GM_setValue(useAlertKey, document.getElementById('useAlertCheckbox').checked);
            GM_setValue(useConsoleKey, document.getElementById('useConsoleCheckbox').checked);
            settingsDiv.style.display = 'none';
        });
    }

    // 显示消息的函数,根据设置使用alert或console.log
    function displayMessage(message) {
        const useAlert = GM_getValue(useAlertKey, defaultUseAlert);
        const useConsole = GM_getValue(useConsoleKey, defaultUseConsole);
        if (useAlert) {
            alert(message);
        }
        if (useConsole) {
            console.log(message);
        }
    }

    // 自动回贴逻辑
    const replyMessage = "路过顶帖,感谢分享。";
    const replyInterval = 30000; // 30秒
    const lastRunKey = "lastRunTime";

    let lastRunTime = parseInt(GM_getValue(lastRunKey, 0), 10);
    let now = new Date().getTime();
// 如果时间差小于10秒,则直接退出脚本执行
    if (now - lastRunTime < 10000) {
        return;
    }
    if (now - lastRunTime >= replyInterval) {
        GM_setValue(lastRunKey, now);
    // 检测页面上是否已存在回复内容
        const existingReplies = document.querySelectorAll("form:nth-child(13)"); // 替换为实际的回复内容选择器
        let isReplyPresent = false;
        existingReplies.forEach((reply) => {
            if (reply.textContent.includes(replyMessage)) {
                isReplyPresent = true;
                return;
            }
        });

        if (!isReplyPresent) {
            setTimeout(() => {
             // const replyButton = document.querySelector("#reply-button"); // 替换为实际的回复按钮选择器
             // if (replyButton) {
            //      replyButton.click();
           //   }
                const replyInput = document.querySelector("textarea#spp-reply-textarea");
                if (replyInput) {
                    replyInput.value = replyMessage;
                } else {
                    alert("没有找到回复输入框!");
                    return;
                }

                const submitButton = document.querySelector("input#spp-submit-button");
                if (submitButton) {
                    submitButton.click();
                }
            }, 2000); // 等待2秒后再回复

               setTimeout(() => {
               window.location.reload();
            }, 2000); // 等待2秒后回复,然后2秒后刷新页面
        } else {
            return;
        }
    } else {
        displayMessage("距离上次自动回复没有超过30秒,请刷新重试");
    }
})();