Greasy Fork

Greasy Fork is available in English.

Uooc讨论区自动回复提交

每隔120~180秒自动复制其他人的回复并提交

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name         Uooc讨论区自动回复提交
// @namespace    https://github.com/index-null
// @version      4.12
// @description  每隔120~180秒自动复制其他人的回复并提交
// @author       Chuhsing
// @Dedicated_to 小黃鱼
// @match        *://uooc.net.cn/*
// @match        http://uooc.net.cn/*
// @match        https://www.uooc.net.cn/*
// @license      MIT

// ==/UserScript==

(function() {
    'use strict';
    console.log("脚本已加载");
    console.log("Author: Chuhsing");
    console.log("Dedicated_to 小黃鱼");

    // 设置延时
    const minInterval = 120000; // 最小延时 120 秒
    const maxInterval = 180000; // 最大延时 180 秒
    const waitTime = 5000; // 等待页面加载时间,电脑性能较差可以适当延长
    let curData = '';
    // 等待10秒后尝试获取DOM元素
    setTimeout(() => {
        if (checkElements()) {
            // 获取DOM元素
            // 定义要提交的内容
            let testData = getReplys();
            const textarea = document.querySelector('.replay-editor textarea[ng-model="content"]');
            const replyButton = document.querySelector('.replay-editor .replay-editor-btn[ng-click="handelReplay()"]');

            // 第一次提交
            curData = getRandomElement(testData);
            updateTextAreaAndSubmit(textarea, replyButton, curData);
            console.log(`已完成首次提交,内容: ${curData}`);
            console.log(`开始自动提交,每${minInterval/1000} - ${maxInterval/1000}秒随机提交一次...`);

            // // 固定定时器
            // const interval = 120000; // 120秒
            // let submitTimerId = setInterval(() => {
            //     // 更新textarea并提交
            //     curData = getRandomElement(testData);
            //     updateTextAreaAndSubmit(textarea, replyButton, curData);
            //     console.log(`已提交内容: ${curData}`);
            // }, interval);

            // 随机定时器
            let submitTimerId = setInterval(() => {
                // 更新textarea并提交
                const curData = getRandomElement(testData);
                updateTextAreaAndSubmit(textarea, replyButton, curData);
                console.log(`已提交内容: ${curData}`);

                // 重新设置随机延时
                clearInterval(submitTimerId);
                submitTimerId = setInterval(() => {
                    // 更新textarea并提交
                    const curData = getRandomElement(testData);
                    updateTextAreaAndSubmit(textarea, replyButton, curData);
                    console.log(`已提交内容: ${curData}`);
                }, getRandomInterval(minInterval, maxInterval));
            }, getRandomInterval(minInterval, maxInterval));
        }
    }, waitTime);


    // 更新textarea并提交
    function updateTextAreaAndSubmit(textarea, button, content) {
        if (!button.disabled) {
            // 获取当前作用域
            const scope = angular.element(textarea).scope();

            // 更新模型
            scope.$apply(() => {
                scope.content = content;
            });

            // 触发按钮点击事件
            angular.element(button).triggerHandler('click');
        } else {
            console.log("按钮被禁用,无法点击");
        }
    }

    function checkElements() {
        console.log("检查元素是否已加载...");
        // 获取textarea元素
        const textarea = document.querySelector('.replay-editor textarea[ng-model="content"]');
        if (!textarea) {
            console.log("未找到textarea元素,5秒后重试...");
            return false;
        } else {
            console.log("已找到textarea元素,继续检查...");
        }

        // 获取回复按钮
        const replyButton = document.querySelector('.replay-editor .replay-editor-btn[ng-click="handelReplay()"]');
        if (!replyButton) {
            console.log("未找到回复按钮,5秒后重试...");
            return false;
        } else {
            console.log("已找到回复按钮,继续检查...");
        }

        // 如果找到了元素,则设置标志变量并返回true
        console.log("元素均找到,开始自动提交...");
        return true;
    }

    function getReplys() {
        const replyContents = document.querySelectorAll('.Reply-item .Reply-item-content');

        // 创建一个空数组来存储内容
        let contentList = [];

        // 遍历所有元素并将内容添加到数组中
        replyContents.forEach(content => {
            contentList.push(content.textContent.trim());
        });

        // 输出内容列表
        console.log(contentList);
        return contentList;
    }

    function getRandomElement(array) {
        if (array.length === 0) {
            throw new Error("数组为空,无法选择元素");
        }

        // 生成一个随机索引
        const randomIndex = Math.floor(Math.random() * array.length);

        // 返回随机索引对应的元素
        return array[randomIndex];
    }

    // 生成随机延时
    function getRandomInterval(min, max) {
        return Math.floor(Math.random() * (max - min + 1)) + min;
    }
})();