Greasy Fork

Greasy Fork is available in English.

NGA优化摸鱼体验插件-标记整页

一键(划掉)自动标记整页用户

当前为 2024-03-14 提交的版本,查看 最新版本

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name         NGA优化摸鱼体验插件-标记整页
// @namespace    https://github.com/DelCrona/WholePageMark
// @version      0.0.6
// @author       DelCrona
// @description  一键(划掉)自动标记整页用户
// @license      MIT
// @match        *://bbs.nga.cn/*
// @match        *://ngabbs.com/*
// @match        *://nga.178.com/*
// @match        *://g.nga.cn/*
// @grant        unsafeWindow
// @run-at       document-start
// @inject-into  content
// ==/UserScript==

(function (registerPlugin) {
    'use strict';
    const PageMark = ({
        name: 'PageMark',  // 插件唯一KEY
        title: '标记整页',  // 插件名称
        desc: '一键对整页用户上标记,点击右边设置按钮使用',  // 插件说明
        settings: [{
            key: 'tips',
            title: '非常重要的提示:1.使用之前先备份你的摸鱼本体配置文件和标记列表 2.不用的时候一定要取消勾选或者关闭插件,否则看到哪标到哪。 3.出bug的话可以去github反馈'
        },{
            key: 'markEnable',
            title: '启用自动标记',
            desc: '勾选来启动自动标记(不用记得关)',
            default: false
        },{
            key: 'anonyEnable',
            title: '启用标记匿名',
            desc: '勾选标记匿名,不勾选就不标 P.S:匿名用户为共用UID,标记无法破匿名,可按需勾选',
            default: false
        },{
            key: 'markInput',
            title: '输入你要挂的标记',
            desc: '在此处填写,不宜过长,我不知道会不会有bug',
            default: ''
        }],
        preProcFunc() {
            // console.log('已运行: preProcFunc()')
        },
        initFunc() {
            const $ = this.mainScript.libs.$;

            /* console.log($.trim(' '))
            console.log('已运行: 标记整页')
            console.log('插件ID: ', this.pluginID)
            console.log('插件配置: ', this.pluginSettings)
            console.log('主脚本: ', this.mainScript)
            console.log('主脚本引用库: ', this.mainScript.libs) */

        },
        postProcFunc() {
            //console.log('已运行: postProcFunc()')
        },
        renderThreadsFunc($el) {
            //console.log('列表项 (JQuery) => ', $el)
            //console.log('列表项 (JS) => ', $el.get(0))
        },
        // 主管贴内回复的函数,每检测到一个回复楼层运行一次
        renderFormsFunc($el) {

            /* 
            console.log('回复项 (JQuery) => ', $el)
            console.log('回复项 (JS) => ', $el.get(0))
            console.log(currentUid); 
            */

            const currentUid = $el.find('[name=uid]').text() + '' ; // 获取uid,具体什么方式是复制的本体,能用就行。
            // 判断是否勾选启动按钮和是否标记匿名
            if (!this.pluginSettings['markEnable'] || (!this.pluginSettings['anonyEnable'] && parseInt(currentUid) < 0)){    
                console.log("未勾选启动标记或未开启标记匿名且本楼匿名,直接return");
                return;
            }
            // const preMark = this.pluginSettings['markInput']; // 获取设置内自己填写的标记(准备标记)
            // console.log(preMark+"(premark)");
            // const userObj = ({uid: currentUid}); // 创建一个对象,属性是uid,刚获取到的,用来接收标签Array数组。
            /* 获取标签对象用来比较重复标记,如果获取的对象为空那么可以直接标记
               有标记的话会比较对象里的marks然后比较,没重复的就标,有重复的就直接return结束
               try用来抓报错 */
            try{
                var markArray = this.mainScript.getModule('MarkAndBan').getUserMarks({uid: currentUid});
                // 判断是否为空
                if (!markArray){
                    // 空的直接标
                    // console.log("没被标记过,可以直接标");
                    // 定义标记对象
                    let markObj = {
                        marks: [{mark: this.pluginSettings['markInput'], text_color: '#ffffff', bg_color: '#1f72f1'}],
                        name: '',
                        uid: currentUid
                    }
                    this.mainScript.getModule('MarkAndBan').setUserMarks(markObj); // 调用标记函数
                    console.log("无标记者标记成功");
                }else{
                    // console.log(markArray.marks[0].mark);
                    // 使用find函数找重复,有的话if判断为true接return
                    if(markArray.marks.find((element) => {return this.pluginSettings['markInput'] === element.mark;})){
                        console.log("有重复,无需标记");
                        return;
                    }

                    /*
                    老版本写法:
                    for (let i=0; i<markArray.marks.length; i++){
                        if (preMark === markArray.marks[i].mark){
                            console.log("有重复,无需标记");
                            return;
                        }
                    }
                    */

                    // console.log("没重复,添加标记"); 
                    // 没有重复那么直接标记
                    // let markList = markArray.marks; // 接收标记数组
                    markArray.marks.push({mark: this.pluginSettings['markInput'], text_color: '#ffffff', bg_color: '#1f72f1'}); // 在末尾插入标记
                    // 写明标记对象并调用标记函数
                    // let markObj = {marks: markArray.marks, name: '', uid: currentUid};
                    this.mainScript.getModule('MarkAndBan').setUserMarks({marks: markArray.marks, name: '', uid: currentUid});
                    console.log("有标记者标记成功");
                }
            }catch(e){
                console.log(e);
            }
        },
        renderAlwaysFunc() {
            // console.log('循环运行: renderAlwaysFunc()')
        },
        asyncStyle() {
            return `#ngascript_plugin_${this.pluginID} {color: red}`
        },
        style: `
        #ngascript_plugin_test {color: red}
        `
    })
    registerPlugin(PageMark)
})(function(plugin) {
    plugin.meta = GM_info.script
    unsafeWindow.ngaScriptPlugins = unsafeWindow.ngaScriptPlugins || []
    unsafeWindow.ngaScriptPlugins.push(plugin)
});