Greasy Fork

Greasy Fork is available in English.

MT论坛

MT论坛效果增强,如自动签到、自动展开帖子、滚动加载评论、显示uid、屏蔽用户、手机版小黑屋、今日签到之星、今日签到排名、帖外预览图片、搜索框清空按钮修复、个人空间正确进入、康哥图床-帖子内(20MB)、Hello图床-帖子内(20MB)、Z4A图床-帖子内(50MB)、康哥图床-聊天内(20MB)、Hello图床-聊天内(20MB)、Z4A图床-聊天内(50MB)、付费主题白嫖提醒等

当前为 2022-08-11 提交的版本,查看 最新版本

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name         MT论坛
// @namespace    http://tampermonkey.net/
// @description  MT论坛效果增强,如自动签到、自动展开帖子、滚动加载评论、显示uid、屏蔽用户、手机版小黑屋、今日签到之星、今日签到排名、帖外预览图片、搜索框清空按钮修复、个人空间正确进入、康哥图床-帖子内(20MB)、Hello图床-帖子内(20MB)、Z4A图床-帖子内(50MB)、康哥图床-聊天内(20MB)、Hello图床-聊天内(20MB)、Z4A图床-聊天内(50MB)、付费主题白嫖提醒等
// @version      2.4.6.2
// @author       WhiteSevs
// @icon         https://bbs.binmt.cc/favicon.ico
// @match        *://bbs.binmt.cc/*
// @compatible   edge Beta/Dev/Candy 测试通过
// @compatible   火狐 测试通过
// @compatible   Yandex 测试通过
// @compatible   Kiwi 测试通过
// @license      GPL-3.0-only
// @grant        GM_addStyle
// @grant        GM_setValue
// @grant        GM_getValue
// @grant        GM_deleteValue
// @grant        GM_setClipboard
// @grant        GM_xmlhttpRequest
// @run-at       document-start
// @supportURL   https://github.com/893177236/Monkey_script
// @require	     https://lf26-cdn-tos.bytecdntp.com/cdn/expire-1-M/jquery/3.4.1/jquery.min.js
// @require	     https://lf26-cdn-tos.bytecdntp.com/cdn/expire-1-M/nanogallery2/3.0.5/jquery.nanogallery2.min.js
// @require      http://greasyfork.icu/scripts/441331-md5/code/md5.js?version=1026891
// ==/UserScript==

(function () {
    'use strict';
    const log = {
        success: (str) => {
            console.log("%c" + str, "color: #81b453");
        },
        error: (str) => {
            console.trace("%c" + str, "color: #f20000");
        }
    }
    let mt_config = {
        dom_obj: {
            beauty_select: function () { //下拉列表对象
                return document.getElementsByClassName("beauty-select")[0];
            },
            combobox_switch: function () { //复选框对象
                return document.getElementsByClassName("switch_1")[0];
            },
            comiis_verify: function () { //帖子内各个人的信息节点【list】
                return document.getElementsByClassName("comiis_verify");
            },
            comiis_formlist: function () { //导航中最新、热门、精华、恢复、抢沙发的各个帖子【list】
                return document.getElementsByClassName("forumlist_li");
            },
            comiis_mmlist: function () {
                return document.getElementsByClassName("comiis_mmlist");
            },
            comiis_postli: function () { //帖子内评论,包括帖子内容主体,第一个就是主体【list】
                return document.getElementsByClassName("comiis_postli comiis_list_readimgs nfqsqi")
            },
            post_bottom_controls: function () { // 帖子底部一栏控件
                return document.getElementsByClassName("comiis_znalist_bottom b_t cl")

            },
            post_list_of_comments: function () { //帖子内评论列表
                return $(".comiis_postlist.kqide");
            },
            post_next_commect: function () { //帖子内评论下一页的按钮
                return document.querySelector("div.comiis_page.bg_f>a:nth-child(3)");
            }
        },
        rexp: {
            search_url: /bbs.binmt.cc\/search.php/g, //搜索页
            chat_url: /home.php\?mod=space&do=pm&subop=view/g, // 聊天页
            home_url: /home.php\?mod=spacecp&ac=profile&op=info/g, //个人空间页
            home_url_brief: /home.php\?mod=space/g, //个人空间页简略url
            home_kmisign_url: /bbs.binmt.cc\/(forum.php\?mod=guide&view=hot(|&mobile=2)|k_misign-sign.html)/g, //主页和签到页链接
            home_space_url: /bbs\.binmt\.cc\/home\.php\?mod=space/g, //【我的】 个人信息页链接
            home_space_pc_uid_url: /space-uid-(.*?).html/, //PC 个人空间链接uid
            reply_forum: /bbs.binmt.cc\/forum.php\?mod=post&action=reply/g, // 回复的界面url
            sign_url: "",
            navigation_url: "",
            community_url:/forum.php\?forumlist/, //社区
            forum_post: /(bbs.binmt.cc\/thread-|bbs.binmt.cc\/forum.php\?mod=viewthread)/g, //帖子链接
            forum_post_pc: /.*:\/\/bbs.binmt.cc\/thread.*/, //帖子链接-PC
            forum_guide_url: /bbs.binmt.cc\/forum.php\?mod=guide/g, // 导航链接
            forum_post_reply: /forum.php\?mod=post&action=reply/g, //帖子中回复的链接
            forum_post_page: '&page=(.*)', //帖子链接的当前所在页 page
            forum_post_pc_page: 'thread-(.*?)-', //PC帖子链接的当前所在页 page
            forum_plate_text: /休闲灌水|求助问答|逆向教程|资源共享|综合交流|编程开发|玩机教程|建议反馈/g, //各版块名称
            plate_url: /bbs.binmt.cc\/forum-[0-9]{1,2}-[0-9]{1,2}.html/g, // 板块链接
            formhash: /formhash=(.*)&/, //论坛账号的凭证
            font_special: /<br>|&nbsp;|<font.*?>|<\/font>|<strike>|<strong>|<i>|<u>|align=".*?"/g, //帖子内特殊字体格式
            forum_post_guide_url: /bbs.binmt.cc\/page-[1-5].html|bbs.binmt.cc\/forum.php\?mod=guide/g, //帖子链接和导航链接
            mt_uid: /uid=(\d+)/,
            nologin: /member.php\?mod=logging&action=login(|&mobile=2)/g, //未登录
            pc_useragent: 'Windows', //pc识别
            k_misign_sign: "bbs.binmt.cc\/k_misign-sign.html",
            post_forum: /forum.php\?mod=post&action=newthread/, // 发布帖子
            edit_forum: /forum.php\?mod=post&action=edit/, // 编辑帖子
        }
    }
    let utils = {
        dateStringFormatToStamp(datastring){
            let date = datastring;
            date = date.substring(0, 19);
            date = date.replace(/-/g, '/');
            let timestamp = new Date(date).getTime();
            // let newDate = new Date(timestamp);
            return timestamp;
        },
        timeStringFormatToStamp(timestring){
            let today = new Date();
            let date = today.getFullYear() + "-" + (today.getMonth() + 1) + "-" + today.getDate() + " " + timestring;
            date = date.substring(0, 19);
            date = date.replace(/-/g, '/');
            let timestamp = new Date(date).getTime();
            // let newDate = new Date(timestamp);
            return timestamp
        },
        listCompareDescByValue(propertyName){ // json根据 字段(int)降序
            return function (object1, object2) {
                var value1 = object1[propertyName];
                var value2 = object2[propertyName];
                if (value2 < value1) {
                    return -1;
                } else if (value2 > value1) {
                    return 1;
                } else {
                    return 0;
                }
            }
        },
        listCompareAscByValue(propertyName){ // json根据 字段(int)升
            return function (object1, object2) {
                var value1 = object1[propertyName];
                var value2 = object2[propertyName];
                if (value2 > value1) { //-1表示前对象小,1表示后对象小,0表示相等
                    return -1;
                } else if (value2 < value1) {
                    return 1;
                } else {
                    return 0;
                }
            }
        },
        listToStringByValue(_list_,propertyName){ // json根据 字段(int)合并
            let content = "";
            Array.from(_list_).forEach( (item) =>{
                content = content + item[propertyName];
            })
            return content
        }
    }

    function compatiblePartialFunction(){ // 兼容部分函数 GM_xmlhttpRequest没有兼容,跨域,考虑fetch,还是算了
        if(typeof GM_getValue== "undefined"){
            GM_getValue = (key)=>{window.localStorage.getItem(key);}
        }
        if(typeof GM_setValue== "undefined"){
            GM_setValue = (key,value)=>{window.localStorage.setItem(key,value);}
        }
        if(typeof GM_deleteValue== "undefined"){GM_deleteValue = (key)=>{window.localStorage.removeItem(key);}
        }
        if(typeof GM_addStyle == "undefined"){
            GM_addStyle = (styleText)=>{
                let cssDOM = document.createElement("style");
                cssDOM.setAttribute("type","text/css");
                cssDOM.innerHTML = styleText;
                document.head.appendChild(cssDOM);
            }
        }
        if(typeof GM_setClipboard == "undefined"){
            GM_setClipboard = (text)=>{
                let clipBoardDOM = document.createElement("input");
                clipBoardDOM.type="text";
                clipBoardDOM.setAttribute("style","opacity:0;position:absolute;");
                clipBoardDOM.id="whitesevClipBoardInput";
                document.body.append(clipBoardDOM);
                $("#whitesevClipBoardInput").val(text);
                $("#whitesevClipBoardInput").removeAttr("disabled").select();
                document.execCommand('Copy');
                $('#whitesevClipBoardInput').remove();
            }
        }
    }
    function tryCatch(func, params, errorFunc) { // 捕获错误
        try {
            func(params);
        } catch (error) {
            console.log("%c" + (func.name + "出现错误"), "color: #f20000");
            console.log("%c" + ("错误原因:" + error), "color: #f20000");
            eval(errorFunc);
        }
    }

    function ios_js_css() {
        var ios_js = document.createElement("script");
        var ios_css = document.createElement("link");
        ios_js.src = "https://whitesev.gitee.io/static_resource/ios_loading/js/iosOverlay.js";
        ios_js.type = "text/javascript";
        ios_css.rel = "stylesheet";
        ios_css.type = "text/css";
        ios_css.href = "https://whitesev.gitee.io/static_resource/ios_loading/css/iosOverlay.css";

        document.head.appendChild(ios_js);
        document.head.appendChild(ios_css);
    }

    function set_PC_js() {
        var a = document.createElement("script");
        var b = document.createElement("script");
        a.src = "https://cdn2.bbs.binmt.cc/static/js/smilies.js?x6L";
        b.src = "https://cdn2.bbs.binmt.cc/static/js/common.js?x6L";
        a.type = "text/javascript";
        b.type = "text/javascript";
        document.head.appendChild(a);
        document.head.appendChild(b);
    }


    function Latest_publication() { // 最新发表
        var ele = document.createElement('li');
        var url = window.location.href;
        ele.id = "latest_publication";
        ele.innerHTML = '<a href="https:\/\/bbs.binmt.cc\/forum.php?mod=guide&view=newthread" hidefocus="true" title="最新发表">最新发表<\/a>';
        document.getElementsByClassName("wp comiis_nvbox cl")[0].children[1].appendChild(ele);
        if (url == 'https:\/\/bbs.binmt.cc\/forum.php?mod=guide&view=newthread') {
            document.getElementById("mn_forum_10").children[0].style = "background: url(";
            ele.style.cssText = 'background: url("https:\/\/cdn2.bbs.binmt.cc\/template\/comiis_mi\/img\/nv_a.png") repeat-x 50% -50px;';

        }
    }

    function removeFontStyle() { // 移除帖子内容特殊字体
        if (GM_getValue("v1") && location.href.match(mt_config.rexp.forum_post)) {
            var rule = mt_config.rexp.font_special;
            var h_content = document.getElementsByClassName("comiis_a comiis_message_table cl");
            h_content[0].innerHTML = h_content[0].innerHTML.replace(rule, '');
        }

    }

    function getLocalTime() {
        let GM_myDate = new Date;
        let GM_year = GM_myDate.getFullYear(); //获取当前年
        let GM_mon = GM_myDate.getMonth() + 1; //获取当前月
        let GM_date = GM_myDate.getDate();
        let GM_alldate = GM_year.toString() + GM_mon.toString() + GM_date.toString();
        GM_alldate = parseInt(GM_alldate);
        return GM_alldate
    }

    function getFormHash() { // 获取账号的formhash
        return document.querySelector("input[name=formhash]") ? document.querySelector("input[name=formhash]").value : document.querySelector("div[class=sidenv_exit]>a").href.match(mt_config.rexp.formhash)[1];
    }

    function autoSignIn() { //mt签到
        if (!GM_getValue("v17")) {
            console.log("尚未开启每日签到");
            return;
        }
        if (GM_getValue("mt_sign") == getLocalTime()) {
            console.log("今日已签到");
            return;
        }
        if ((document.querySelector("div[class=comiis_dlq]>a") != null) || (document.getElementsByClassName("sidenv_user")[0].href.match(mt_config.rexp.nologin) != null)) {
            console.log("当前账号尚未登录");
            return;
        }
        let mtFormHash = getFormHash();
        if (mtFormHash == null) {
            console.log("获取账号formhash失败");
            return;
        }

        $.get("/k_misign-sign.html?operation=qiandao&format=button&formhash=" + mtFormHash + "&inajax=1&ajaxtarget=midaben_sign", function (data, status) {
            console.log(data.responseText);
            GM_setValue("mt_sign", getLocalTime());
            window.location.reload();
        });

    }

    function searchHistory() {
        if (GM_getValue("v19") && location.href.match(mt_config.rexp.search_url)) {
            search_event();
            add_search_history();
            add_clear_history();
        }
    }

    function search_event() {
        //搜索界面增加关闭按钮事件,清空input内容
        //点击搜索保存搜索记录
        $("#scform_submit").click(function () {
            let getsearchtext = $("#scform_srchtxt").val();
            if ((getsearchtext != null) && (getsearchtext != "")) {
                let search_history_array = new Array(getsearchtext);
                let has_history = GM_getValue("search_history");
                if (has_history != null) {
                    if ($.inArray(getsearchtext, has_history) != -1) {
                        console.log("已有该搜索历史记录")
                        search_history_array = has_history
                    } else {
                        console.log("无该记录,追加");
                        search_history_array = search_history_array.concat(has_history);
                    }
                } else {
                    console.log("空记录,添加")
                }
                GM_setValue("search_history", search_history_array);
            }

        })
    }

    function add_search_history() { //搜索界面添加搜索历史记录
        $("#scform_srchtxt").attr("list", "search_history");
        var search_history_list = GM_getValue("search_history");
        var dom_datalist = document.createElement("datalist");
        dom_datalist.id = "search_history";
        var option_text = "";
        if (search_history_list) {
            for (var i = 0; i < search_history_list.length; i++) {
                option_text = option_text + '<option value="' + search_history_list[i] + '">';
            }
            dom_datalist.innerHTML = option_text;
            $(".comiis_flex").append(dom_datalist);
        }

    }

    function add_clear_history() { //搜索界面添加清理历史记录和历史记录个数
        let search_history_list = GM_getValue("search_history");
        let search_history_nums = 0;
        if (search_history_list != null) {
            search_history_nums = search_history_list.length;
        }
        let clear_history_innerHTML =
            `<div class="comiis_p12 f14 bg_f f_c b_b cl" style="padding-bottom:10px">搜索记录个数: ` +
            search_history_nums +
            `<button class="btn_clear_search_history" style="
            border: none;
            float: right;
            background: red;
            color: #fff;
            border-radius: 3px;
            font-weight: 600;
            min-width: 20vw;
            width: 20vw;
        ">清理记录</button></div>`;
        let insertdom = $(".comiis_p12.f14.bg_f.f_c.b_b.cl,.comiis_tagtit.b_b.f_c");
        insertdom.before(clear_history_innerHTML);
        $(".btn_clear_search_history").click(function () {
            GM_deleteValue("search_history");
            window.location.reload();
        })
    }

    function showTodayStar() { // 显示今日之星,在签到页上
        if (GM_getValue("v33") && window.location.href.match(mt_config.rexp.k_misign_sign)) {
            let todayStarParent = $(".pg_k_misign .comiis_qdinfo");
            let todayStar = document.createElement("ul");
            GM_xmlhttpRequest({
                url: "/k_misign-sign.html",
                method: 'get',
                async: false,
                headers: {
                    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.64 Safari/537.36 Edg/101.0.1210.53"
                },
                onload: (r) => {
                    let html = $(r.response);
                    let todatastarele = html.find("#pt span.xg1");
                    let todaypeople = todatastarele[0].textContent.replace("今日签到之星:", '');
                    todayStar.innerHTML = '<li class="f_f" style="display: flex;flex-direction: column;width: 100%;"><span class="comiis_tm">今日签到之星</span>' + todaypeople + '</li>';
                    let comiis_space_box_height = getComputedStyle($(".comiis_space_box")[0], null)["height"].replace("px", "");
                    let comiis_space_box_padding_bottom = getComputedStyle($(".comiis_space_box")[0], null)["padding-bottom"].replace("px", "");
                    comiis_space_box_height = parseInt(comiis_space_box_height);
                    comiis_space_box_padding_bottom = parseInt(comiis_space_box_padding_bottom);
                    let total_height = comiis_space_box_height + comiis_space_box_padding_bottom + 50;
                    GM_addStyle(`
                    .comiis_space_box{
                        height: ${total_height}px;
                        background-size: 100% 100%;
                    }
                    .pg_k_misign .comiis_qdinfo{
                        height: 110px !important;
                    }`);
                    todayStarParent.append(todayStar);

                },
                onerror: (r) => {
                    console.log(r);
                    log.error("请求今日之星失败");
                }
            })
        }

    }

    function show_latest_sign() { // 显示签到的最先几个人,最多10个,和顶部的今日签到之星
        if (window.location.href.match(mt_config.rexp.k_misign_sign)) {

            let today_ranking_ele = document.querySelector(".comiis_topnv .comiis_flex .flex");
            today_ranking_ele.after($(`<li class="flex"><a href="javascript:;" id="k_misignlist_today_latest" onclick="ajaxlist('todayLatest');">今日最先</a></li>`)[0]);
            let getMaxPage = (urlextra) => {
                return new Promise(res => {
                    GM_xmlhttpRequest({
                        url: "https://bbs.binmt.cc/k_misign-sign.html?operation=" + urlextra,
                        async: false,
                        dataType: 'html',
                        headers: {
                            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.64 Safari/537.36 Edg/101.0.1210.53"
                        },
                        onload: function (resp) {
                            let last_url = $(resp.response).find("#J_list_detail .pg .last")[0].href;
                            let last_page = last_url.match(/page=([0-9]*)/)[1];
                            res(last_page);

                            // console.log(data);
                            // $("#ranklist").html(data);
                            // $('#ranklist').attr('listtype', listtype);
                        },
                        onerror: function (resp) {
                            console.log(resp);
                            res(0);
                        }
                    })
                })
            }

            let getPagePeople = (page) => {
                return new Promise(res => {
                    GM_xmlhttpRequest({
                        url: "https://bbs.binmt.cc/k_misign-sign.html?operation=list&op=&page=" + page,
                        async: false,
                        dataType: 'html',
                        headers: {
                            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.64 Safari/537.36 Edg/101.0.1210.53"
                        },
                        onload: function (resp) {
                            let peoples = $(resp.response).find("#J_list_detail tbody tr");
                            let ret_array = [];
                            if (peoples.length == 2 && peoples[0].textContent.indexOf("暂无内容") != -1) {
                                res(ret_array);
                                return;
                            }
                            for (let i = 1; i <= peoples.length - 2; i++) {
                                let people = peoples[i];
                                let ret_json = {};
                                let user_name = people.children[0].getElementsByTagName("a")[0].textContent;
                                let space_url = people.children[0].getElementsByTagName("a")[0].href;
                                let uid = space_url.match(/space-uid-([0-9]*)/)[1];
                                let sign_all_days = people.children[1].textContent;
                                let sign_month_days = people.children[2].textContent;
                                let sign_time = people.children[3].textContent;
                                let sign_reward = people.children[5].textContent;
                                ret_json["user"] = user_name;
                                ret_json["uid"] = uid;
                                ret_json["avatar"] = "https://avatar-bbs.mt2.cn/uc_server/avatar.php?uid=" + uid + "&size=small";
                                ret_json["days"] = sign_all_days;
                                ret_json["monthDays"] = sign_month_days;
                                ret_json["time"] = sign_time;
                                ret_json["reward"] = sign_reward;
                                ret_array = ret_array.concat(ret_json);
                            }
                            res(ret_array)
                        },
                        onerror: function (resp) {
                            console.log(resp);
                            res({});
                        }
                    })
                })
            }

            function changeRankList(data, listtype) {
                $("#ranklist").html(data);
                $('#ranklist').attr('listtype', listtype);
            }

            ajaxlist = async (listtype) => {
                listtype = listtype;
                if (listtype == 'today') {
                    loadingdelay = false;
                    urlextra = 'list&op=today';
                } else if (listtype == 'month') {
                    loadingdelay = false;
                    urlextra = 'list&op=month';
                } else if (listtype == 'zong') {
                    loadingdelay = false;
                    urlextra = 'list&op=zong';
                } else if (listtype == 'calendar') {
                    loadingdelay = true;
                    urlextra = 'calendar';
                } else {
                    loadingdelay = false;
                    urlextra = 'list';
                }
                //alert(loadingdelay);
                if (listtype == 'todayLatest') {
                    loadingdelay = false;
                    urlextra = 'list&op=&page=0';
                    let maxPage = await getMaxPage(urlextra);
                    let latestPeople = await getPagePeople(maxPage);

                    latestPeople.reverse();
                    if (latestPeople.length < 10) {
                        let latestPeople_2 = await getPagePeople(maxPage - 1);
                        latestPeople_2.reverse();
                        latestPeople = latestPeople.concat(latestPeople_2);
                        latestPeople.reverse();
                    }

                    let peopleHTML = '';
                    latestPeople.reverse();
                    console.log(latestPeople);
                    latestPeople.forEach(people => {
                        peopleHTML = peopleHTML + `
                        <tbody id="autolist_` + people["uid"] + `">
                            <tr>
                                <td class="k_misign_lu">
                                    <a href="home.php?mod=space&amp;uid=` + people["uid"] + `"><img
                                            src="` + people["avatar"] + `"></a>
                                </td>
                                <td class="k_misign_ll"><span></span></td>
                                <td class="k_misign_lc">
                                    <h4 class="f_c"><a href="home.php?mod=space&amp;uid=` + people["uid"] + `">` + people["user"] + `</a><span>` + people["time"] + `</span><span
                                            class="y">总天数 ` + people["days"] + `天</span></h4>
                                    <p class="f_0">月天数 ` + people["monthDays"] + ` 天
                                        ,
                                        上次奖励
                                        ` + people["reward"] + `</p>
                                </td>
                            </tr>
                        </tbody>
                        `
                    })
                    let latestHTML = `<li class="styli_h bg_e"></li>
                    <div class="comiis_topnv bg_f b_t b_b">
                        <ul class="comiis_flex">
                            <li class="flex"><a href="javascript:;" id="k_misignlist_today" onclick="ajaxlist('today');">今日排行</a></li>
                            <li class="flex f_0"><em class="bg_0"></em><a href="javascript:;" id="k_misignlist_today_latest" onclick="ajaxlist('todayLatest');">今日最先</a>
                            </li>
                            <li class="flex"><a href="javascript:;" id="k_misignlist_month" onclick="ajaxlist('month');" class="f_c">本月排行</a>
                            </li>
                            <li class="flex"><a href="javascript:;" id="k_misignlist_zong" onclick="ajaxlist('zong');" class="f_c">总排行</a></li>
                        </ul>
                    </div>
                    <div class="k_misign_wp">
                        <div class="k_misign_list bg_f">
                            <table id="misign_list">
                            ` + peopleHTML + `
                            </table>
                        </div>
                    </div>`
                    changeRankList(latestHTML, listtype)
                } else {
                    $.ajax({
                        type: 'GET',
                        url: "plugin.php?id=k_misign:sign&operation=" + urlextra,
                        async: false,
                        dataType: 'html',
                        success: function (data) {
                            // console.log(data);
                            data = data.replace(`今日排行</a></li>`, `今日排行</a></li><li class="flex"><a href="javascript:;" id="k_misignlist_today_latest" onclick="ajaxlist('todayLatest');">今日最先</a></li>`);
                            changeRankList(data, listtype);

                        },
                        complete: function (XHR, TS) {
                            XHR = null
                        }
                    });
                }

            }

        }

    }

    const blackHome = {
        httpGetSrc: async (url) => {
            return new Promise(res => {
                GM_xmlhttpRequest({
                    url: url,
                    method: "GET",
                    async: false,
                    timeout: 5000,
                    onload: (r) => {
                        res(r.response);
                    },
                    onerror: (r) => {
                        console.log(r);
                        res();
                    }
                })
            })
        },
        loadJS: async (url) => {
            let ret = await blackHome.httpGetSrc(url);
            await eval(ret);
        },
        loadCSS: async (url) => {
            let ret = await blackHome.httpGetSrc(url);
            GM_addStyle(ret);
        },
        showBlackHomeView: async () => { // 显示小黑屋界面
            $.NZ_MsgBox.alert({
                title: "小黑屋名单",
                content: "获取中",
                type: "",
                location: "center",
                buttons: {
                    confirm: {
                        text: "确定"
                    }
                }
            });
            let blacklistret = await blackHome.getBlackList('');
            let blacklist = eval('(' + blacklistret + ')');
            let blackContent = '';

            function sortByProperTyName(data, propertyname) {
                let _list_ = [];
                $.each(data, function (index, value) {
                    let date = value["dateline"].match(/([0-9]{4}-[0-9]{1,2}-[0-9]{1,2}[\s]*[0-9]{1,2}:[0-9]{1,2})/g)[0];
                    date = date.substring(0, 19);
                    date = date.replace(/-/g, '/');
                    let timestamp = new Date(date).getTime();
                    value["time"] = timestamp;
                    _list_ = _list_.concat(value);
                });

                function compareDesc(propertyName) {
                    return function (object1, object2) {
                        var value1 = object1[propertyName];
                        var value2 = object2[propertyName];
                        if (value2 < value1) {
                            return -1;
                        } else if (value2 > value1) {
                            return 1;
                        } else {
                            return 0;
                        }
                    }
                }
                _list_.sort(compareDesc("time"));
                return _list_;
            }
            let newBlacklist = sortByProperTyName(blacklist["data"], "time");
            $.each(newBlacklist, function (index, value) {
                let blackreson = (value["reason"] == "") ? "无" : value["reason"];
                blackContent = blackContent + `
                <tbody id="autolist">
                    <tr>
                        <td class="k_misign_lu" style="text-align: center;overflow-wrap: break-word;width: 76px;">
                            <a href="home.php?mod=space&uid=` + value["uid"] + `&do=profile">
                                <img src="https://avatar-bbs.mt2.cn/uc_server/avatar.php?uid=` + value["uid"] + `&amp;size=small">
                            </a>
                            <div class="f_c" style="display: flex;justify-content: center;margin-top: 5px;word-break: break-word;">
                                <h4>
                                    <a href="home.php?mod=space&uid=` + value["uid"] + `&do=profile">` + value["username"] + `</a>
                                </h4>
                            </div>
                        </td>
                        <td class="k_misign_ll" style="width: 10px;">
                            <span></span>
                        </td>
                        <td class="k_misign_lc" style="max-width: 200px;">
                            <div class="f_c" style="display: flex;justify-content: space-between;">
                                <h4>
                                    <div class="y">操作时间: ` + value["dateline"] + `</div>
                                </h4>
                            </div>
                            <div class="f_c" style="display: flex;justify-content: space-between;">
                                <p class="f_0">操作行为: ` + value["action"] + `</p>
                            </div>
                            <div class="f_c" style="display: flex;justify-content: space-between;">
                                <p class="f_0">过期时间: ` + value["groupexpiry"] + `</p>
                            </div>
                            <div class="f_c" style="display: flex;justify-content: space-between;">
                                <p class="f_0" style="color: #fc2a2a !important;">操作人员: ` + value["operator"] + `</p>
                            </div>
                            <div class="f_c" style="display: flex;justify-content: space-between;">操作理由: ` + blackreson + `</div>
                            
                        </td>
                    </tr>
                    <tr style="height:15px;"></tr>
                </tbody>
                `;
                // console.log(value);
            })
            let mainBlackContent = '<table id="misign_list" style="overflow: auto;height: inherit;margin: 15px 0px;">' + blackContent + "</table>";
            $(".msgcon").html(mainBlackContent);
            $(".NZ-MsgBox-alert.NZ-MsgBox--motion").css("top", "100px");
            $(".msgcon").css("height", "400px");

        },
        insertMobileBlackHomeButton: function () { // 插入手机版查看小黑屋的按钮
            if ((window.location.href.match(mt_config.rexp.home_space_url) != null) && (GM_getValue("v30"))) {
                // @require      https://cdn.bootcdn.net/ajax/libs/SyntaxHighlighter/3.0.83/scripts/shCore.js
                // @require      https://cdn.bootcdn.net/ajax/libs/SyntaxHighlighter/3.0.83/scripts/shBrushJScript.js
                // gitee需要公开仓库,那我只能引用资源站的js和css了
                // this.loadJS("https://gitee.com/whitesev/static_resource/raw/master/NZ_MsgBox/Js/NZ-Plugin/Js/NZ-MsgBox.min.js");
                // this.loadJS("https://gitee.com/whitesev/static_resource/raw/master/NZ_MsgBox/Js/NZ-Plugin/Js/NZ-Drag.min.js");
                blackHome.loadJS("https://www.jq22.com/demo/NZ-Plugin-MsgBox202201130154/Js/NZ-Plugin/Js/NZ-MsgBox.min.js");
                blackHome.loadJS("https://www.jq22.com/demo/NZ-Plugin-MsgBox202201130154/Js/NZ-Plugin/Js/NZ-Drag.min.js");
                // this.loadJS("https://gitee.com/whitesev/static_resource/raw/master/NZ_MsgBox/Js/spin/spin.js");

                // this.loadCSS("https://cdn.bootcdn.net/ajax/libs/SyntaxHighlighter/3.0.83/styles/shCoreRDark.min.css");
                // this.loadCSS("https://gitee.com/whitesev/static_resource/raw/master/NZ_MsgBox/Js/NZ-Plugin/Css/NZ-MsgBox.min.css");
                blackHome.loadCSS("https://www.jq22.com/demo/NZ-Plugin-MsgBox202201130154/Js/NZ-Plugin/Css/NZ-MsgBox.min.css");
                // this.loadCSS("https://gitee.com/whitesev/static_resource/raw/master/NZ_MsgBox/Css/fontawesome-free-5.11.2-web/css/all.min.css");
                // this.loadCSS("https://gitee.com/whitesev/static_resource/raw/master/NZ_MsgBox/Css/animate.min.css");
                // this.loadCSS("https://gitee.com/whitesev/static_resource/raw/master/NZ_MsgBox/Js/spin/spin.css");


                let black_home_ele = document.createElement("a");
                black_home_ele.setAttribute("href", "javascript:;");
                black_home_ele.className = "comiis_flex comiis_styli bg_f b_t cl blacklist";
                black_home_ele.innerHTML = `
                    <div class="styli_tit f_c">
                        <i class="comiis_font" style="color: #000;"></i>
                    </div>
                    <div class="flex">小黑屋</div>
                    <div class="styli_ico">
                        <i class="comiis_font f_e"></i>
                    </div>`;
                GM_addStyle(`
                .NZ-MsgBox-alert .msgcontainer .msgtitle {
                    text-align: center !important;
                }
                #autolist .k_misign_lu img {
                    width: 40px;
                    height: 40px;
                    -moz-border-radius: 20px;
                    -webkit-border-radius: 20px;
                    border-radius: 20px;
                }
                .k_misign_lc .f_c{
                    margin: 5px 0px;
                }`)
                black_home_ele.onclick = () => {
                    blackHome.showBlackHomeView();
                }
                let parent_ele = document.querySelectorAll(".comiis_myinfo_list.bg_f.cl");
                parent_ele[parent_ele.length - 1].append(black_home_ele);
            }
        },
        getBlackList: async (cid) => { // 获取黑名单列表
            return new Promise(res => {
                GM_xmlhttpRequest({
                    url: "https://bbs.binmt.cc/forum.php?mod=misc&action=showdarkroom&cid=" + cid + "&t=&ajaxdata=json",
                    timeout: 5000,
                    method: "GET",
                    async: false,
                    headers: {
                        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.64 Safari/537.36 Edg/101.0.1210.53"
                    },
                    onload: (r) => {
                        res(r.responseText);
                    },
                    onerror: (r) => {
                        console.log(r);
                        res({});
                    }
                })
            })
        }
    }

    const quickUBB = {
        code: {
            "rainbow1": {
                "key": "转普通彩虹",
                "value": "",
                "isFunc": true,
                "num": 1
            },
            "rainbow2": {
                "key": "转黑白彩虹",
                "value": "",
                "isFunc": true,
                "num": 2
            },
            "rainbow3": {
                "key": "转黑红彩虹",
                "value": "",
                "isFunc": true,
                "num": 3
            },
            "rainbow4": {
                "key": "转蓝绿彩虹",
                "value": "",
                "isFunc": true,
                "num": 4
            },
            "size": {
                "key": "size",
                "value": "[size=][/size]",
                "tagL": "=",
                "tagR": "]",
                "L": "[size=]",
                "R": "[/size]",
                "cursorL": "[size=",
                "cursorLength": 6
            },
            "color": {
                "key": "color",
                "value": "[color=][/color]",
                "tagL": "=",
                "tagR": "]",
                "L": "[color=]",
                "R": "[/color]",
                "cursorL": "[color=",
                "cursorLength": 7
            },
            "b": {
                "key": "加粗",
                "value": "[b][/b]",
                "tagL": "]",
                "tagR": "[",
                "L": "[b]",
                "R": "[/b]",
                "cursorR": "[/b]",
                "cursorLength": 4
            },
            "u": {
                "key": "下划线",
                "value": "[u][/u]",
                "tagL": "]",
                "tagR": "[",
                "L": "[u]",
                "R": "[/u]",
                "cursorR": "[/u]",
                "cursorLength": 4
            },
            "i": {
                "key": "倾斜",
                "value": "[i][/i]",
                "tagL": "]",
                "tagR": "[",
                "L": "[i]",
                "R": "[/i]",
                "cursorR": "[/i]",
                "cursorLength": 4
            },
            "s": {
                "key": "中划线",
                "value": "[s][/s]",
                "tagL": "]",
                "tagR": "[",
                "L": "[s]",
                "R": "[/s]",
                "cursorR": "[/s]",
                "cursorLength": 4
            },
            "lineFeed": {
                "key": "换行",
                "value": "[*]",
                "L": "",
                "R": "[*]",
                "cursorL": "[*]",
                "cursorLength": 3
            },
            "longHorizontalLine": {
                "key": "长横线",
                "value": "[hr]",
                "L": "",
                "R": "[hr]",
                "cursorL": "[hr]",
                "cursorLength": 4
            },
            "link": {
                "key": "链接",
                "value": "[url=][/url]",
                "tagL": "=",
                "tagR": "]",
                "L": "[url=]",
                "R": "[/url]",
                "cursorL": "[url=",
                "cursorLength": 5

            },
            "hide": {
                "key": "隐藏",
                "value": "[hide][/hide]",
                "tagL": "]",
                "tagR": "[",
                "L": "[hide]",
                "R": "[/hide]",
                "cursorR": "[/hide]",
                "cursorLength": 7

            },
            "quote": {
                "key": "引用",
                "value": "[quote][/quote]",
                "tagL": "]",
                "tagR": "[",
                "L": "[quote]",
                "R": "[/quote]",
                "cursorR": "[/quote]",
                "cursorLength": 8

            }
        },
        insertQuickReplyUBB: () => { // 快捷回复
            if (GM_getValue("v31") && (window.location.href.match(mt_config.rexp.forum_post) != null)) {
                quickUBB.jqueryExtraFunction();
                $(".comiis_post_ico .comiis_pictitle").after($(`<a href="javascript:;" class="commis_insert"><i class="comiis_font"><em>插入</em></i></a>`));
                $(".comiis_post_ico.comiis_minipost_icot.f_c.cl").on("click", "a", (e) => {
                    $("#comiis_post_tab div.bg_f").hide()
                    e.currentTarget.style.display = "";
                    if (e.currentTarget.className != "comiis_pictitle") {
                        e.currentTarget.style.display = "block";
                    }
                })
                let message_ele = $("#needmessage");
                let fastpostsubmitline_ele = $("#fastpostsubmitline");
                if (message_ele && fastpostsubmitline_ele) {
                    $("#comiis_post_tab").append($(`
                    <div class="bg_f b_b comiis_input_style cl" style="display: none;"><div class="comiis_post_urlico b_b"><ul></ul></div></div>
                    `));


                    $.each(quickUBB.code, function (index, value) {
                        let ubbs = $(`<li class="quickUBBs"><a href="javascript:;" class="comiis_xifont f_d"><i class="comiis_font"></i>${value["key"]}</a></li>`);
                        ubbs.on("click", (e) => {
                            $.each($("#comiis_post_tab div.comiis_post_urlico ul li.quickUBBs a.comiis_xifont"), (i, v) => {
                                v.className = "comiis_xifont f_d";
                                if (v == e.target) {
                                    v.className = "comiis_xifont f_0";
                                }
                            });
                            let userInput = prompt(`请输入需要${value["key"]}的文字`, value["value"]);
                            if (userInput != null && userInput.trim()) {
                                comiis_addsmilies(userInput);
                            }

                        })
                        $("#comiis_post_tab div.comiis_post_urlico ul").append(ubbs[0]);
                    })


                } else {
                    console.log("未找到快捷回复框");
                }
            }
        },
        insertReplayUBB: () => { // 具体回复
            if (!GM_getValue("v35")) {
                console.log("v35未开启");
                return;
            }
            if (window.location.href.match(mt_config.rexp.reply_forum) == null) {
                console.log("未在回复界面");
                return;
            }

            let insertDOM = $(".comiis_post_urlico");
            if (!insertDOM) {
                console.log("未找到插入元素");
                return;
            }

            let parentEle = $(".comiis_post_urlico > ul")[0];
            let contentEle = $("#comiis_post_qydiv > ul");
            quickUBB.jqueryExtraFunction();
            $.each(quickUBB.code, function (key, value) {
                let ubbs = $(`<li class="quickUBBs"><a href="javascript:;" class="comiis_xifont f_d"><i class="comiis_font"></i>${value["key"]}</a></li>`);
                ubbs.on("click", (e) => {
                    let bottomEle = $(`#comiis_post_qydiv li[data-key='${value.key}']`);
                    if (!bottomEle.length) {
                        console.log("未找到该元素");
                        return
                    }
                    let contentIndex = 7 + Object.keys(quickUBB.code).indexOf(key);
                    $("#comiis_post_qydiv ul li").hide().eq(contentIndex).fadeIn();
                })
                parentEle.append(ubbs[0]);

                let ubbs_content = document.createElement("li");
                ubbs_content.setAttribute("style", "display: none;");
                ubbs_content.setAttribute("data-key", value["key"]);
                ubbs_content.innerHTML = `
                    <div class="comiis_styli_m f15" style="padding-top:12px;">
                        <div class="bg_e comiis_p5" style="border-radius:4px"><textarea class="comiis_pt kmshow f_c" id="comiis_input_${key}" style="font-size:15px" placeholder="请输入需要${value["key"]}的文字"></textarea></div>
                    </div>
                    <div class="comiis_styli_m f15 comiis_flex" style="padding-top:0;">
                        <div class="styli_tit"><button class="comiis_sendbtn bg_0 f_f" data-keyI="${key}" type="button">插入</button></div>
                        <div class="flex"></div>
                    </div>`;

                contentEle.append(ubbs_content);
                $(`.comiis_sendbtn[data-keyI="${key}"]`).on("click", () => {
                    let text = $(`#comiis_input_${key}`).val();
                    if (text == '') {
                        popup.open('请输入需要插入的内容', 'alert');
                        return;
                    }
                    if (quickUBB.code[key]["isFunc"]) {
                        text = quickUBB.set_rainbow(quickUBB.code[key]["num"], text);
                    }
                    if (quickUBB.code[key].hasOwnProperty("L")) {
                        text = quickUBB.code[key]['L'] + text + quickUBB.code[key]['R'];
                    }
                    $("#needmessage").insertAtCaret(text);
                    // if (quickUBB.code[key]["tagL"] != undefined || quickUBB.code[key]["tagR"] != undefined) {
                    //     $("#needmessage").moveCursorInCenterByText(quickUBB.code[key]["tagL"], quickUBB.code[key]["tagR"]);
                    // }
                    if (quickUBB.code[key].hasOwnProperty("cursorL")) {
                        $("#needmessage").moveCursorToCenterByTextWithLeft(quickUBB.code[key]["cursorL"], quickUBB.code[key]["cursorLength"]);
                    }
                    if (quickUBB.code[key].hasOwnProperty("cursorR")) {
                        $("#needmessage").moveCursorToCenterByTextWithRight(quickUBB.code[key]["cursorR"], quickUBB.code[key]["cursorLength"]);
                    }
                })
            });

        },
        set_rainbow: (num, text) => {
            if (text == "") {
                return '';
            }
            var wr_text = text;
            var wr_code, wr_rgb, r, g, b, i, j, istep
            var wr_rgb1, wr_rgb2, r1, g1, b1, r2, g2, b2

            r1 = g1 = b1 = r2 = g2 = b2 = 0;
            r = 0;
            g = 0;
            b = 0;
            istep = 0;
            wr_code = '';

            if (num == 1) {
                istep = 40;
                r = 255;
                i = 1;
                j = 0;
                do {
                    if (wr_text.charCodeAt(j) != 32) {
                        if (g + istep < 256) {
                            if (i == 1) g += istep;
                        } else if (i == 1) {
                            i = 2;
                            g = 255;
                        }
                        if (r - istep > -1) {
                            if (i == 2) r -= istep;
                        } else if (i == 2) {
                            i = 3;
                            r = 0;
                        }
                        if (b + istep < 256) {
                            if (i == 3) b += istep;
                        } else if (i == 3) {
                            i = 4;
                            b = 255;
                        }
                        if (g - istep > -1) {
                            if (i == 4) g -= istep;
                        } else if (i == 4) {
                            i = 5;
                            g = 0;
                        }
                        if (r + istep < 256) {
                            if (i == 5) r += istep;
                        } else if (i == 5) {
                            i = 6;
                            r = 255;
                        }
                        if (b - istep > -1) {
                            if (i == 6) b -= istep;
                        } else if (i == 6) {
                            i = 1;
                            b = 0;
                        }
                        wr_rgb = '';
                        wr_rgb += parseInt(r).toString(16).length == 1 ? 0 + parseInt(r).toString(16) : parseInt(r).toString(16);
                        wr_rgb += parseInt(g).toString(16).length == 1 ? 0 + parseInt(g).toString(16) : parseInt(g).toString(16);
                        wr_rgb += parseInt(b).toString(16).length == 1 ? 0 + parseInt(b).toString(16) : parseInt(b).toString(16);
                        wr_rgb = wr_rgb.toUpperCase();
                        wr_code += '[color=#' + wr_rgb + ']' + wr_text.charAt(j) + '[/color]';
                    } else {
                        wr_code += wr_text.charAt(j);
                    }
                    j++;
                } while (j < wr_text.length);
            } else if (num == 2) {
                istep = 255 / wr_text.length;
                for (i = 1; i < wr_text.length + 1; i++) {
                    if (wr_text.charCodeAt(i - 1) != 32) {
                        r += istep;
                        g += istep;
                        b += istep;
                        if (r > 255) r = 255;
                        if (g > 255) g = 255;
                        if (b > 255) b = 255;
                        wr_rgb = '';
                        wr_rgb += parseInt(r).toString(16).length == 1 ? 0 + parseInt(r).toString(16) : parseInt(r).toString(16);
                        wr_rgb += parseInt(g).toString(16).length == 1 ? 0 + parseInt(g).toString(16) : parseInt(g).toString(16);
                        wr_rgb += parseInt(b).toString(16).length == 1 ? 0 + parseInt(b).toString(16) : parseInt(b).toString(16);
                        wr_rgb = wr_rgb.toUpperCase();
                        wr_code += '[color=#' + wr_rgb + ']' + wr_text.charAt(i - 1) + '[/color]';
                    } else {
                        wr_code += wr_text.charAt(i - 1);
                    }
                }
            } else if (num == 3) {
                istep = 255 / wr_text.length;
                for (i = 1; i < wr_text.length + 1; i++) {
                    if (wr_text.charCodeAt(i - 1) != 32) {
                        r += istep;
                        g = 29;
                        b = 36;
                        if (r > 255) r = 255;
                        if (g > 255) g = 255;
                        if (b > 255) b = 255;
                        wr_rgb = '';
                        wr_rgb += parseInt(r).toString(16).length == 1 ? 0 + parseInt(r).toString(16) : parseInt(r).toString(16);
                        wr_rgb += parseInt(g).toString(16).length == 1 ? 0 + parseInt(g).toString(16) : parseInt(g).toString(16);
                        wr_rgb += parseInt(b).toString(16).length == 1 ? 0 + parseInt(b).toString(16) : parseInt(b).toString(16);
                        wr_rgb = wr_rgb.toUpperCase();
                        wr_code += '[color=#' + wr_rgb + ']' + wr_text.charAt(i - 1) + '[/color]';
                    } else {
                        wr_code += wr_text.charAt(i - 1);
                    }
                }
            } else if (num == 4) {
                istep = 255 / wr_text.length;
                for (i = 1; i < wr_text.length + 1; i++) {
                    if (wr_text.charCodeAt(i - 1) != 32) {
                        r = 0;
                        g = 174;
                        b += istep;
                        if (r > 255) r = 255;
                        if (g > 255) g = 255;
                        if (b > 255) b = 255;
                        wr_rgb = '';
                        wr_rgb += parseInt(r).toString(16).length == 1 ? 0 + parseInt(r).toString(16) : parseInt(r).toString(16);
                        wr_rgb += parseInt(g).toString(16).length == 1 ? 0 + parseInt(g).toString(16) : parseInt(g).toString(16);
                        wr_rgb += parseInt(255 - b).toString(16).length == 1 ? 0 + parseInt(255 - b).toString(16) : parseInt(255 - b).toString(16);
                        wr_rgb = wr_rgb.toUpperCase();
                        wr_code += '[color=#' + wr_rgb + ']' + wr_text.charAt(i - 1) + '[/color]';
                    } else {
                        wr_code += wr_text.charAt(i - 1);
                    }
                }
            }
            return wr_code;
        },
        jqueryExtraFunction: () => {
            $.fn.extend({
                insertAtCaret: function (myValue) {
                    var $t = $(this)[0];
                    if (document.selection) {
                        this.focus();
                        var sel = document.selection.createRange();
                        sel.text = myValue;
                        this.focus();
                    } else
                    if ($t.selectionStart || $t.selectionStart == '0') {
                        var startPos = $t.selectionStart;
                        var endPos = $t.selectionEnd;
                        var scrollTop = $t.scrollTop;
                        $t.value = $t.value.substring(0, startPos) + myValue + $t.value.substring(endPos, $t.value.length);
                        this.focus();
                        $t.selectionStart = startPos + myValue.length;
                        $t.selectionEnd = startPos + myValue.length;
                        $t.scrollTop = scrollTop;
                    } else {
                        this.value += myValue;
                        this.focus();
                    }
                },
                selectRange: function (start, end) {
                    if (end === undefined) {
                        end = start;
                    }
                    return this.each(function () {
                        if ('selectionStart' in this) {
                            this.selectionStart = start;
                            this.selectionEnd = end;
                        } else if (this.setSelectionRange) {
                            this.setSelectionRange(start, end);
                        } else if (this.createTextRange) {
                            var range = this.createTextRange();
                            range.collapse(true);
                            range.moveEnd('character', end);
                            range.moveStart('character', start);
                            range.select();
                        }
                    });
                },
                getCursorPosition: function () {
                    var el = $(this)[0];
                    var pos = 0;
                    if ('selectionStart' in el) {
                        pos = el.selectionStart;
                    } else if ('selection' in document) {
                        el.focus();
                        var Sel = document.selection.createRange();
                        var SelLength = document.selection.createRange().text.length;
                        Sel.moveStart('character', -el.value.length);
                        pos = Sel.text.length - SelLength;
                    }
                    return pos;
                },
                moveCursorInCenterByText: function (leftTextFlag, rightTextFlag) {
                    var el = $(this)[0];
                    var el_text = el.value;
                    for (let i = el.selectionStart - 1; i > 0; i--) {
                        let LText = el_text[i - 1];
                        let currentText = el_text[i];
                        if (LText == leftTextFlag && currentText == rightTextFlag) {
                            this.selectRange(i);
                            break;
                        }
                    }
                },
                moveCursorToCenterByTextWithLeft: function (leftMatchText, _length_) {
                    var el = $(this)[0];
                    var el_text = el.value;
                    for (let i = el.selectionStart - 1; i > 0; i--) {
                        let lTexts = el_text.substring(i - _length_, i);
                        if (lTexts == leftMatchText) {
                            this.selectRange(i);
                            break;
                        }
                    }
                },
                moveCursorToCenterByTextWithRight: function (rightMatchText, _length_) {
                    var el = $(this)[0];
                    var el_text = el.value;
                    for (let i = el.selectionStart - 1; i > 0; i--) {
                        let rTexts = el_text.substring(i, i + _length_);
                        if (rTexts == rightMatchText) {
                            this.selectRange(i + _length_);
                            break;
                        }
                    }
                }
            });
        }
    }



    function insert_blacklist() {
        if (location.href.match(mt_config.rexp.home_space_url) != null) {
            var white_space_ele = document.createElement("div");
            var black_list_ele = document.createElement("div");
            white_space_ele.className = "styli_h cl";
            black_list_ele.setAttribute("id", "blacklistallmain");
            black_list_ele.className = "comiis_myinfo_list bg_f cl";
            black_list_ele.innerHTML = `<li class="comiis_styli b_b cl">
                                            <textarea name="blacklistuid" id="blacklistuid" placeholder="输入想要屏蔽的用户的uid,多个uid用英文逗号分隔,如1234,5678,9231"></textarea>
                                            <textarea name="blacklistplate" id="blacklistplate" placeholder="输入想要屏蔽的板块,多个板块用顿号分隔,如求助问答、休闲灌水"></textarea>
                                            <a href="javascript:void(0)" id="blacklistsave" class="comiis_flex comiis_styli bg_f b_t cl">
                                                <div class="flex">保存</div>
                                            </a>
                                        </li>`;
            GM_addStyle(`
            #blacklistallmain{
                height: 232px;
            }
            #blacklistallmain li.comiis_styli{
                height: 180px;
            }
            #blacklistallmain #blacklistuid{
                width: 90%; 
                resize: none; 
                opacity: 0.7; 
                height: 70% !important; 
                line-height: inherit;
                -webkit-appearance: none;
                border: none !important;
                font-size: 14px;
                vertical-align: middle;
                background-color: transparent;
                border-bottom: 3px solid #efefef !important;
            }
            #blacklistallmain #blacklistplate{
                width: 90%; 
                resize: none; 
                opacity: 0.7; 
                height: 30% !important;
                line-height: inherit;
                -webkit-appearance: none;
                border: none !important;
                font-size: 14px;
                vertical-align: middle;
                background-color: transparent;
            }
            #blacklistsave{
                text-align: center;
                background: transparent !important;
                border-color: transparent !important;
            }
            `);
            let mt_commis_menu = document.getElementsByClassName("comiis_myinfo cl")[0];
            mt_commis_menu.appendChild(white_space_ele);
            mt_commis_menu.appendChild(black_list_ele);
            mt_commis_menu.appendChild(white_space_ele);
            document.getElementById("blacklistuid").textContent = localStorage.blacklistuid ? localStorage.blacklistuid : "";
            document.getElementById("blacklistplate").textContent = localStorage.blacklistplate ? localStorage.blacklistplate : "";
            document.getElementById("blacklistsave").onclick = () => {
                let blackListUIDValue = document.getElementById("blacklistuid").value;
                let blackListPlateValue = document.getElementById("blacklistplate").value;
                GM_setValue("blacklistuid", blackListUIDValue);
                GM_setValue("blacklistplate", blackListPlateValue);
                iosOverlay({
                    text: "保存成功",
                    duration: 2000,
                    icon: "https://www.helloimg.com/images/2022/05/24/ZoDS05.png"
                });
            }
        }
    }


    function link() {
        if (GM_getValue("v2")) {
            /*TEXT link to Clickable Hyperlink From Via*/
            var clearLink, excludedTags, filter, linkMixInit, linkPack, linkify, observePage, observer, setLink, url_regexp, xpath;
            url_regexp = /((https?:\/\/|www\.)[\x21-\x7e]+[\w\/]|(\w[\w._-]+\.(com|cn|org|net|info|tv|cc))(\/[\x21-\x7e]*[\w\/])?|ed2k:\/\/[\x21-\x7e]+\|\/|thunder:\/\/[\x21-\x7e]+=)/gi;
            clearLink = function (a) {
                var b;
                a = null != (b = a.originalTarget) ? b : a.target;
                if (null != a && "a" === a.localName && -1 !== a.className.indexOf("texttolink") && (b = a.getAttribute("href"), 0 !== b.indexOf("http") && 0 !== b.indexOf("ed2k://") && 0 !== b.indexOf("thunder://"))) return a.setAttribute("href", "http://" + b)
            };
            document.addEventListener("mouseover", clearLink);
            setLink = function (a) {
                if (null != a && a.hasOwnProperty("className") && typeof (a.parentNode.className) === "string" && -1 === a.parentNode.className.indexOf("texttolink") && "#cdata-section" !== a.nodeName) {
                    var b = a.textContent.replace(url_regexp, '<a href="$1" target="_blank" class="texttolink" style="border: 1px solid #f00;">$1</a>');
                    if (a.textContent.length !== b.length) {
                        var c = document.createElement("span");
                        c.innerHTML = b;
                        return a.parentNode.replaceChild(c, a)
                    }
                }
            };
            excludedTags = "a svg canvas applet input button area pre embed frame frameset head iframe img option map meta noscript object script style textarea code".split(" ");
            xpath = "//text()[not(ancestor::" + excludedTags.join(") and not(ancestor::") + ")]";
            filter = new RegExp("^(" + excludedTags.join("|") + ")$", "i");
            linkPack = function (a, b) {
                var c, d;
                if (b + 1E4 < a.snapshotLength) {
                    var e = c = b;
                    for (d = b + 1E4; b <= d ? c <= d : c >= d; e = b <= d ? ++c : --c) setLink(a.snapshotItem(e));
                    setTimeout(function () {
                        return linkPack(a, b + 1E4)
                    }, 15)
                } else
                    for (e = c = b, d = a.snapshotLength; b <= d ? c <= d : c >= d; e = b <= d ? ++c : --c) setLink(a.snapshotItem(e))
            };
            linkify = function (a) {
                a = document.evaluate(xpath, a, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
                return linkPack(a, 0)
            };
            observePage = function (a) {
                for (a = document.createTreeWalker(a, NodeFilter.SHOW_TEXT, {
                        acceptNode: function (a) {
                            if (!filter.test(a.parentNode.localName)) return NodeFilter.FILTER_ACCEPT
                        }
                    }, !1); a.nextNode();) setLink(a.currentNode)
            };
            observer = new window.MutationObserver(function (a) {
                var b, c;
                var d = 0;
                for (b = a.length; d < b; d++) {
                    var e = a[d];
                    if ("childList" === e.type) {
                        var g = e.addedNodes;
                        var f = 0;
                        for (c = g.length; f < c; f++) e = g[f], observePage(e)
                    }
                }
            });
            linkMixInit = function () {
                if (window === window.top && "" !== window.document.title) return linkify(document.body), observer.observe(document.body, {
                    childList: !0,
                    subtree: !0
                })
            };
            var clearlinkF = function (a) {
                    var url = a.getAttribute("href");
                    if (0 !== url.indexOf("http") && 0 !== url.indexOf("ed2k://") && 0 !== url.indexOf("thunder://")) return a.setAttribute("href", "http://" + url)
                },
                clearlinkE = function () {
                    for (var a = document.getElementsByClassName("texttolink"), b = 0; b < a.length; b++) clearlinkF(a[b])
                };
            setTimeout(clearlinkE, 2500);
            setTimeout(linkMixInit, 1100);
        }
    }

    function online_status() {
        if (window.location.href.match(mt_config.rexp.forum_post_pc)) {
            var quanju = [];
            var cishu = 0;
            for (var sss = document.getElementsByClassName("pls favatar"), ll = 0; ll < sss.length; ll++) {
                var sendmessage = sss[ll].getElementsByClassName("comiis_o cl")
                if (sendmessage.length == 0) {} else {
                    var sendmessageurl = sendmessage[0].getElementsByTagName('a')[1].href;

                    let xhr = new XMLHttpRequest();
                    xhr.open("GET", sendmessageurl, false);
                    xhr.onreadystatechange = function () {
                        if (xhr.readyState == 4) {
                            let pattern = /正在.*]/g;
                            let str = xhr.responseText;
                            let newstr = str.match(pattern)[0];
                            quanju.push(newstr);
                        }
                    }
                    xhr.send();
                    if (quanju[cishu].match('离线')) {
                        cishu = cishu + 1;
                        var imi2 = document.createElement('img');
                        imi2.src = 'https:\/\/cdn2.bbs.binmt.cc\/static\/image\/smiley\/doge\/54.png';
                        imi2.smilied = '1353';
                        imi2.border = "0";
                        imi2.style = 'float:right';
                        sss[ll].insertAdjacentElement('afterbegin', imi2);
                    } else {
                        cishu = cishu + 1;
                        var imi = document.createElement('img');
                        imi.src = 'https:\/\/cdn2.bbs.binmt.cc\/static\/image/smiley\/doge\/35.png';
                        imi.smilied = '1384';
                        imi.border = "0";
                        imi.style = 'float:right';
                        sss[ll].insertAdjacentElement('afterbegin', imi);
                    }
                }
            }
        }
    }

    function reviews() {
        if (GM_getValue("v6") && location.href.match(mt_config.rexp.forum_post)) {
            var hongbao = document.getElementsByClassName("bottom_zhan y");
            if (hongbao.length == 0) {} else {
                var cishu2 = 0;
                var replyhref = hongbao[cishu2].getElementsByTagName('a')[0].href;
                var page = replyhref.match(mt_config.rexp.forum_post_page)[1];
                //console.log(page);
                for (cishu2 = 0; cishu2 < hongbao.length; cishu2++) {
                    if (hongbao[cishu2].children.length == 1) {
                        var rewardhref = hongbao[cishu2].getElementsByTagName('a')[0].href.replace('mod=post&', 'mod=misc&');
                        rewardhref = rewardhref.replace("action=reply&", "action=comment&");
                        var reviews_href = rewardhref + '&extra=page%3D1&page=' + page;
                        let reviews_pid = hongbao[cishu2].parentElement.parentElement.id.replace("pid", "&pid=");
                        reviews_href = reviews_href + reviews_pid;
                        //console.log(rewardhref)
                        var oa = document.createElement('a');
                        var ob = document.createElement('i');
                        var lm = document.getElementsByClassName("bottom_zhan y")[cishu2];
                        oa.href = reviews_href;
                        oa.className = "f_c dialog";
                        ob.style = "content: url(https://s1.ax1x.com/2020/04/26/Jcq8VU.png);height: 15px;";
                        ob.className = "comiis_font mt_review";
                        ob.innerHTML = "";
                        oa.appendChild(ob);
                        let review_username = hongbao[cishu2].parentElement.parentElement.getElementsByClassName("top_user f_b")[0].text;
                        oa.onclick = function () {
                            let click_time = Date.now();
                            var mt_interval = setInterval(function () {
                                let run_time = parseInt((Date.now() - click_time) / 1000);
                                if (run_time >= 5) {
                                    console.log("超时");
                                    clearInterval(mt_interval);
                                } else if (document.querySelector("div[id=ntcmsg_popmenu]>div>span.f_c") != null) {
                                    console.log("存在,清理定时器");
                                    console.log("点评用户:", review_username);
                                    console.log("该对象出现用时:", run_time);
                                    try {
                                        document.querySelector("div[id=ntcmsg_popmenu]>div>span.f_c").innerText = "点评 " + review_username;
                                    } catch (err) {
                                        console.log("修改点评失败", err);
                                    }
                                    clearInterval(mt_interval);
                                }
                            }, 100)
                        }
                        lm.insertAdjacentElement('afterBegin', oa);
                    } else {
                        console.log("已有点评按钮,无需再次添加");
                    }
                }
            }
        }
    }

    function changeFontColorToBlack() {
        if (GM_getValue("v3") && location.href.match(mt_config.rexp.forum_post)) {
            var hide = document.getElementsByTagName('font');
            var i = 0;
            for (i = 0; i < hide.length; i++) {
                hide[i].removeAttribute('color');
                hide[i].removeAttribute('style');
                hide[i].removeAttribute('size');
            }
            var content = document.getElementsByClassName("comiis_message bg_f view_all cl message");
            var rule = /<br>|&nbsp;|<font.*?>|<\/font>|<strike>|<strong>|<i>|<u>|align=".*?"/g;
            var j = 0,
                k = 1;
            for (j = 0; j < content.length; j++ & k++) {
                content[j].innerHTML = content[j].innerHTML.replace(rule, '');
            }
        }

    }

    function collect() {
        var own_formhash = document.querySelector("#scform > input[type=hidden]:nth-child(1)").value;
        var collect_href_id = window.location.href.match(mt_config.rexp.forum_post_pc_page)[1];
        var collect_href = 'https:\/\/bbs.binmt.cc\/home.php?mod=spacecp&ac=favorite&type=thread&id=' + collect_href_id + '&formhash=' + own_formhash;
        var new_collect = document.createElement('span');
        var old_Suspended = document.getElementById("scrolltop");
        new_collect.innerHTML = '<a href="' + collect_href + '" id="k_favorite" onclick="showWindow(this.id, this.href, \'get\', 0);" onmouseover="this.title = $(\'favoritenumber\').innerHTML + \' 人收藏\'" ><img src="https:\/\/s1.ax1x.com\/2020\/04\/29\/JTk3lD.gif" height="26" width="26" style="position:absolute;top:10px;left:11px"><\/a>';
        old_Suspended.insertAdjacentElement('afterBegin', new_collect);
    }

    function quick_reply() { //快捷回复
        document.querySelector("#scrolltop > span:nth-child(2) > a").onclick = function () {
            showWindow('reply', this.href);
            var a = document.querySelector("#postsubmit");
            setTimeout(
                'document.querySelector("#moreconf").innerHTML=document.querySelector("#moreconf").innerHTML+\'<button type="button" id = "insertspace2" style="float: left;">一键空格<\/button>\';document.querySelector("#insertspace2").onclick=function(){document.querySelector("#postmessage").value=document.querySelector("#postmessage").value+"           ";}', 200)
        }


    }

    function user_level() {
        var a = document.getElementsByClassName("pls favatar");
        var i = 0;
        var e = "0级";
        for (i = 0; i < a.length; i++) {
            var b = a[i].getElementsByTagName("em")[1].outerText;
            var c = a[i].getElementsByTagName("tr")[0];
            var d = document.createElement("td");
            switch (b) {
                case "幼儿园":
                    e = "1级";
                    break;
                case "小学生":
                    e = "2级";
                    break;
                case "初中生":
                    e = "3级";
                    break;
                case "高中生":
                    e = "4级";
                    break;
                case "大学生":
                    e = "5级";
                    break;
                case "硕士生":
                    e = "6级";
                    break;
                case "博士生":
                case "实习版主":
                case "版主":
                case "审核员":
                    e = "7级";
                    break;
                case "博士后":
                case "超级版主":
                case "网站编辑":
                    e = "8级";
                    break;
                case "管理员":
                case "信息监察员":
                    e = "9级";
                    break;


            }
            d.innerHTML = '<p><a class="dj">' + e + '<\/a><\/p>Lv';
            c.appendChild(d);
        }

    }

    function showUserUID() { //显示用户的uid
        if (GM_getValue("v15") &&
            ((window.location.href.match(mt_config.rexp.forum_post_guide_url) ||
                (window.location.href.match(mt_config.rexp.forum_post)) ||
                (window.location.href.match(mt_config.rexp.plate_url)) ||
                (window.location.href.match(mt_config.rexp.search_url))
            ))) {
            window.findUserFormList = false;
            window.findUserFormListNums = 0;
            let findSetInval = setInterval(function () {
                let formList = mt_config.dom_obj.comiis_formlist() ? mt_config.dom_obj.comiis_formlist() : [];
                formList = formList.length == 0 ? mt_config.dom_obj.comiis_postli() : formList;
                formList = formList.length == 0 ? mt_config.dom_obj.comiis_mmlist() : formList;
                window.findUserFormList = formList.length ? true : false;
                if (findUserFormListNums >= 10) {
                    console.log("未出现,清理定时器");
                    clearInterval(findSetInval);
                }
                if (window.findUserFormList) {
                    GM_addStyle(`
                    .comiis_postli_top.bg_f.b_t h2{
                        height: auto;
                    }`);

                    function matchUIDByArray(data) {
                        for (let i = 0; i < data.length; i++) {
                            let url = data[i].href;
                            let uid = url.match(mt_config.rexp.mt_uid);
                            if (uid) {
                                return uid[1];
                            }
                        }
                        return null
                    }
                    $.each(formList, (index, value) => {
                        let mtUIDOM = value.getElementsByClassName("mt_uid_set");
                        if (!mtUIDOM.length) {
                            let childrenByATagetElement = value.getElementsByTagName("a");
                            let mt_uid = null;
                            mt_uid = matchUIDByArray(childrenByATagetElement);
                            if (mt_uid != null) {
                                let uid_control = document.createElement("a");
                                let mtUidDomInsertElement = value.getElementsByClassName("top_lev")[0];
                                let uid_control_height = getComputedStyle(mtUidDomInsertElement, null)["height"];
                                let uid_control_margin = getComputedStyle(mtUidDomInsertElement, null)["margin"];
                                let uid_control_padding = getComputedStyle(mtUidDomInsertElement, null)["padding"];
                                let uid_control_line_height = getComputedStyle(mtUidDomInsertElement, null)["line-height"];
                                let uid_control_font = getComputedStyle(mtUidDomInsertElement, null)["font"];
                                uid_control.className = "mt_uid_set";
                                uid_control.style = `
                                    font: ${uid_control_font};
                                    background: rgb(255, 118, 0);
                                    color: white;
                                    float: left;
                                    margin: ${uid_control_margin};
                                    padding: ${uid_control_padding};
                                    height: ${uid_control_height};
                                    line-height: ${uid_control_line_height};
                                    border-radius: 1.5px;`;
                                uid_control.innerHTML = "UID:" + mt_uid;
                                uid_control.onclick = function () {
                                    try {
                                        GM_setClipboard(mt_uid);
                                        iosOverlay({
                                            text: mt_uid + "已复制",
                                            duration: 2000,
                                            icon: "https://www.helloimg.com/images/2022/05/24/ZoDS05.png"
                                        });
                                        console.log("复制:", mt_uid)
                                    } catch (err) {
                                        iosOverlay({
                                            text: mt_uid + "复制失败",
                                            duration: 2000,
                                            icon: "https://whitesev.gitee.io/static_resource/ios_loading/img/cross.png"
                                        });
                                    }
                                }

                                mtUidDomInsertElement.parentElement.append(uid_control);
                            }
                        }
                    })
                    console.log("出现,清理定时器");
                    clearInterval(findSetInval);
                } else {
                    findUserFormListNums += 1;
                }

            }, 800)

        }
    }

    function shield_user() { // 屏蔽用户
        if (window.location.href.match(mt_config.rexp.forum_guide_url) || window.location.href.match(mt_config.rexp.plate_url)) {
            console.log("屏蔽YH——1");
            let infos = document.querySelectorAll(".comiis_forumlist .forumlist_li");
            let black_list = GM_getValue("blacklistuid") ? GM_getValue("blacklistuid") : "";
            let black_list_array = black_list.split(",");
            Array.from(infos).forEach((info) => {
                let usr = info.getElementsByClassName("wblist_tximg")[0].href;
                let usr_uid = usr.match(mt_config.rexp.mt_uid)[1];
                if (black_list_array.indexOf(usr_uid) != -1) {
                    console.log("屏蔽用户:" + usr_uid);
                    info.setAttribute("style", "display:none !important;");
                }
            })
        }
        if (window.location.href.match(mt_config.rexp.forum_post)) {
            console.log("屏蔽YH——2");
            let comments = document.querySelectorAll(".comiis_postlist .comiis_postli");
            let black_list = GM_getValue("blacklistuid") ? GM_getValue("blacklistuid") : "";
            let black_list_array = black_list.split(",");
            Array.from(comments).forEach((comment) => {
                let usr = comment.getElementsByClassName("postli_top_tximg")[0].href;
                let usr_uid = usr.match(mt_config.rexp.mt_uid)[1];
                if (black_list_array.indexOf(usr_uid) != -1) {
                    console.log("屏蔽用户:" + usr_uid);
                    comment.setAttribute("style", "display:none !important;");
                }
            })
        }

    }

    function shield_plate() { // 屏蔽板块
        if (window.location.href.match(mt_config.rexp.forum_guide_url)) {
            console.log("屏蔽BK");
            let infos = document.querySelectorAll(".comiis_forumlist .forumlist_li");
            let black_list = GM_getValue("blacklistplate") ? GM_getValue("blacklistplate") : "";
            let black_list_array = black_list.split("、");
            Array.from(infos).forEach((info) => {
                let from_plate = info.querySelector(".forumlist_li_time a.f_d").text;
                from_plate = from_plate.replace(/\s*/g, "");
                from_plate = from_plate.replace("来自", "");
                if (black_list_array.indexOf(from_plate) != -1) {
                    console.log("屏蔽板块:" + from_plate);
                    info.setAttribute("style", "display:none !important;");
                }
            })
        }
    }

    function autoExpendFullText() { //自动展开
        if (GM_getValue("v18") && location.href.match(mt_config.rexp.forum_post)) {
            GM_addStyle(`
            div.comiis_message.bg_f.view_one.b_b.cl.message > div.comiis_messages.comiis_aimg_show.cl{
                max-height: inherit !important;
                overflow-y: inherit !important;
                position: inherit !important;
            }
            .comiis_lookfulltext_key,
            .comiis_lookfulltext_bg{
                display: none !important;
            }`)
        }

    }

    function recoveryIMGWidth() { // 图片宽度
        if (GM_getValue("v16") && location.href.match(mt_config.rexp.forum_post)) {
            GM_addStyle(`
            .comiis_messages img{
                max-width: 100% !important;
            }
            `)
        }
    }

    function post_setting_js() { //帖子内需要重复加载的脚本

        tryCatch(shield_user);
        tryCatch(reviews);
        tryCatch(link);
        tryCatch(showUserUID);
        tryCatch(previewPictures);
        tryCatch(changeFontColorToBlack);
        popup.init()
    }

    function auto_load_next_comments(post_comments_list) { //自动加载下一页的评论
        $("#loading-comment-tip")[0].parentElement.style.display = "";
        let next_page_url = post_comments_list.children[2].href
        let isloding_flag = false;
        console.log("获取下一页:", next_page_url);
        if (next_page_url.indexOf("javascript:;") != -1) {
            console.log(post_comments_list);
            console.log("无多页评论");
            $("#loading-comment-tip")[0].parentElement.style.display = "none";
            return;
        }

        function _loadNextComments_() {
            if (isloding_flag == false) {
                isloding_flag = true;
                $("#loading-comment-tip").text("正在加载评论中...");
                $("#loading-comment-tip")[0].parentElement.style.display = "";
                $.get(next_page_url, function (data, status, xhr) {
                    console.log("正在请求的下一页url", next_page_url);
                    let postlist = $(data);
                    let kqideSourceNode = $(".comiis_postlist.kqide");
                    let postDOM = postlist.find(".comiis_postlist.kqide").html();
                    let get_next_page_url = postlist.find(".nxt");
                    if (get_next_page_url.length != 0) {
                        console.log("成功获取到下一页-评论");
                        next_page_url = get_next_page_url.attr("href");
                        $("#loading-comment-tip")[0].parentElement.style.display = "none";
                    } else {
                        console.log("评论全部加载完毕,关闭监听事件");
                        $(".comiis_page.bg_f").remove();
                        $("#loading-comment-tip").text("已加载完所有评论")
                        $("#loading-comment-tip")[0].parentElement.style.display = "";
                        $("#loading-comment-tip").unbind("click", _loadNextComments_);
                        $(window).unbind("scroll");

                    }
                    isloding_flag = false;
                    kqideSourceNode.append(postDOM);
                    post_setting_js();
                })

            } else {
                console.log("正在加载中请稍后");
            }
        }
        $(window).bind("scroll", function () {
            // scroll at bottom
            if (Math.ceil($(window).scrollTop() + $(window).height() + 150) >= $(document).height()) {
                // load data
                _loadNextComments_();
            }
        })
        $("#loading-comment-tip").text("请上下滑动或点击加载");
        $("#loading-comment-tip").bind("click", _loadNextComments_);
    }

    function auto_load_prev_comments() { //自动加载上一页的评论
        let post_comments_list = document.querySelector(".comiis_page.bg_f");
        let prev_page_url = post_comments_list.children[0].href
        let isloding_flag = false;
        console.log("获取上一页:", prev_page_url);
        $("#loading-comment-tip-prev").text("请上下滑动或点击加载");
        $("#loading-comment-tip-prev").bind("click", loadPrevComments);

        function loadPrevComments() {
            if (isloding_flag) {
                console.log("正在加载上一页中请稍后");
            } else {
                isloding_flag = true;
                $("#loading-comment-tip-prev").text("正在加载评论中...");
                $("#loading-comment-tip-prev")[0].parentElement.style.display = "";
                $.get(prev_page_url, function (data, status, xhr) {
                    console.log("正在请求的上一页评论:", prev_page_url);
                    let postlist = $(data);
                    let kqideSourceNode = $(".comiis_postlist.kqide");
                    let postDOM = postlist.find(".comiis_postlist.kqide").html();
                    let get_pregv_page_url = postlist.find(".prev");
                    if (get_pregv_page_url.length != 0) {
                        console.log("成功获取到上一页-评论");
                        prev_page_url = get_pregv_page_url.attr("href");
                        $("#loading-comment-tip-prev")[0].parentElement.style.display = "none";
                        isloding_flag = false;
                        kqideSourceNode.prepend(postDOM);
                        post_setting_js();
                    } else {
                        isloding_flag = false;
                        kqideSourceNode.prepend(postDOM);

                        console.log("上一页评论全部加载完毕,关闭监听事件");
                        let page_title = postlist.find(".comiis_viewtit")[0].outerHTML;
                        console.log($(page_title));
                        kqideSourceNode.prepend($(page_title)[0]);
                        post_setting_js();
                        // $(".comiis_page.bg_f").remove();
                        $("#loading-comment-tip-prev").remove();
                        $("#loading-comment-tip-prev").unbind("click", loadPrevComments);
                        $(window).unbind("scroll");

                    }

                })
            }
            // $(window).unbind("scroll",loadPrevComments);
        }
        $(window).bind("scroll", function () {
            if ($(window).scrollTop() <= 50) {
                loadPrevComments();
            }
        });
    }

    function loadNextComments() {
        if (GM_getValue("v21") && window.location.href.match(mt_config.rexp.forum_post)) {
            let tip_html = `
            <div class="comiis_multi_box bg_f b_t">
                <label class="comiis_loadbtn bg_e f_d" id="loading-comment-tip">
                正在等待页面加载完毕
                </label>
            </div>`;
            $(".comiis_bodybox").append($(tip_html));
            let commentsEle = document.querySelector(".comiis_pltit span.f_d") || document.querySelector("#comiis_foot_memu .comiis_kmvnum");
            if (document.querySelector(".comiis_pltit h2") && document.querySelector(".comiis_pltit h2").textContent.indexOf("暂无评论") != -1) {
                console.log("暂无评论");
                $("#loading-comment-tip")[0].parentElement.style.display = "none";
                return;
            }
            let commentsNum = parseInt(commentsEle.textContent);
            if (commentsNum >= 10) {
                let setAutoLoadInterval = setInterval(function () {
                    let post_comments_list = document.querySelector(".comiis_page.bg_f"); //评论列表
                    if (post_comments_list) {
                        auto_load_next_comments(post_comments_list);
                        clearInterval(setAutoLoadInterval);
                    } else {
                        console.log("正在等待下一页列表元素出现");
                    }
                }, 500)
            } else {
                console.log("无多页评论");
                $("#loading-comment-tip")[0].parentElement.style.display = "none";
            }
        }
    }

    function loadPrevComments() {
        if (GM_getValue("v32") && window.location.href.match(mt_config.rexp.forum_post)) {
            if (!document.querySelector(".comiis_pltit span.f_d")) {
                console.log("当前不在第一页,加载上一页评论");
                let tip_html = `
                <div class="comiis_multi_box bg_f b_t">
                    <label class="comiis_loadbtn bg_e f_d" id="loading-comment-tip-prev">
                    正在等待页面加载完毕
                    </label>
                </div>`;
                $(".comiis_bodybox script")[0].after($(tip_html)[0]);
                if (document.querySelector(".comiis_pltit h2") && document.querySelector(".comiis_pltit h2").textContent.indexOf("暂无评论") != -1) {
                    console.log("暂无上一页评论");
                    $("#loading-comment-tip-prev")[0].parentElement.style.display = "none";
                    return;
                }
                auto_load_prev_comments();
            }
        }
    }

    function Hooks() {
        return {
            initEnv: function () {
                Function.prototype.hook = function (realFunc, hookFunc, context) {
                    var _context = null; //函数上下文
                    var _funcName = null; //函数名

                    _context = context || window;
                    _funcName = getFuncName(this);
                    _context['realFunc_' + _funcName] = this;

                    console.log(window);

                    if (_context[_funcName].prototype && _context[_funcName].prototype.isHooked) {
                        console.log("Already has been hooked,unhook first");
                        return false;
                    }

                    function getFuncName(fn) {
                        // 获取函数名
                        var strFunc = fn.toString();
                        var _regex = /function\s+(\w+)\s*\(/;
                        var patten = strFunc.match(_regex);
                        if (patten) {
                            return patten[1];
                        };
                        return '';
                    }
                    try {
                        eval('_context[_funcName] = function ' + _funcName + '(){\n' +
                            'var args = Array.prototype.slice.call(arguments,0);\n' +
                            'var obj = this;\n' +
                            'hookFunc.apply(obj,args);\n' +
                            "return _context['realFunc_" + _funcName + "'].apply(obj,args);\n" +
                            '};');
                        _context[_funcName].prototype.isHooked = true;
                        return true;
                    } catch (e) {
                        console.log("Hook failed,check the params.");
                        return false;
                    }
                }
                Function.prototype.unhook = function (realFunc, funcName, context) {
                    var _context = null;
                    var _funcName = null;
                    _context = context || window;
                    _funcName = funcName;
                    if (!_context[_funcName].prototype.isHooked) {
                        console.log("No function is hooked on");
                        return false;
                    }
                    _context[_funcName] = _context['realFunc' + _funcName];
                    delete _context['realFunc_' + _funcName];
                    return true;
                }
            },
            cleanEnv: function () {
                if (Function.prototype.hasOwnProperty("hook")) {
                    delete Function.prototype.hook;
                }
                if (Function.prototype.hasOwnProperty("unhook")) {
                    delete Function.prototype.unhook;
                }
                return true;
            }
        };
    }

    function pageAfterDOMChangeRunFunction() { // 当页面内容元素添加时需要执行的函数
        if (window.location.href.match(/bbs.binmt.cc\/forum/)) {
            document.body.addEventListener("DOMNodeInserted", (event) => {
                let ele = event.target;
                if (ele.className != null && ele.className.indexOf("comiis_forumlist") != -1) {
                    beforeHookRun();
                }
            })

            function beforeHookRun() {
                tryCatch(showUserUID);
                tryCatch(previewPictures);
                tryCatch(shield_user);
                tryCatch(shield_plate);
            }


        }
    }

    function previewPictures() { // 贴外预览图片
        if (GM_getValue("v34") &&
            ((window.location.href.match(mt_config.rexp.forum_post_guide_url) ||
                (window.location.href.match(mt_config.rexp.forum_post)) ||
                (window.location.href.match(mt_config.rexp.plate_url)) ||
                (window.location.href.match(mt_config.rexp.search_url))
            ))) {
            function getFormList() {
                let formList = mt_config.dom_obj.comiis_formlist() ? mt_config.dom_obj.comiis_formlist() : [];
                formList = formList.length == 0 ? mt_config.dom_obj.comiis_postli() : formList;
                formList = formList.length == 0 ? mt_config.dom_obj.comiis_mmlist() : formList;
                return formList;
            }

            let formlist = null;
            let isFindFormList = false;
            let findFormListNums = 0;
            let waitFormListAppear = setInterval(function () {
                if (isFindFormList) {
                    formlist = getFormList();
                    main();
                    clearInterval(waitFormListAppear)
                } else {
                    if (findFormListNums >= 10) {
                        console.log("未出现帖子或寻找贴子超时,清理定时器");
                        clearInterval(waitFormListAppear);
                    }
                    isFindFormList = getFormList().length ? true : false;
                    findFormListNums += 1;
                }
            }, 800);

            function getPreviewPicturesEle(dom) {
                let pre_dom = document.createElement("li");
                pre_dom.className = "f_c";
                pre_dom.setAttribute("style", "width:25vw;");
                let imageDOM = dom.querySelectorAll(".comiis_pyqlist_img").length ? dom.querySelectorAll(".comiis_pyqlist_img") : dom.querySelectorAll(".comiis_pyqlist_imgs");
                if (imageDOM.length) {
                    pre_dom.innerHTML = '<a class="topreimg">预览图片</a>';
                    $.each(imageDOM, function (i, v) {
                        let imgs = v.querySelectorAll("img");
                        Array.from(imgs).forEach(_img_ => {
                            pre_dom.innerHTML = pre_dom.innerHTML + `<img data-src="${_img_.getAttribute("src")}">`;
                        })
                    })
                    pre_dom.onclick = function () {
                        let img_list = $(this)[0].querySelectorAll("img");
                        let img_items = [];
                        let now_picture_num = 1;
                        for (var k = 0; k < img_list.length; k++) {
                            let img_url = img_list[k].getAttribute("data-src");
                            let img_dict = {};
                            let full_picture = null;
                            if (img_url.match(/res-bbs.mt2.cn/) && img_url.match(/size=[\d]*x9999/)) {
                                console.log("gif图");
                                full_picture = img_url;
                            } else {
                                // full_picture = img_url.replace(/size=[\d]*x[\d]*/, "size=600x1000");
                                // full_picture = full_picture.replace(/_[\d]*_[\d]*.jpg/, "_600_1000.jpg");
                                full_picture = img_url;
                            }

                            img_dict["src"] = full_picture;
                            img_dict["srct"] = img_url;
                            img_dict["title"] = "图片" + now_picture_num.toString();
                            img_dict["ID"] = hex_md5(img_url);
                            img_items.push(img_dict);
                            now_picture_num = now_picture_num + 1;
                        }
                        $('#picture_review').nanogallery2('destroy');
                        jQuery("#picture_review").nanogallery2({
                            thumbnailWidth: 150,
                            thumbnailHeight: 150,
                            items: img_items,
                            thumbnailSelectable: false
                        });
                        window.location.hash = '#nanogallery/picture_review/0/' + img_items[0]["ID"];
                    }
                    return pre_dom;
                } else {
                    // pre_dom.innerHTML = '无';
                    return null;
                }

            }

            function main() {
                // blackHome.loadJS("https://lf26-cdn-tos.bytecdntp.com/cdn/expire-1-M/nanogallery2/3.0.5/jquery.nanogallery2.min.js");
                if (window.hasOwnProperty("loadPreviewPictureCSS")) {
                    console.log("已加载过预览图片");
                } else {
                    blackHome.loadCSS("https://lf3-cdn-tos.bytecdntp.com/cdn/expire-1-M/nanogallery2/3.0.5/css/nanogallery2.min.css");
                    blackHome.loadCSS("https://lf3-cdn-tos.bytecdntp.com/cdn/expire-1-M/nanogallery2/3.0.5/css/nanogallery2.woff.min.css");
                    window.loadPreviewPictureCSS = true;
                }
                let global_review = document.createElement("div");

                global_review.id = "picture_review";
                // $(".comiis_bodybox")[0].prepend(global_review);  // debug使用
                global_review.setAttribute("style", "display:none");
                document.body.append(global_review);
                $.each(formlist, function (index, value) {
                    let formBottomEle = value.querySelectorAll(".comiis_znalist_bottom.b_t.cl ul.cl li");
                    if (formBottomEle.length == 3) {
                        let clParentEle = formBottomEle[0].parentElement;
                        let previewPicturesEle = getPreviewPicturesEle(value);
                        if (previewPicturesEle != null) {
                            Array.from(formBottomEle).forEach(e => {
                                e.setAttribute("style", "width: 25vw");
                            });
                            clParentEle.append(previewPicturesEle);
                        }


                    } else if (formBottomEle.length == 4) {
                        console.log("已经插入过预览图片");
                    } else {
                        console.log("没有阅读、评论、赞");
                    }

                })
            }
        }
    }

    function repairClearSearchInput() { // 修复搜索的清空按钮
        if (GM_getValue("v36") && window.location.href.match(mt_config.rexp.search_url)) {
            let $search_input = $(".ssclose.bg_e.f_e");
            if ($search_input) {
                $search_input.click(function (e) {
                    e.preventDefault();
                    $("#scform_srchtxt").val("")
                })
            } else {
                log.error("搜索界面: 获取清空按钮失败");
            }
        }

    }

    function repairUserSpace() { // 修复无法正确进入别人的空间
        if (GM_getValue("v37") && window.location.href.match(mt_config.rexp.home_url_brief)) {
            let href_params = window.location.href.match(/home.php\?(.+)/gi);
            href_params = href_params[href_params.length - 1];
            let params_split = href_params.split("&");
            if (params_split.length == 2 && href_params.indexOf("uid=") != -1 && href_params.indexOf("mod=space") != -1) {
                window.location.href = window.location.href + "&do=profile";
            }
        }

    }

    async function postForumKGChartBed() { // 发帖快捷图片上传 康哥图床
        if (!window.location.href.match(mt_config.rexp.post_forum) &&
            !window.location.href.match(mt_config.rexp.edit_forum) &&
            !window.location.href.match(mt_config.rexp.reply_forum) &&
            !window.location.href.match(mt_config.rexp.forum_post) ||
            !GM_getValue("v42")) {
            return
        };
        GM_addStyle(`
        .comiis_post_imglist li.up_btn_kggzs a{
            display: block;
            width: 50px;
            height: 50px;
            line-height: 50px;
            padding: 4px;
            border-radius: 2px;
            border-style: dashed;
        }
        .comiis_post_imglist li.up_btn_kggzs a i {
            position: absolute;
            top: 11px;
            left: 5px;
            z-index: 8;
            font-size: 26px;
            width: 50px;
            height: 50px;
            line-height: 50px;
            text-align: center;
        }
        .comiis_post_imglist li.up_btn_kggzs a input {
            position:absolute;
            top:11px;
            left:5px;
            height:50px;
            width:50px;
            z-index:10;
            opacity:0
        }
        .comiis_post_imglist li .delImg {
            position:absolute;
            top:-5px;
            left:-5px
        }
        .comiis_post_imglist li .delImg i {
            font-size:24px;
            background:#fff;
            border-radius:50%
        }
        #imglist_kggzs{
            overflow-y: auto;
            max-height: 200px;
        }
        #kggzsfiledata{
            display:none;
        }
        `);
        let imgListParent = $(".comiis_upbox.comiis_allowpostimg.bg_f.cl");
        if (!imgListParent.length) {
            imgListParent = $("#comiis_post_tab .comiis_upbox.bg_f.b_t.b_b.cl");
            if (!imgListParent.length) {
                console.log("未找到图片列表父元素");
                return;
            }
        };
        let imgUploadBtn = `
                <ul id="imglist_kggzs" class="comiis_post_imglist cl">
                    <li class="up_btn_kggzs">
                        <a href="javascript:;" class="bg_e b_ok f_d" id="kggzsChartBedBtnUpload">
                            <p style="position: relative;bottom: 20px;text-align: center;color: #000;">kggzs</p>
                            <i class="comiis_font"></i>
                            <input type="file" name="Filedata" id="kggzsfiledata" accept="image/*" multiple="multiple">
                            <p style="position: relative;bottom: 30px;text-align: center;">20MB</p>
                        </a>
                    </li>				
                </ul>
        `;
        imgListParent.append($(imgUploadBtn));
        let chartBedUrl = "https://img.kggzs.cn/api/v1";
        let chartBedUser = GM_getValue("KggzsChartBedUser");
        let chartBedPwd = GM_getValue("KggzsChartBedPwd");
        let chartBedToken = null;
        let loginStatus = false; // 登录状态
        let tokenStatus = false; //token状态
        let code = {
            401: "未登录或授权失败",
            403: "管理员关闭了接口功能",
            429: "超出请求配额,请求受限",
            500: "服务端出现异常"
        }

        function getToken() {
            return new Promise(res => {
                let formData = new FormData();
                formData.append("email", "[email protected]");
                formData.append("password", "893177236");
                GM_xmlhttpRequest({
                    url: `${chartBedUrl}/tokens`,
                    method: "POST",
                    data: formData,
                    headers: {
                        "Accept": "application/json"
                    },
                    onload: (r) => {
                        if (code[r.status] != null) {
                            popup.open(code[r.status], 'alert');
                            res(null);
                            return;
                        }
                        let json_data = JSON.parse(r.response);
                        if (json_data["status"]) {
                            popup.open("token成功获取", "alert");
                            res(json_data["data"]["token"]);
                        } else {
                            popup.open(json_data["message"], "alert");
                            res(null);
                        }
                    },
                    onerror: () => {
                        popup.open("网络异常");
                        res(null);
                    }
                })
            })
        }

        function uploadImage(imageFile) {
            let res_data = {
                "imageUri": null,
                "json_data": null
            };
            let form = new FormData();
            form.append("strategy_id", 3);
            form.append("file", imageFile);
            return new Promise(res => {
                GM_xmlhttpRequest({
                    url: `${chartBedUrl}/upload`,
                    method: "POST",
                    data: form,
                    async: false,
                    dataType: "json",
                    headers: {
                        "Accept": "application/json",
                        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.64 Safari/537.36 Edg/101.0.1210.53",
                        "Referer": `${chartBedUrl}/`,
                        "Authorization": `Bearer ${chartBedToken}`,
                        "Origin": chartBedUrl,
                    },
                    onload: (r) => {
                        if (code[r.status] != null) {
                            popup.open(code[r.status], 'alert');
                            res(res_data);
                            return;
                        }
                        let json_data = JSON.parse(r.response);
                        console.log(json_data);

                        if (json_data["status"]) {
                            popup.open('上传成功', 'alert');
                            let file_reader = new FileReader();
                            //FileReader主要用于将文件内容读入内存,通过一系列异步接口,可以在主线程中访问本地文件
                            file_reader.readAsDataURL(imageFile); //读取图片的内容生成的base64编码的图
                            //读取完成后,执行该回调函数,它会返回读取的结果result		
                            file_reader.onload = (function () {
                                let imageUri = this.result; // 此时的图片已经存储到了result中	
                                res_data["imageUri"] = imageUri;
                                res_data["json_data"] = json_data;
                                res(res_data);
                            });
                        } else {
                            console.log(json_data);
                            popup.open(json_data["message"], 'alert');
                            res(res_data);
                        }

                    },
                    onerror: (r) => {
                        popup.open("网络异常", 'alert');
                        res(res_data);
                    }
                })
            })
        }

        function deleteImage(imageKey) {
            return new Promise(res => {
                GM_xmlhttpRequest({
                    url: `${chartBedUrl}/images/:${imageKey}`,
                    method: "DELETE",
                    async: false,
                    data: JSON.stringify({
                        "key": ""
                    }),
                    dataType: "json",
                    headers: {
                        "Accept": "application/json",
                        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.64 Safari/537.36 Edg/101.0.1210.53",
                        "Referer": `${chartBedUrl}/`,
                        "Authorization": `Bearer ${chartBedToken}`,
                        "Origin": chartBedUrl,
                    },
                    onload: (r) => {
                        if (code[r.status] != null) {
                            popup.open(code[r.status], 'alert');
                            res(res_data);
                            return;
                        }
                        let json_data = JSON.parse(r.response);
                        console.log(json_data);
                    },
                    onerror: (r) => {
                        popup.open("网络异常", 'alert');
                        res(res_data);
                    }
                })
            })
        }

        function clearData() {
            chartBedUser = "";
            chartBedPwd = "";
            chartBedToken = null;
            loginStatus = false;
            tokenStatus = false;
            GM_deleteValue("KggzsChartBedUser");
            GM_deleteValue("KggzsChartBedPwd");
        }

        $("#kggzsChartBedBtnUpload i").on("click", async function () {
            if (tokenStatus) {
                popup.open('正在配置中...', 'alert');
                return;
            }
            if (!chartBedUser || !chartBedPwd) {
                let userInput = prompt('请输入康哥图床的用户和密码,使用空格分割');
                if (userInput) {
                    let userInputSplit = userInput.split(" ");
                    let user = userInputSplit[0];
                    let pwd = userInputSplit[1];
                    GM_setValue("KggzsChartBedUser", user);
                    GM_setValue("KggzsChartBedPwd", pwd);
                    chartBedUser = user;
                    chartBedPwd = pwd;
                    popup.open('设置完毕,请重新点击', 'alert');
                }
            } else if (chartBedToken == null || !loginStatus) {
                tokenStatus = true;
                popup.open('正在配置token', 'alert');
                chartBedToken = await getToken();
                console.log("token:" + chartBedToken);
                if (chartBedToken != null) {
                    $("#kggzsfiledata").click();
                } else {
                    clearData();
                }
                tokenStatus = false;

            } else {
                $("#kggzsfiledata").click();
            }
        });
        $("#kggzsfiledata").on("change", (e) => {
            let chooseImageFiles = e.currentTarget.files;
            if (chooseImageFiles.length == 0) {
                return
            };
            popup.open("上传图片中...请稍后", "alert");
            console.log(`图片数量:${chooseImageFiles.length}`);
            $.each(chooseImageFiles, async (i) => {
                let imageFile = chooseImageFiles[i];
                let uploadImageReturn = await uploadImage(imageFile);
                if (uploadImageReturn["json_data"] != null) {
                    console.log(uploadImageReturn);
                    let image_id_encoded = uploadImageReturn["json_data"]["data"]["key"];
                    let image_url = uploadImageReturn["json_data"]["data"]["links"]["url"];
                    let image_thumb_url = uploadImageReturn["json_data"]["data"]["links"]["thumbnail_url"];
                    let image_name = uploadImageReturn["json_data"]["data"]["origin_name"];
                    let image_uri = uploadImageReturn["imageUri"];
                    let uploadImageHTML = `<li>
                            <span class="delImg" id-encode="${image_id_encoded}">
                                <a href="javascript:;">
                                    <i class="comiis_font f_g"></i>
                                </a>
                            </span>
                            <span class="charu f_f">插入</span>
                            <span class="p_img">
                                <a href="javascript:;" onclick="comiis_addsmilies('[url=${image_url}][img]${image_url}[/img][/url]')">
                                    <img style="height:54px;width:54px;" title="${image_name}" src="${image_uri}" class="vm b_ok"></a>
                            </span>
                            <input type="hidden" name="">
                        </li>`;
                    $("#imglist_kggzs").append($(uploadImageHTML));
                    chartBed.storage.add("kggzs", image_id_encoded, image_url, image_thumb_url, image_name);
                }
            })
            $("#kggzsfiledata").val("");

        });
        $("#imglist_kggzs").on("click", ".delImg", async (e) => {
            e.preventDefault();
            e.currentTarget.parentElement.remove();
            // popup.open('删除中,请稍后', 'alert');
            // let id_encoded = e.currentTarget.getAttribute("id-encode");
            // if(!id_encoded){
            //     popup.open('获取id_encoded失败,请自行去Hello图床删除', 'alert');
            //     return;
            // }
            // let deleteStatus = await deleteImage(key);
            // if(deleteStatus){
            //     e.currentTarget.parentElement.remove();
            //     chartBed.storage.delete("kggzs",id_encoded);
            // }
        })

    }

    function postForumHelloChartBed() { // 发帖快捷图片上传Hello图床
        if (!window.location.href.match(mt_config.rexp.post_forum) &&
            !window.location.href.match(mt_config.rexp.edit_forum) &&
            !window.location.href.match(mt_config.rexp.reply_forum) &&
            !window.location.href.match(mt_config.rexp.forum_post) ||
            !GM_getValue("v38")) {
            return
        };

        GM_addStyle(`
        .comiis_post_imglist li.up_btn_hello a{
            display: block;
            width: 50px;
            height: 50px;
            line-height: 50px;
            padding: 4px;
            border-radius: 2px;
            border-style: dashed;
        }
        .comiis_post_imglist li.up_btn_hello a i {
            position: absolute;
            top: 11px;
            left: 5px;
            z-index: 8;
            font-size: 26px;
            width: 50px;
            height: 50px;
            line-height: 50px;
            text-align: center;
        }
        .comiis_post_imglist li.up_btn_hello a input {
            position:absolute;
            top:11px;
            left:5px;
            height:50px;
            width:50px;
            z-index:10;
            opacity:0
        }
        .comiis_post_imglist li .delImg {
            position:absolute;
            top:-5px;
            left:-5px
        }
        .comiis_post_imglist li .delImg i {
            font-size:24px;
            background:#fff;
            border-radius:50%
        }
        #imglist_hello{
            overflow-y: auto;
            max-height: 200px;
        }
        #hellofiledata{
            display:none;
        }
        `);

        let imgListParent = $(".comiis_upbox.comiis_allowpostimg.bg_f.cl");
        if (!imgListParent.length) {
            imgListParent = $("#comiis_post_tab .comiis_upbox.bg_f.b_t.b_b.cl");
            if (!imgListParent.length) {
                console.log("未找到图片列表父元素");
                return;
            }
        };
        let imgUploadBtn = `
                <ul id="imglist_hello" class="comiis_post_imglist cl">
                    <li class="up_btn_hello">
                        <a href="javascript:;" class="bg_e b_ok f_d" id="helloChartBedBtnUpload">
                            <p style="position: relative;bottom: 20px;text-align: center;color: #000;">Hello</p>
                            <i class="comiis_font"></i>
                            <input type="file" name="Filedata" id="hellofiledata" accept="image/*" multiple="multiple">
                            <p style="position: relative;bottom: 30px;text-align: center;">20MB</p>
                        </a>
                    </li>				
                </ul>
        `;
        imgListParent.append($(imgUploadBtn));
        let chartBedUrl = "https://www.helloimg.com";
        let chartBedUser = GM_getValue("HelloChartBedUser");
        let chartBedPwd = GM_getValue("HelloChartBedPwd");
        let chartBedAuthToken = null;
        let loginStatus = false; // 登录状态
        let authTokenStatus = false; //authToken状态

        let clearData = () => {
            GM_deleteValue("HelloChartBedUser");
            GM_deleteValue("HelloChartBedPwd");
            loginStatus = false;
            authTokenStatus = false;
            chartBedUser = "";
            chartBedPwd = "";
            chartBedAuthToken = null;
        }
        $("#helloChartBedBtnUpload i").on("click", async function () {
            if (authTokenStatus) {
                popup.open('正在配置中...', 'alert');
                return;
            }
            if (!chartBedUser || !chartBedPwd) {
                let userInput = prompt('请输入Hello图床的用户和密码,使用空格分割');
                if (userInput) {
                    let userInputSplit = userInput.split(" ");
                    let user = userInputSplit[0];
                    let pwd = userInputSplit[1];
                    GM_setValue("HelloChartBedUser", user);
                    GM_setValue("HelloChartBedPwd", pwd);
                    chartBedUser = user;
                    chartBedPwd = pwd;
                    popup.open('设置完毕,请重新点击', 'alert');
                }
            } else if (chartBedAuthToken == null || !loginStatus) {
                authTokenStatus = true;
                popup.open('正在配置auth_token', 'alert');
                chartBedAuthToken = await chartBed.getAuthToken(chartBedUrl);
                console.log("auth_token:" + chartBedAuthToken);
                if (chartBedAuthToken != null) {
                    popup.open('正在登录Hello图床', 'alert');
                    let retloginStatus = await chartBed.login(chartBedUrl, chartBedUser, chartBedPwd, chartBedAuthToken);
                    if (retloginStatus) {
                        loginStatus = true;
                        $("#hellofiledata").click();
                    } else if (retloginStatus == false) {
                        clearData();
                    }
                }
                authTokenStatus = false;

            } else {
                $("#hellofiledata").click();
            }
        })
        $("#hellofiledata").on("change", (e) => {
            let chooseImageFiles = e.currentTarget.files;
            if (chooseImageFiles.length == 0) {
                return
            };
            popup.open("上传图片中...请稍后", "alert");
            console.log(`图片数量:${chooseImageFiles.length}`);
            $.each(chooseImageFiles, async (i) => {
                let imageFile = chooseImageFiles[i];
                let uploadImageReturn = await chartBed.uploadImage(chartBedUrl, chartBedAuthToken, imageFile);
                if (uploadImageReturn["json_data"] != null) {
                    let image_id_encoded = uploadImageReturn["json_data"]["image"]["id_encoded"];
                    let image_url = uploadImageReturn["json_data"]["image"]["url"];
                    let image_thumb_url = uploadImageReturn["json_data"]["image"]["thumb"]["url"];
                    let image_name = uploadImageReturn["json_data"]["image"]["filename"];
                    let image_uri = uploadImageReturn["imageUri"];
                    let uploadImageHTML = `<li>
                            <span class="delImg" id-encode="${image_id_encoded}">
                                <a href="javascript:;">
                                    <i class="comiis_font f_g"></i>
                                </a>
                            </span>
                            <span class="charu f_f">插入</span>
                            <span class="p_img">
                                <a href="javascript:;" onclick="comiis_addsmilies('[url=${image_url}][img]${image_url}[/img][/url]')">
                                    <img style="height:54px;width:54px;" title="${image_name}" src="${image_uri}" class="vm b_ok"></a>
                            </span>
                            <input type="hidden" name="">
                        </li>`;
                    $("#imglist_hello").append($(uploadImageHTML));
                    chartBed.storage.add("hello", image_id_encoded, image_url, image_thumb_url, image_name);
                }
            })
            $("#hellofiledata").val("");

        })
        $("#imglist_hello").on("click", ".delImg", async (e) => {
            e.preventDefault();
            popup.open('删除中,请稍后', 'alert');
            let id_encoded = e.currentTarget.getAttribute("id-encode");
            if (!id_encoded) {
                popup.open('获取id_encoded失败,请自行去Hello图床删除', 'alert');
                return;
            }
            let deleteStatus = await chartBed.deleteImage(chartBedUrl, chartBedAuthToken, id_encoded);
            if (deleteStatus) {
                e.currentTarget.parentElement.remove();
                chartBed.storage.delete("hello", id_encoded);
            }
        })
    }


    async function postForumZ4aChartBed() { // 发帖快捷图片上传z4a图床
        if (!window.location.href.match(mt_config.rexp.post_forum) &&
            !window.location.href.match(mt_config.rexp.edit_forum) &&
            !window.location.href.match(mt_config.rexp.reply_forum) &&
            !window.location.href.match(mt_config.rexp.forum_post) ||
            !GM_getValue("v39")) {
            return
        };
        let imgListParent = $(".comiis_upbox.comiis_allowpostimg.bg_f.cl");
        if (!imgListParent.length) {
            imgListParent = $("#comiis_post_tab .comiis_upbox.bg_f.b_t.b_b.cl");
            if (!imgListParent.length) {
                console.log("未找到图片列表父元素");
                return;
            }
        };
        GM_addStyle(`
        .comiis_post_imglist li.up_btn_z4a a{
            display: block;
            width: 50px;
            height: 50px;
            line-height: 50px;
            padding: 4px;
            border-radius: 2px;
            border-style: dashed;
        }
        .comiis_post_imglist li.up_btn_z4a a i {
            position: absolute;
            top: 11px;
            left: 5px;
            z-index: 8;
            font-size: 26px;
            width: 50px;
            height: 50px;
            line-height: 50px;
            text-align: center;
        }
        .comiis_post_imglist li.up_btn_z4a a input {
            position:absolute;
            top:11px;
            left:5px;
            height:50px;
            width:50px;
            z-index:10;
            opacity:0
        }
        .comiis_post_imglist li .delImg {
            position:absolute;
            top:-5px;
            left:-5px
        }
        .comiis_post_imglist li .delImg i {
            font-size:24px;
            background:#fff;
            border-radius:50%
        }
        #imglist_z4a{
            overflow-y: auto;
            max-height: 200px;
        }
        #z4afiledata{
            display:none;
        }
        `);
        let imgUploadBtn = `
                <ul id="imglist_z4a" class="comiis_post_imglist cl">
                    <li class="up_btn_z4a">
                        <a href="javascript:;" class="bg_e b_ok f_d" id="z4aChartBedBtnUpload">
                            <p style="position: relative;bottom: 20px;text-align: center;color: #000;">Z4A</p>
                            <i class="comiis_font"></i>
                            <input type="file" name="Filedata" id="z4afiledata" accept="image/*" multiple="multiple">
                            <p style="position: relative;bottom: 30px;text-align: center;">50MB</p>
                        </a>
                    </li>				
                </ul>
        `;
        imgListParent.append($(imgUploadBtn));

        let chartBedUrl = "https://www.z4a.net";
        let chartBedUser = GM_getValue("Z4AChartBedUser");
        let chartBedPwd = GM_getValue("Z4AChartBedPwd");
        let chartBedAuthToken = null;
        let loginStatus = false; // 登录状态
        let authTokenStatus = false; //authToken状态

        let clearData = () => {
            GM_deleteValue("Z4AChartBedUser");
            GM_deleteValue("Z4AChartBedPwd");
            loginStatus = false;
            authTokenStatus = false;
            chartBedUser = "";
            chartBedPwd = "";
            chartBedAuthToken = null;
        }
        $("#z4aChartBedBtnUpload i").on("click", async function () {
            if (authTokenStatus) {
                popup.open('正在配置中...', 'alert');
                return;
            }
            if (!chartBedUser || !chartBedPwd) {
                let userInput = prompt('请输入Z4A图床的用户和密码,使用空格分割');
                if (userInput) {
                    let userInputSplit = userInput.split(" ");
                    let user = userInputSplit[0];
                    let pwd = userInputSplit[1];
                    GM_setValue("Z4AChartBedUser", user);
                    GM_setValue("Z4AChartBedPwd", pwd);
                    chartBedUser = user;
                    chartBedPwd = pwd;
                    popup.open('设置完毕,请重新点击', 'alert');
                }
            } else if (chartBedAuthToken == null || !loginStatus) {
                authTokenStatus = true;
                popup.open('正在配置auth_token', 'alert');
                chartBedAuthToken = await chartBed.getAuthToken(chartBedUrl);
                console.log("auth_token:" + chartBedAuthToken);
                if (chartBedAuthToken != null) {
                    popup.open('正在登录Z4A图床', 'alert');
                    let retloginStatus = await chartBed.login(chartBedUrl, chartBedUser, chartBedPwd, chartBedAuthToken);
                    if (retloginStatus) {
                        loginStatus = true;
                        $("#z4afiledata").click();
                    } else if (retloginStatus == false) {
                        clearData();
                    }
                }
                authTokenStatus = false;

            } else {
                $("#z4afiledata").click();
            }
        })
        $("#z4afiledata").on("change", (e) => {
            let chooseImageFiles = e.currentTarget.files;
            if (chooseImageFiles.length == 0) {
                return
            };
            popup.open("上传图片中...请稍后", "alert");
            console.log(`图片数量:${chooseImageFiles.length}`);
            $.each(chooseImageFiles, async (i) => {
                let imageFile = chooseImageFiles[i];
                let uploadImageReturn = await chartBed.uploadImage(chartBedUrl, chartBedAuthToken, imageFile);
                if (uploadImageReturn["json_data"] != null) {
                    let image_id_encoded = uploadImageReturn["json_data"]["image"]["id_encoded"];
                    let image_url = uploadImageReturn["json_data"]["image"]["url"];
                    let image_thumb_url = uploadImageReturn["json_data"]["image"]["thumb"]["url"];
                    let image_name = uploadImageReturn["json_data"]["image"]["filename"];
                    let image_uri = uploadImageReturn["imageUri"];
                    let uploadImageHTML = `<li>
                            <span class="delImg" id-encode="${image_id_encoded}">
                                <a href="javascript:;">
                                    <i class="comiis_font f_g"></i>
                                </a>
                            </span>
                            <span class="charu f_f">插入</span>
                            <span class="p_img">
                                <a href="javascript:;" onclick="comiis_addsmilies('[url=${image_url}][img]${image_url}[/img][/url]')">
                                    <img style="height:54px;width:54px;" title="${image_name}" src="${image_uri}" class="vm b_ok"></a>
                            </span>
                            <input type="hidden" name="">
                        </li>`;
                    $("#imglist_z4a").append($(uploadImageHTML));
                    chartBed.storage.add("z4a", image_id_encoded, image_url, image_thumb_url, image_name);
                }
            })
            $("#z4afiledata").val("");

        })
        $("#imglist_z4a").on("click", ".delImg", async (e) => {
            e.preventDefault();
            popup.open('删除中,请稍后', 'alert');
            let id_encoded = e.currentTarget.getAttribute("id-encode");
            if (!id_encoded) {
                popup.open('获取id_encoded失败,请自行去Z4A图床删除', 'alert');
                return;
            }
            let deleteStatus = await chartBed.deleteImage(chartBedUrl, chartBedAuthToken, id_encoded);
            if (deleteStatus) {
                e.currentTarget.parentElement.remove();
                chartBed.storage.delete("z4a", id_encoded);
            }
        })
    }

    const chartBed = {
        ret_code: {
            200: {
                200: "删除成功"
            },
            500: {
                101: "重复上传",
                400: "请求被拒绝,token错误",
                401: "请求被拒绝",
            },
            400: {
                100: "删除失败,图片已删除",
                101: "重复上传",
            }
        },
        storage: {
            add: function (web, id_encoded, url, thumb_url, name) {
                let localData = GM_getValue("chartBedsImagesHistory") ? GM_getValue("chartBedsImagesHistory") : [];
                let saveData = localData.concat({
                    "web": web,
                    "id_encoded": id_encoded,
                    "url": url,
                    "thumb_url": thumb_url,
                    "name": name
                });
                GM_setValue("chartBedsImagesHistory", saveData);
            },
            delete: function (_web_, id_encoded) {
                let localData = GM_getValue("chartBedsImagesHistory") ? GM_getValue("chartBedsImagesHistory") : [];
                Array.from(localData).forEach((item, index) => {
                    if (item["web"] == _web_ && item["id_encoded"] == id_encoded) {
                        localData.splice(index, 1);
                        GM_setValue("chartBedsImagesHistory", localData);
                        return;
                    }
                })
            },
            get: function () {
                return GM_getValue("chartBedsImagesHistory") ? GM_getValue("chartBedsImagesHistory") : [];
            }
        },
        getAuthToken(url) { // 获取图床的auth_token
            return new Promise(res => {
                GM_xmlhttpRequest({
                    url: url,
                    method: "GET",
                    headers: {
                        'user-agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Mobile Safari/537.36 Edg/94.0.992.38'
                    },
                    onload: (r) => {
                        let token = r.response.match(/PF.obj.config.auth_token[\s]*=[\s]*"(.+)";/i);
                        if (token.length == 2) {
                            popup.open("auth_token成功获取", "alert");
                            res(token[1]);
                        } else {
                            console.log(r);
                            popup.open("auth_token获取失败", "alert");
                            res(null);
                        }
                    },
                    onerror: () => {
                        popup.open("网络异常", "alert");
                        res(null)
                    }
                })
            })
        },
        login(url, user, pwd, auth_token) { // 图床登录
            return new Promise(res => {
                GM_xmlhttpRequest({
                    url: `${url}/login`,
                    method: "POST",
                    data: `login-subject=${user}&password=${pwd}&auth_token=${auth_token}`,
                    headers: {
                        "Content-Type": "application/x-www-form-urlencoded"
                    },
                    onload: (e) => {
                        console.log(e);
                        if (e.status == 200 && e.response.match("注销")) {
                            popup.open('登陆成功', 'alert');
                            res(true);
                        } else {
                            popup.open('登录失败', 'alert');
                            res(false);
                        }
                    },
                    onerror: () => {
                        popup.open('网络异常', 'alert');
                        res(404);
                    }
                })
            });
        },
        uploadImage(url, auth_token, imageFile) { // 上传图片请求
            let res_data = {
                "imageUri": null,
                "json_data": null
            };
            let form = new FormData();
            form.append("type", "file");
            form.append("action", "upload");
            form.append("timestamp", new Date().getTime());
            form.append("auth_token", auth_token);
            form.append("nsfw", 0);
            form.append("source", imageFile);
            return new Promise(res => {
                GM_xmlhttpRequest({
                    url: `${url}/json`,
                    method: "POST",
                    data: form,
                    async: false,
                    dataType: "json",
                    headers: {
                        "Accept": "application/json",
                        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.64 Safari/537.36 Edg/101.0.1210.53",
                        "Referer": `${url}/`,
                        "Origin": url,
                    },
                    onload: (r) => {
                        let json_data = JSON.parse(r.response);
                        console.log(json_data);
                        let status_code = json_data["status_code"];

                        if (status_code == 200) {
                            popup.open('上传成功', 'alert');
                            let file_reader = new FileReader();
                            //FileReader主要用于将文件内容读入内存,通过一系列异步接口,可以在主线程中访问本地文件
                            file_reader.readAsDataURL(imageFile); //读取图片的内容生成的base64编码的图
                            //读取完成后,执行该回调函数,它会返回读取的结果result		
                            file_reader.onload = (function () {
                                let imageUri = this.result; // 此时的图片已经存储到了result中	
                                res_data["imageUri"] = imageUri;
                                res_data["json_data"] = json_data;
                                res(res_data);
                            });
                        } else if (chartBed.ret_code[status_code] != null && chartBed.ret_code[status_code][json_data["error"]["code"]] != null) {
                            popup.open(chartBed.ret_code[status_code][json_data["error"]["code"]], 'alert');
                            res(res_data);
                        } else {
                            console.log(json_data);
                            res(res_data);
                        }

                    },
                    onerror: (r) => {
                        console.log(r.response);
                        popup.open("网络异常", 'alert');
                        res(res_data);
                    }
                })
            })

        },
        deleteImage(url, auth_token, id_encoded) { // 删除图片请求
            return new Promise(res => {
                GM_xmlhttpRequest({
                    url: `${url}/json`,
                    method: "POST",
                    data: `auth_token=${auth_token}&action=delete&single=true&delete=image&deleting[id]=${id_encoded}`,
                    headers: {
                        "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8"
                    },
                    onload: (e) => {
                        let json_data = JSON.parse(e.response);
                        let status_code = json_data["status_code"];

                        if (status_code == 200 && json_data["success"]["code"] == 200) {
                            popup.open(chartBed.ret_code["200"]["200"], 'alert');
                            res(true);
                        } else if (status_code == 400 && json_data["error"]["code"] == 100) {
                            popup.open(chartBed.ret_code["400"]["100"], 'alert');
                            res(true);
                        } else if (chartBed.ret_code[status_code] != null && chartBed.ret_code[status_code][json_data["error"]["code"]] != null) {
                            popup.open(chartBed.ret_code[status_code][json_data["error"]["code"]], 'alert');
                            res(false);
                        } else {
                            console.log(json_data);
                            popup.open(json_data["error"]["message"], 'alert');
                            res(false);
                        }

                    },
                    onerror: () => {
                        popup.open('网络异常', 'alert');
                        res(false);
                    }
                })
            })
        },

    }



    function chatChartBed() { // 聊天快捷图片上传到图床(总)
        if (!window.location.href.match(mt_config.rexp.chat_url) ||
            !GM_getValue("v40") ||
            !GM_getValue("v41")
        ) {
            return
        };
        let imgBtn = `<a href="javascript:;" class="comiis_pictitle"><i class="comiis_font"></i></a>`;
        let menu = `<div class="comiis_minibq bg_f cl" style="display: none;"><div class="imgboxlist"></div><div class="bqbox_t bg_e cl"><ul id="comiis_img_chartbed_key"></ul></div></div>`;
        $(".styli_tit.comiis_post_ico.f_c.cl").append($(imgBtn));
        $("#comiis_post_tab").append($(menu));
        $(".comiis_pictitle").on("click", (e) => {
            let toShow = false;
            $("#comiis_post_tab .comiis_minibq").filter(function (i, v) {
                if (v.style.display != 'none') {
                    toShow = true;
                }
            });
            if (toShow) {
                $(".comiis_foot_height").removeClass("comiis_show_smiley");
            } else {
                $(".comiis_foot_height").addClass("comiis_show_smiley");
            }
        });
        GM_addStyle(`
        .comiis_post_imglist li.up_btn_kggzs a,
        .comiis_post_imglist li.up_btn_hello a,
        .comiis_post_imglist li.up_btn_z4a a{
            display: block;
            width: 50px;
            height: 50px;
            line-height: 50px;
            padding: 4px;
            border-radius: 2px;
            border-style: dashed;
        }
        .comiis_post_imglist li.up_btn_kggzs a i,
        .comiis_post_imglist li.up_btn_hello a i,
        .comiis_post_imglist li.up_btn_z4a a i  {
            position: absolute;
            top: 11px;
            left: 5px;
            z-index: 8;
            font-size: 26px;
            width: 50px;
            height: 50px;
            line-height: 50px;
            text-align: center;
        }
        .comiis_post_imglist li.up_btn_kggzs a input,
        .comiis_post_imglist li.up_btn_hello a input,
        .comiis_post_imglist li.up_btn_z4a a input {
            position:absolute;
            top:11px;
            left:5px;
            height:50px;
            width:50px;
            z-index:10;
            opacity:0
        }
        .comiis_post_imglist li .delImg {
            position:absolute;
            top:-5px;
            left:-5px
        }
        .comiis_post_imglist li .delImg i {
            font-size:24px;
            background:#fff;
            border-radius:50%
        }
        .imgboxlist{
            height: 170px;
            overflow-y: auto;
        }
        .menuclicked{
            background: #fff;
        }
        #kggzsfiledata,
        #hellofiledata,
        #z4afiledata{
            display: none;
        }
        `);
        if (GM_getValue("chartBedsImagesHistory") == undefined) {
            GM_setValue("chartBedsImagesHistory", []);
        }
        tryCatch(chatKGChartBed);
        tryCatch(chatHelloChartBed);
        tryCatch(chatZ4AChartBed);
        tryCatch(chatHistoryChartBedImages);
        $("#comiis_img_chartbed_key").children()[0].children[0].click();

    }

    function chatKGChartBed() { // 聊天快捷图片上传康哥图床
        if (!GM_getValue("v43")) {
            return
        };
        let imgUploadBtn = `
        <div class="comiis_upbox kggzschartbed" style="display:none;">
                <ul id="imglist_kggzs" class="comiis_post_imglist cl">
                    <li class="up_btn_kggzs">
                        <a href="javascript:;" class="bg_e b_ok f_d" id="kggzsChartBedBtnUpload">
                            <i class="comiis_font"></i>
                            <input type="file" name="Filedata" id="kggzsfiledata" accept="image/*" multiple="multiple">
                            <p style="padding-top: 21px;padding-left: 6px;">20MB</p>
                        </a>
                    </li>				
                </ul>
            </div>
        `;
        let imgMenu = `<li><a href="javascript:;" id="menu_kggzs" class="">康哥图床</a></li>`;
        $("#comiis_img_chartbed_key").append($(imgMenu));
        $(".comiis_minibq .imgboxlist").append($(imgUploadBtn));
        $("#menu_kggzs").on("click", (e) => {
            $("#menu_kggzs").addClass("menuclicked"); // 添加点击菜单背景白色
            $("#menu_hello").removeClass("menuclicked");
            $("#menu_z4a").removeClass("menuclicked");
            $("#menu_chartbed_history").removeClass("menuclicked");
            $(".comiis_upbox").hide();
            $(".comiis_upbox.kggzschartbed").show();

        });

        let chartBedUrl = "https://img.kggzs.cn/api/v1";
        let chartBedUser = GM_getValue("KggzsChartBedUser");
        let chartBedPwd = GM_getValue("KggzsChartBedPwd");
        let chartBedToken = null;
        let loginStatus = false; // 登录状态
        let tokenStatus = false; //token状态
        let code = {
            401: "未登录或授权失败",
            403: "管理员关闭了接口功能",
            429: "超出请求配额,请求受限",
            500: "服务端出现异常"
        }

        function getToken() {
            return new Promise(res => {
                let formData = new FormData();
                formData.append("email", "[email protected]");
                formData.append("password", "893177236");
                GM_xmlhttpRequest({
                    url: `${chartBedUrl}/tokens`,
                    method: "POST",
                    data: formData,
                    headers: {
                        "Accept": "application/json"
                    },
                    onload: (r) => {
                        if (code[r.status] != null) {
                            popup.open(code[r.status], 'alert');
                            res(null);
                            return;
                        }
                        let json_data = JSON.parse(r.response);
                        if (json_data["status"]) {
                            popup.open("token成功获取", "alert");
                            res(json_data["data"]["token"]);
                        } else {
                            popup.open(json_data["message"], "alert");
                            res(null);
                        }
                    },
                    onerror: () => {
                        popup.open("网络异常");
                        res(null);
                    }
                })
            })
        }

        function uploadImage(imageFile) {
            let res_data = {
                "imageUri": null,
                "json_data": null
            };
            let form = new FormData();
            form.append("strategy_id", 3);
            form.append("file", imageFile);
            return new Promise(res => {
                GM_xmlhttpRequest({
                    url: `${chartBedUrl}/upload`,
                    method: "POST",
                    data: form,
                    async: false,
                    dataType: "json",
                    headers: {
                        "Accept": "application/json",
                        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.64 Safari/537.36 Edg/101.0.1210.53",
                        "Referer": `${chartBedUrl}/`,
                        "Authorization": `Bearer ${chartBedToken}`,
                        "Origin": chartBedUrl,
                    },
                    onload: (r) => {
                        if (code[r.status] != null) {
                            popup.open(code[r.status], 'alert');
                            res(res_data);
                            return;
                        }
                        let json_data = JSON.parse(r.response);
                        console.log(json_data);

                        if (json_data["status"]) {
                            popup.open('上传成功', 'alert');
                            let file_reader = new FileReader();
                            //FileReader主要用于将文件内容读入内存,通过一系列异步接口,可以在主线程中访问本地文件
                            file_reader.readAsDataURL(imageFile); //读取图片的内容生成的base64编码的图
                            //读取完成后,执行该回调函数,它会返回读取的结果result		
                            file_reader.onload = (function () {
                                let imageUri = this.result; // 此时的图片已经存储到了result中	
                                res_data["imageUri"] = imageUri;
                                res_data["json_data"] = json_data;
                                res(res_data);
                            });
                        } else {
                            console.log(json_data);
                            popup.open(json_data["message"], 'alert');
                            res(res_data);
                        }

                    },
                    onerror: (r) => {
                        popup.open("网络异常", 'alert');
                        res(res_data);
                    }
                })
            })
        }

        function deleteImage(imageKey) {
            return new Promise(res => {
                GM_xmlhttpRequest({
                    url: `${chartBedUrl}/images/:${imageKey}`,
                    method: "DELETE",
                    async: false,
                    data: JSON.stringify({
                        "key": ""
                    }),
                    dataType: "json",
                    headers: {
                        "Accept": "application/json",
                        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.64 Safari/537.36 Edg/101.0.1210.53",
                        "Referer": `${chartBedUrl}/`,
                        "Authorization": `Bearer ${chartBedToken}`,
                        "Origin": chartBedUrl,
                    },
                    onload: (r) => {
                        if (code[r.status] != null) {
                            popup.open(code[r.status], 'alert');
                            res(res_data);
                            return;
                        }
                        let json_data = JSON.parse(r.response);
                        console.log(json_data);
                    },
                    onerror: (r) => {
                        popup.open("网络异常", 'alert');
                        res(res_data);
                    }
                })
            })
        }

        function clearData() {
            chartBedUser = "";
            chartBedPwd = "";
            chartBedToken = null;
            loginStatus = false;
            tokenStatus = false;
            GM_deleteValue("KggzsChartBedUser");
            GM_deleteValue("KggzsChartBedPwd");
        }

        $("#kggzsChartBedBtnUpload i").on("click", async function () {
            if (tokenStatus) {
                popup.open('正在配置中...', 'alert');
                return;
            }
            if (!chartBedUser || !chartBedPwd) {
                let userInput = prompt('请输入康哥图床的用户和密码,使用空格分割');
                if (userInput) {
                    let userInputSplit = userInput.split(" ");
                    let user = userInputSplit[0];
                    let pwd = userInputSplit[1];
                    GM_setValue("KggzsChartBedUser", user);
                    GM_setValue("KggzsChartBedPwd", pwd);
                    chartBedUser = user;
                    chartBedPwd = pwd;
                    popup.open('设置完毕,请重新点击', 'alert');
                }
            } else if (chartBedToken == null || !loginStatus) {
                tokenStatus = true;
                popup.open('正在配置token', 'alert');
                chartBedToken = await getToken();
                console.log("token:" + chartBedToken);
                if (chartBedToken != null) {
                    $("#kggzsfiledata").click();
                } else {
                    clearData();
                }
                tokenStatus = false;

            } else {
                $("#kggzsfiledata").click();
            }
        });
        $("#kggzsfiledata").on("change", (e) => {
            let chooseImageFiles = e.currentTarget.files;
            if (chooseImageFiles.length == 0) {
                return
            };
            popup.open("上传图片中...请稍后", "alert");
            console.log(`图片数量:${chooseImageFiles.length}`);
            $.each(chooseImageFiles, async (i) => {
                let imageFile = chooseImageFiles[i];
                let uploadImageReturn = await uploadImage(imageFile);
                if (uploadImageReturn["json_data"] != null) {
                    console.log(uploadImageReturn);
                    let image_id_encoded = uploadImageReturn["json_data"]["data"]["key"];
                    let image_url = uploadImageReturn["json_data"]["data"]["links"]["url"];
                    let image_thumb_url = uploadImageReturn["json_data"]["data"]["links"]["thumbnail_url"];
                    let image_name = uploadImageReturn["json_data"]["data"]["origin_name"];
                    let image_uri = uploadImageReturn["imageUri"];
                    let uploadImageHTML = `<li>
                            <span class="delImg" id-encode="${image_id_encoded}">
                                <a href="javascript:;">
                                    <i class="comiis_font f_g"></i>
                                </a>
                            </span>
                            <span class="charu f_f">插入</span>
                            <span class="p_img">
                                <a href="javascript:;" onclick="comiis_addsmilies('[url=${image_url}][img]${image_url}[/img][/url]')">
                                    <img style="height:54px;width:54px;" title="${image_name}" src="${image_uri}" class="vm b_ok"></a>
                            </span>
                            <input type="hidden" name="">
                        </li>`;
                    $("#imglist_kggzs").append($(uploadImageHTML));
                    chartBed.storage.add("kggzs", image_id_encoded, image_url, image_thumb_url, image_name);
                }
            })
            $("#kggzsfiledata").val("");

        });
        $("#imglist_kggzs").on("click", ".delImg", async (e) => {
            e.preventDefault();
            e.currentTarget.parentElement.remove();
            // popup.open('删除中,请稍后', 'alert');
            // let id_encoded = e.currentTarget.getAttribute("id-encode");
            // if(!id_encoded){
            //     popup.open('获取id_encoded失败,请自行去Hello图床删除', 'alert');
            //     return;
            // }
            // let deleteStatus = await deleteImage(key);
            // if(deleteStatus){
            //     e.currentTarget.parentElement.remove();
            //     chartBed.storage.delete("kggzs",id_encoded);
            // }
        })
    }

    function chatHelloChartBed() { // 聊天快捷图片上传Hello图床
        if (!GM_getValue("v40")) {
            return
        };

        let imgUploadBtn = `
        <div class="comiis_upbox hellochartbed" style="display:none;">
                <ul id="imglist_hello" class="comiis_post_imglist cl">
                    <li class="up_btn_hello">
                        <a href="javascript:;" class="bg_e b_ok f_d" id="helloChartBedBtnUpload">
                            <i class="comiis_font"></i>
                            <input type="file" name="Filedata" id="hellofiledata" accept="image/*" multiple="multiple">
                            <p style="padding-top: 21px;padding-left: 6px;">20MB</p>
                        </a>
                    </li>				
                </ul>
            </div>
        `;
        let imgMenu = `<li><a href="javascript:;" id="menu_hello" class="">hello图床</a></li>`;
        $("#comiis_img_chartbed_key").append($(imgMenu));
        $(".comiis_minibq .imgboxlist").append($(imgUploadBtn));
        $("#menu_hello").on("click", (e) => {
            $("#menu_hello").addClass("menuclicked"); // 添加点击菜单背景白色
            $("#menu_kggzs").removeClass("menuclicked");
            $("#menu_z4a").removeClass("menuclicked");
            $("#menu_chartbed_history").removeClass("menuclicked");
            $(".comiis_upbox").hide();
            $(".comiis_upbox.hellochartbed").show();

        });
        let chartBedUrl = "https://www.helloimg.com";
        let chartBedUser = GM_getValue("HelloChartBedUser");
        let chartBedPwd = GM_getValue("HelloChartBedPwd");
        let chartBedAuthToken = null;
        let loginStatus = false; // 登录状态
        let authTokenStatus = false; //authToken状态

        let clearData = () => {
            GM_deleteValue("HelloChartBedUser");
            GM_deleteValue("HelloChartBedPwd");
            loginStatus = false;
            authTokenStatus = false;
            chartBedUser = "";
            chartBedPwd = "";
            chartBedAuthToken = null;
        }
        $("#helloChartBedBtnUpload i").on("click", async function () {
            if (authTokenStatus) {
                popup.open('正在配置中...', 'alert');
                return;
            }
            if (!chartBedUser || !chartBedPwd) {
                let userInput = prompt('请输入Hello图床的用户和密码,使用空格分割');
                if (userInput) {
                    let userInputSplit = userInput.split(" ");
                    let user = userInputSplit[0];
                    let pwd = userInputSplit[1];
                    GM_setValue("HelloChartBedUser", user);
                    GM_setValue("HelloChartBedPwd", pwd);
                    chartBedUser = user;
                    chartBedPwd = pwd;
                    popup.open('设置完毕,请重新点击', 'alert');
                }
            } else if (chartBedAuthToken == null || !loginStatus) {
                authTokenStatus = true;
                popup.open('正在配置auth_token', 'alert');
                chartBedAuthToken = await chartBed.getAuthToken(chartBedUrl);
                console.log("auth_token:" + chartBedAuthToken);
                if (chartBedAuthToken != null) {
                    popup.open('正在登录Hello图床', 'alert');
                    let retloginStatus = await chartBed.login(chartBedUrl, chartBedUser, chartBedPwd, chartBedAuthToken);
                    if (retloginStatus) {
                        loginStatus = true;
                        $("#hellofiledata").click();
                    } else if (retloginStatus == false) {
                        clearData();
                    }
                }
                authTokenStatus = false;

            } else {
                $("#hellofiledata").click();
            }
        })
        $("#hellofiledata").on("change", (e) => {
            let chooseImageFiles = e.currentTarget.files;
            if (chooseImageFiles.length == 0) {
                return
            };
            popup.open("上传图片中...请稍后", "alert");
            $.each(chooseImageFiles, async (i) => {
                let imageFile = chooseImageFiles[i];
                let uploadImageReturn = await chartBed.uploadImage(chartBedUrl, chartBedAuthToken, imageFile);
                if (uploadImageReturn["json_data"] != null) {
                    let image_id_encoded = uploadImageReturn["json_data"]["image"]["id_encoded"];
                    let image_url = uploadImageReturn["json_data"]["image"]["url"];
                    let image_thumb_url = uploadImageReturn["json_data"]["image"]["thumb"]["url"];
                    let image_name = uploadImageReturn["json_data"]["image"]["filename"];
                    let image_uri = uploadImageReturn["imageUri"];
                    let uploadImageHTML = `<li>
                            <span class="delImg" id-encode="${image_id_encoded}">
                                <a href="javascript:;">
                                    <i class="comiis_font f_g"></i>
                                </a>
                            </span>
                            <span class="charu f_f">插入</span>
                            <span class="p_img">
                                <a href="javascript:;" onclick="comiis_addsmilies('[url=${image_url}][img]${image_url}[/img][/url]')">
                                    <img style="height:54px;width:54px;" title="${image_name}" src="${image_uri}" class="vm b_ok"></a>
                            </span>
                            <input type="hidden" name="">
                        </li>`;
                    $("#imglist_hello").append($(uploadImageHTML));
                    chartBed.storage.add("hello", image_id_encoded, image_url, image_thumb_url, image_name);
                }
            })
            $("#hellofiledata").val("");

        })
        $("#imglist_hello").on("click", ".delImg", async (e) => {
            e.preventDefault();
            popup.open('删除中,请稍后', 'alert');
            let id_encoded = e.currentTarget.getAttribute("id-encode");
            if (!id_encoded) {
                popup.open('获取id_encoded失败,请自行去Hello图床删除', 'alert');
                return;
            }
            let deleteStatus = await chartBed.deleteImage(chartBedUrl, chartBedAuthToken, id_encoded);
            if (deleteStatus) {
                e.currentTarget.parentElement.remove();
                chartBed.storage.delete("hello", id_encoded);
            }
        })
    }



    function chatZ4AChartBed() { // 聊天快捷图片上传Z4A图床
        if (!GM_getValue("v41")) {
            return
        };

        let imgUploadBtn = `
        <div class="comiis_upbox z4achartbed" style="display:none;">
                <ul id="imglist_z4a" class="comiis_post_imglist cl">
                    <li class="up_btn_z4a">
                        <a href="javascript:;" class="bg_e b_ok f_d" id="z4aChartBedBtnUpload">
                            <i class="comiis_font"></i>
                            <input type="file" name="Filedata" id="z4afiledata" accept="image/*" multiple="multiple">
                            <p style="padding-top: 21px;padding-left: 6px;">50MB</p>
                        </a>
                    </li>				
                </ul>
            </div>
        `;
        let imgMenu = `<li><a href="javascript:;" id="menu_z4a" class="">z4a图床</a></li>`;
        $("#comiis_img_chartbed_key").append($(imgMenu));
        $(".comiis_minibq .imgboxlist").append($(imgUploadBtn));
        $("#menu_z4a").on("click", (e) => {
            $("#menu_z4a").addClass("menuclicked"); // 添加点击菜单背景白色
            $("#menu_kggzs").removeClass("menuclicked");
            $("#menu_hello").removeClass("menuclicked");
            $("#menu_chartbed_history").removeClass("menuclicked");
            $(".comiis_upbox").hide();
            $(".comiis_upbox.z4achartbed").show();

        });

        let chartBedUrl = "https://www.z4a.net";
        let chartBedUser = GM_getValue("Z4AChartBedUser");
        let chartBedPwd = GM_getValue("Z4AChartBedPwd");
        let chartBedAuthToken = null;
        let loginStatus = false; // 登录状态
        let authTokenStatus = false; //authToken状态

        let clearData = () => {
            GM_deleteValue("Z4AChartBedUser");
            GM_deleteValue("Z4AChartBedPwd");
            loginStatus = false;
            authTokenStatus = false;
            chartBedUser = "";
            chartBedPwd = "";
            chartBedAuthToken = null;
        }
        $("#z4aChartBedBtnUpload i").on("click", async function () {
            if (authTokenStatus) {
                popup.open('正在配置中...', 'alert');
                return;
            }
            if (!chartBedUser || !chartBedPwd) {
                let userInput = prompt('请输入Z4A图床的用户和密码,使用空格分割');
                if (userInput) {
                    let userInputSplit = userInput.split(" ");
                    let user = userInputSplit[0];
                    let pwd = userInputSplit[1];
                    GM_setValue("Z4AChartBedUser", user);
                    GM_setValue("Z4AChartBedPwd", pwd);
                    chartBedUser = user;
                    chartBedPwd = pwd;
                    popup.open('设置完毕,请重新点击', 'alert');
                }
            } else if (chartBedAuthToken == null || !loginStatus) {
                authTokenStatus = true;
                popup.open('正在配置auth_token', 'alert');
                chartBedAuthToken = await chartBed.getAuthToken(chartBedUrl);
                console.log("auth_token:" + chartBedAuthToken);
                if (chartBedAuthToken != null) {
                    popup.open('正在登录Z4A图床', 'alert');
                    let retloginStatus = await chartBed.login(chartBedUrl, chartBedUser, chartBedPwd, chartBedAuthToken);
                    if (retloginStatus) {
                        loginStatus = true;
                        $("#z4afiledata").click();
                    } else if (retloginStatus == false) {
                        clearData();
                    }
                }
                authTokenStatus = false;

            } else {
                $("#z4afiledata").click();
            }
        })
        $("#z4afiledata").on("change", (e) => {
            let chooseImageFiles = e.currentTarget.files;
            if (chooseImageFiles.length == 0) {
                return
            };
            popup.open("上传图片中...请稍后", "alert");
            $.each(chooseImageFiles, async (i) => {
                let imageFile = chooseImageFiles[i];
                let uploadImageReturn = await chartBed.uploadImage(chartBedUrl, chartBedAuthToken, imageFile);
                if (uploadImageReturn["json_data"] != null) {
                    let image_id_encoded = uploadImageReturn["json_data"]["image"]["id_encoded"];
                    let image_url = uploadImageReturn["json_data"]["image"]["url"];
                    let image_thumb_url = uploadImageReturn["json_data"]["image"]["thumb"]["url"];
                    let image_name = uploadImageReturn["json_data"]["image"]["filename"];
                    let image_uri = uploadImageReturn["imageUri"];
                    let uploadImageHTML = `<li>
                            <span class="delImg" id-encode="${image_id_encoded}">
                                <a href="javascript:;">
                                    <i class="comiis_font f_g"></i>
                                </a>
                            </span>
                            <span class="charu f_f">插入</span>
                            <span class="p_img">
                                <a href="javascript:;" onclick="comiis_addsmilies('[url=${image_url}][img]${image_url}[/img][/url]')">
                                    <img style="height:54px;width:54px;" title="${image_name}" src="${image_uri}" class="vm b_ok"></a>
                            </span>
                            <input type="hidden" name="">
                        </li>`;
                    $("#imglist_z4a").append($(uploadImageHTML));
                    chartBed.storage.add("z4a", image_id_encoded, image_url, image_thumb_url, image_name);
                }
            })
            $("#z4afiledata").val("");

        })
        $("#imglist_z4a").on("click", ".delImg", async (e) => {
            e.preventDefault();
            popup.open('删除中,请稍后', 'alert');
            let id_encoded = e.currentTarget.getAttribute("id-encode");
            if (!id_encoded) {
                popup.open('获取id_encoded失败,请自行去Z4A图床删除', 'alert');
                return;
            }
            let deleteStatus = await chartBed.deleteImage(chartBedUrl, chartBedAuthToken, id_encoded);
            if (deleteStatus) {
                e.currentTarget.parentElement.remove();
                chartBed.storage.delete("z4a", id_encoded);
            }
        })
    }

    function chatHistoryChartBedImages() { // 聊天快捷图片上传中 所有图床历史上传过的图片
        let historyImages = chartBed.storage.get();
        let imageMenu = `<li><a href="javascript:;" id="menu_chartbed_history" class="">历史图片</a></li>`;
        $("#comiis_img_chartbed_key").append($(imageMenu));
        let imageArea = `
        <div class="comiis_upbox chartbedhistory" style="display:none;">
            <ul id="imglist_history" class="comiis_post_imglist cl">
            
            </ul>
        </div>
        `;

        $(".comiis_minibq .imgboxlist").append($(imageArea));
        $("#menu_chartbed_history").on("click", (e) => {
            $("#menu_chartbed_history").addClass("menuclicked"); // 添加点击菜单背景白色
            $("#menu_z4a").removeClass("menuclicked");
            $("#menu_hello").removeClass("menuclicked");
            $(".comiis_upbox").hide();
            $(".comiis_upbox.chartbedhistory").show();

        });

        $.each(historyImages, (i) => {
            let _web = historyImages[i]["web"];
            let _url = historyImages[i]["url"];
            let _thumb_url = historyImages[i]["thumb_url"];
            let _name = historyImages[i]["name"];

            let _imageHTML = `
            <li>
                <span class="delImg" t-index="${i}">
                    <a href="javascript:;">
                        <i class="comiis_font f_g"></i>
                    </a>
                </span>
                <span class="charu f_f">${_web}</span>
                <span class="p_img">
                    <a href="javascript:;" onclick="comiis_addsmilies('[url=${_url}][img]${_url}[/img][/url]')">
                        <img style="height:54px;width:54px;" title="${_name}" src="${_thumb_url}" class="vm b_ok"></a>
                </span>
                <input type="hidden" name="${_name}">
            </li>
            `;
            $("#imglist_history").append($(_imageHTML));

        })

        $("#imglist_history").on("click", ".delImg", async (e) => {
            e.preventDefault();
            let _t_index = e.currentTarget.getAttribute("t-index");
            let imageItem = historyImages[_t_index];
            let web = imageItem["web"];
            let id_encoded = imageItem["id_encoded"];
            e.currentTarget.parentElement.remove();
            chartBed.storage.delete(web, id_encoded);
        })
    }

    
    function paymentSubjectReminder(){ // 付费主题白嫖提醒
        let urlForumPostMatchStatus = window.location.href.match(mt_config.rexp.forum_post);
        let urlHomeSpaceMatchStatus = window.location.href.match(mt_config.rexp.home_space_url);
        let urlGuideMatchStatus = window.location.href.match(mt_config.rexp.forum_guide_url);
        let urlCommunityMatchStatus = window.location.href.match(mt_config.rexp.community_url) || window.location.href.match(mt_config.rexp.plate_url);
        let urlBBSMatchStatus = window.location.href.match(/bbs.binmt.cc/);

        
        let storageMatchStatus = GM_getValue("v44") != null;
        let setTipForumPostList = GM_getValue("tipToFreeSubjectForumPost") == null ? [] : GM_getValue("tipToFreeSubjectForumPost");
        const paymentSubjectReminderHome = {
            httpGetSrc: async (url) => {
                return new Promise(res => {
                    GM_xmlhttpRequest({
                        url: url,
                        method: "GET",
                        async: false,
                        timeout: 5000,
                        onload: (r) => {
                            res(r.response);
                        },
                        onerror: (r) => {
                            console.log(r);
                            res();
                        }
                    })
                })
            },
            loadJS: async (url) => {
                let ret = await blackHome.httpGetSrc(url);
                await eval(ret);
            },
            loadCSS: async (url) => {
                let ret = await blackHome.httpGetSrc(url);
                GM_addStyle(ret);
            },
            getData(){ // 获取数据
                return GM_getValue("tipToFreeSubjectForumPost") == null ? [] : GM_getValue("tipToFreeSubjectForumPost");
            },
            setData(data){ // 设置数据
                GM_setValue("tipToFreeSubjectForumPost",data);
            },
            insertButtonView(){ // 插入-底部导航-我的-付费主题白嫖列表(按钮)
                paymentSubjectReminderHome.loadJS("https://www.jq22.com/demo/NZ-Plugin-MsgBox202201130154/Js/NZ-Plugin/Js/NZ-MsgBox.min.js");
                paymentSubjectReminderHome.loadJS("https://www.jq22.com/demo/NZ-Plugin-MsgBox202201130154/Js/NZ-Plugin/Js/NZ-Drag.min.js");
                paymentSubjectReminderHome.loadCSS("https://www.jq22.com/demo/NZ-Plugin-MsgBox202201130154/Js/NZ-Plugin/Css/NZ-MsgBox.min.css");
                let paymentSubjectReminderHomeBtn = document.createElement("a");
                paymentSubjectReminderHomeBtn.setAttribute("href", "javascript:;");
                paymentSubjectReminderHomeBtn.className = "comiis_flex comiis_styli bg_f b_t cl paymentsubjectreminder";
                paymentSubjectReminderHomeBtn.innerHTML = `
                    <div class="styli_tit f_c">
                        <i class="comiis_font" style="color:#ec0000;"></i>
                    </div>
                    <div class="flex">付费主题白嫖列表</div>
                    <div class="styli_ico">
                        <i class="comiis_font f_e"></i>
                    </div>`;
                GM_addStyle(`
                .NZ-MsgBox-alert .msgcontainer .msgtitle {
                    text-align: center !important;
                }
                #autolist .k_misign_lu img {
                    width: 40px;
                    height: 40px;
                    -moz-border-radius: 20px;
                    -webkit-border-radius: 20px;
                    border-radius: 20px;
                }
                .k_misign_lc .f_c{
                    margin: 5px 0px;
                }
                `)
                paymentSubjectReminderHomeBtn.onclick = () => {
                    paymentSubjectReminderHome.showView();
                }
                let parent_ele = document.querySelectorAll(".comiis_myinfo_list.bg_f.cl");
                parent_ele[parent_ele.length - 1].append(paymentSubjectReminderHomeBtn);
            },
            showView(){ // 显示-付费主题白嫖列表(dialog)
                let data = paymentSubjectReminderHome.getData();
                $.NZ_MsgBox.alert({
                    title: "付费主题白嫖列表",
                    content: "获取中",
                    type: "",
                    location: "center",
                    buttons: {
                        confirm: {
                            text: "确定"
                        }
                    }
                });
                
                let notVisitedTipContent = "" //可白嫖且未访问
                let notVisitedNums = 0; //可白嫖且未访问的数量
                let isFreeContent = ""; // 可白嫖帖子-未读的加左上边红点
                let isPaidContent = ""; // 需付费帖子
                let isFreeNotVisitedContentList = [];
                let isFreeContentList = [];
                let isPaidContentList = [];
                $.each(data,(i,v) => {
                    let timeColor = "#f91212";
                    let leftRedBtn = "";
                    if(new Date().getTime() > v["expirationTimeStamp"]){ // 可白嫖
                        timeColor= "#1e90ff";
                        if(v["isVisited"] == false){
                            leftRedBtn ='<span class="icon_msgs bg_del" style="position: fixed;width: 10px;height: 10px;border-radius: 50%;margin: 10px 0px 0px -15px;"></span>'
                            notVisitedNums = notVisitedNums+1;
                        }
                    }
                    let concatList = {
                        "content":`
                        <tbody id="autolist">
                            <tr>
                                <td style="width: 100%;">
                                    <div style="display: inline-flex;">
                                        ${leftRedBtn}
                                        <div style="width: 240px;">                 
                                            <a href="javascript:void(0);" t-href="${v["url"]}" t-index="${i}" style="color: #1e90ff;">${v["title"]}</a>
                                            <li style="margin: 5px 15px;color: ${timeColor};">${v["expirationTime"]}</li>
                                        </div>
                                        <div style="align-self: center;margin-left: 10px;" t-index="${i}" class="delsubjecttip">
                                            <i class="comiis_font" style="font-size: 24px;padding-left: 6px;"></i>
                                        </div>
                                    </div>
                                </td>
                            </tr>
                            <tr style="height:15px;"></tr>
                        </tbody>
                        `,
                        "timestamp":v["expirationTimeStamp"]
                    };
                    
                    if(new Date().getTime() > v["expirationTimeStamp"]){ // 可白嫖
                        if(leftRedBtn != ''){
                            isFreeNotVisitedContentList = isFreeNotVisitedContentList.concat(concatList);
                        }else{
                            isFreeContentList = isFreeContentList.concat(concatList);
                        }
                        
                    }else{
                        isPaidContentList = isPaidContentList.concat(concatList);
                    }
                });
                isFreeNotVisitedContentList.sort(utils.listCompareAscByValue("timestamp"));
                isFreeContentList.sort(utils.listCompareAscByValue("timestamp"));
                isFreeContent = utils.listToStringByValue(isFreeNotVisitedContentList,"content") + utils.listToStringByValue(isFreeContentList,"content");
                isPaidContent = utils.listToStringByValue(isPaidContentList,"content");
                if(notVisitedNums > 0){
                    notVisitedTipContent =  `<span class="icon_msgs bg_del f_f" style="
                            display: inline-block;
                            position: absolute;
                            width: 16px;
                            height: 16px;
                            line-height: 16px;
                            border-radius: 50%;
                            font-size: 14px;
                            text-align: center;
                            margin: 3px 0px 0px 10px;
                        ">${notVisitedNums}</span>`;
                }
                let dialogIsFreeContent = '<details class="subjectcanvisit" open=""><summary>可白嫖'+notVisitedTipContent+'</summary><table id="paymentSubjectReminderIsFreeList" style="overflow: auto;height: inherit;margin: 15px 0px;">' + isFreeContent + "</table></details>";
                let dialogIsPaidContent = '<details class="subjectnotvisit"><summary>需付费</summary><table id="paymentSubjectReminderIsPaidList" style="overflow: auto;height: inherit;margin: 15px 0px;">' + isPaidContent + "</table></details>";
                $(".msgcon").html("");
                $(".msgcon").append(dialogIsFreeContent);
                $(".msgcon").append(dialogIsPaidContent);
                $(".NZ-MsgBox-alert.NZ-MsgBox--motion").css("top", "100px");
                $(".msgcon").css("height", "400px");
                $(".delsubjecttip i.comiis_font").on("click",(e)=>{
                    var confirmStatus = confirm("确定移出提醒?");
                    var t_index = e.target.parentElement.getAttribute("t-index");
                    if(confirmStatus){
                        data.splice(t_index,1);
                        console.log(data);
                        paymentSubjectReminderHome.setData(data);
                        e.target.parentElement.parentElement.parentElement.parentElement.parentElement.remove();
                    }
                });
                $("#paymentSubjectReminderIsFreeList").on("click","a", (e)=>{
                    var t_index = e.target.getAttribute("t-index");
                    var t_href = e.target.getAttribute("t-href");
                    console.log(t_index,t_href);
                    data[t_index]["isVisited"] = true;
                    paymentSubjectReminderHome.setData(data);
                    window.open(t_href,"_blank");
                    e.target.setAttribute("style","color: #000000;");
                    if(e.target.parentElement.parentElement.children[0].className != "icon_msgs bg_del"){
                        return;
                    }
                    e.target.parentElement.parentElement.children[0].remove();
                    $("#paymentSubjectReminderIsFreeList").append(e.target.parentElement.parentElement.parentElement.parentElement.parentElement);
                    let notVisitedNums = $(".subjectcanvisit summary span.icon_msgs.bg_del.f_f").text();
                    notVisitedNums = parseInt(notVisitedNums)-1;
                    if(notVisitedNums > 0){
                        $(".subjectcanvisit summary span.icon_msgs.bg_del.f_f").html(notVisitedNums);
                    }else{
                        $(".subjectcanvisit summary span.icon_msgs.bg_del.f_f").remove();
                    }
                })
                $("#paymentSubjectReminderIsPaidList").on("click","a", (e)=>{
                    var t_index = e.target.getAttribute("t-index");
                    var t_href = e.target.getAttribute("t-href");
                    console.log(t_index,t_href);
                    window.open(t_href,"_blank");
                    e.target.setAttribute("style","color: #000000;");
                })

            }
        }

        if(storageMatchStatus && urlForumPostMatchStatus){ // 帖子内部-添加进提醒的按钮或者已添加进提醒的按钮点击移出
            let paySubjectTip = $("span.kmren"); // 购买主题的元素
            
            if(paySubjectTip.length != 0){
                log.success("当前帖子存在需要购买主题");
                let isAddTip = false;
                let tipBtnHTML = '';
                Array.from(setTipForumPostList).forEach( (item,index) =>{
                    if(window.location.href.match(item["url"])){
                        isAddTip = true;
                        return;
                    }
                });
                if(isAddTip){
                    log.success("已设置提醒");
                    tipBtnHTML = $(`<a href="javascript:;" class="styli_tit f_c"><i class="comiis_font" style="color: #ffffff;"></i></a>`);
                    tipBtnHTML.on("click", ()=>{
                        let confirmStatus = confirm("确定移出提醒?");
                        if(confirmStatus){
                            Array.from(setTipForumPostList).forEach( (item,index) =>{
                                if(window.location.href.match(item["url"])){
                                    setTipForumPostList.splice(index, 1);
                                    GM_setValue("tipToFreeSubjectForumPost", setTipForumPostList);
                                    popup.open("移出成功","alert");
                                    setTimeout(function(){
                                        window.location.reload();
                                    },1500);
                                    return;
                                }                                
                            });
                        }
                    });
                }else{
                    log.success("未设置提醒");
                    tipBtnHTML = $(`<a href="javascript:;" class="styli_tit f_c"><i class="comiis_font" style="color: #FF9900;"></i></a>`);
                    tipBtnHTML.on("click", ()=>{
                        let expirationTimeMatch = $(".kmren").parent().text().replace(/\t|\n/g,"").match(/[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}[\s]{1}[0-9]{1,2}:[0-9]{1,2}/);
                        if(expirationTimeMatch.length == 0){
                            popup.open("获取付费主题到期时间失败","alert");
                            return;
                        }
                        let expirationTime = expirationTimeMatch[0];
                        let expirationTimeStamp = utils.dateStringFormatToStamp(expirationTime);
                        setTipForumPostList = setTipForumPostList.concat({
                            "url":window.location.href,
                            "title":document.title.replace(" - MT论坛",""),
                            "expirationTime":expirationTime,
                            "expirationTimeStamp":expirationTimeStamp,
                            "isVisited":false
                        });
                        GM_setValue("tipToFreeSubjectForumPost",setTipForumPostList);
                        popup.open("添加成功","alert");
                        setTimeout(function(){
                            window.location.reload();
                        },1500);
                    });
                }
                
                $(".comiis_head.f_top .header_y").append(tipBtnHTML);
            };
        }


        
        
        if(storageMatchStatus && urlHomeSpaceMatchStatus){ // 底部导航-我的-提供类似小黑屋这种可查看设置提醒的帖子
            paymentSubjectReminderHome.insertButtonView();
        }

        if( storageMatchStatus ){ // 设置提醒小红点
            function getTipNums(){
                let needTipNums = 0;
                Array.from(paymentSubjectReminderHome.getData()).forEach( (item,index) =>{
                    if( new Date().getTime() > item["expirationTimeStamp"] && item["isVisited"] == false){
                        needTipNums += 1;
                    }
                });
                return needTipNums;
            }
            if(urlHomeSpaceMatchStatus || urlGuideMatchStatus || urlCommunityMatchStatus){ // 当前网页为,底部导航-我的
                let redBtn = $(".icon_msgs.bg_del.f_f"); // 底部导航-我的-右上角小红点
                let tipNums = 0;
                if(redBtn.length){
                    tipNums = parseInt(redBtn.text());
                    $(".icon_msgs.bg_del.f_f").html(tipNums+getTipNums());
                    $(".comiis_head .header_z .kmuser em").append($(`<span class="icon_msgs bg_del"></span>`));
                }else{
                    let tipnums = getTipNums();
                    if(tipnums){
                        $("ul.comiis_flex li.flex a[title='我的'] i.comiis_font").append($(`<span class="icon_msgs bg_del f_f">${tipnums}</span>`));
                        $(".comiis_head .header_z .kmuser em").append($(`<span class="icon_msgs bg_del"></span>`));
                    }
                }
                
            }
            if(urlHomeSpaceMatchStatus){ // 当前网页为,底部导航-我的-付费主题白嫖列表中最右边
                let tipnums = getTipNums();
                if(tipnums){
                    $(".comiis_flex.comiis_styli.paymentsubjectreminder div.flex").after($(`<span class="myinfo_tip bg_del f_f">${tipnums}</span>`));
                }
                
            }
            if(urlBBSMatchStatus){ // 当前网页为,全部
                let redBtn = $(".sidenv_num.bg_del.f_f"); // 侧边栏-头像-右上角小红点
                let tipNums = 0;
                if(redBtn.length){
                    tipNums = parseInt(redBtn.text());
                    $(".sidenv_num.bg_del.f_f").html(tipNums+getTipNums());
                }else{
                    let tipnums = getTipNums();
                    if(tipnums){
                        $(".sidenv_user em").before($(`<span class="sidenv_num bg_del f_f">${tipnums}</span>`));
                    }
                    
                }
                
            }
        }
        

    }
    


    
    function userCheckBoxSettings() {
        if (window.location.href.match(mt_config.rexp.home_space_url) != null) {
            var setting_content = document.createElement("li");
            setting_content.className = "f_b";
            setting_content.innerHTML = '<div class="styli_tit f_c"><i class="comiis_font" style="color: #a70bfe;font-size: 23px;"></i></div><div class="flex"><select style="vertical-align:top;border-color:transparent" class="beauty-select">' +
                '<option value="v2">识别链接<\/option>' +
                '<option value="v17">自动签到<\/option>' +
                '<option value="v18">自动展开帖子<\/option>' +
                '<option value="v16">自适应帖子内图片的宽度<\/option>' +
                '<option value="v15">显示用户的UID<\/option>' +
                '<option value="v19">显示搜索历史<\/option>' +
                '<option value="v1">移除帖子字体效果<\/option>' +
                '<option value="v3">移除评论区字体效果<\/option>' +
                '<option value="v6">评论区开启点评<\/option>' +
                '<option value="v32">自动加载上一页评论<\/option>' +
                '<option value="v21">自动加载下一页评论<\/option>' +
                '<option value="v30">小黑屋<\/option>' +
                '<option value="v31">快捷回复UBB代码<\/option>' +
                '<option value="v35">完整回复UBB代码<\/option>' +
                '<option value="v33">今日签到之星<\/option>' +
                '<option value="v34">帖外预览图片<\/option>' +
                '<option value="v36">修复搜索的清空按钮<\/option>' +
                '<option value="v37">修复无法正确进入别人的空间<\/option>' +
                '<option value="v42">康哥图床-帖子内(20MB)<\/option>' +
                '<option value="v38">Hello图床-帖子内(20MB)<\/option>' +
                '<option value="v39">Z4A图床-帖子内<\/option>' +
                '<option value="v43">康哥图床-聊天内(20MB)<\/option>' +
                '<option value="v40">Hello图床-聊天内(20MB)<\/option>' +
                '<option value="v41">Z4A图床-聊天内(50MB)<\/option>' +
                '<option value="v44">付费主题白嫖提醒<\/option>' +
            '<div class="styli_ico f_d"><input type="checkbox" class="switch_1" style="float:right;position:relative;margin-top: revert;"></div>' +
                '<\/select><\/div>';
            setting_content.style = "margin: 0px 15px;display: flex;align-items: center;border-top: 1px solid rgb(239, 239, 239) !important;height: 47px;";
            let mt_commis_menu = document.getElementsByClassName("comiis_myinfo_list bg_f cl")[1];
            mt_commis_menu.appendChild(setting_content);
            var setting_selectValue = mt_config.dom_obj.beauty_select().value;
            if (GM_getValue(setting_selectValue) != null) {
                mt_config.dom_obj.combobox_switch().checked = true;
            } else {
                mt_config.dom_obj.combobox_switch().checked = false;
            }

            function set_display_last_click() { //初始化设置上次点击的select内容
                var last_select_value = GM_getValue("last");
                var combobox_switch = mt_config.dom_obj.combobox_switch();
                mt_config.dom_obj.beauty_select().value = last_select_value;
                console.log("上次点击的选项是:" + mt_config.dom_obj.beauty_select().value)
                if (GM_getValue(last_select_value)) {
                    combobox_switch.checked = true;
                } else {
                    combobox_switch.checked = false;
                }
            }
            function set_select_clicked() { // 设置选项被选中
                mt_config.dom_obj.beauty_select().onclick = function (e) {
                    var selected_value = e.target.value;
                    if (GM_getValue(selected_value)) {
                        mt_config.dom_obj.combobox_switch().checked = true;
                    } else {
                        mt_config.dom_obj.combobox_switch().checked = false;
                    }
                }
            }
            function set_checked_clicked() { //设置复选框点击事件特效
                mt_config.dom_obj.combobox_switch().onclick = function () {
                    var currentOptionValue = mt_config.dom_obj.beauty_select().value; // 当前下拉列表对象的值
                    var currentOptionLocalStorageVal = GM_getValue(currentOptionValue);
                    if (currentOptionLocalStorageVal) {
                        GM_deleteValue(currentOptionValue);
                    } else {
                        GM_setValue(currentOptionValue, "true");
                    }
                    var c = GM_getValue(currentOptionValue);
                    var selectedOptionsIndex = mt_config.dom_obj.beauty_select().selectedIndex;
                    var selectedOptionsText = mt_config.dom_obj.beauty_select().options[selectedOptionsIndex].text;
                    var showText = c? `${selectedOptionsText}开启`:`${selectedOptionsText}关闭`;
                    iosOverlay({
                        text: showText,
                        duration: 1500,
                        icon: "https://www.helloimg.com/images/2022/05/24/ZoDS05.png"
                    });
         
                }
         
            }
            function set_select_change_clicked() { // 设置选项改变事件
                $('.beauty-select').change(function () {
                    var select_value = $('.beauty-select').val();
                    GM_setValue("last", select_value);
                    if (GM_getValue(select_value)) {
                        mt_config.dom_obj.combobox_switch().checked = true;
                    } else {
                        mt_config.dom_obj.combobox_switch().checked = false;
                    }
                });
        
            }
            function setCheckBoxCSS() {
                GM_addStyle(`
                    body{background:#000;margin:0;padding:0;}
                    .wrapper{
                        display: -webkit-box;
                        display: -ms-flexbox;
                        display: flex;
                        width: 400px;
                        margin: 50vh auto 0;
                        -ms-flex-wrap: wrap;
                            flex-wrap: wrap;
                        -webkit-transform: translateY(-50%);
                            transform: translateY(-50%);
                    }
        
                    .switch_box{
                        display: -webkit-box;
                        display: -ms-flexbox;
                        display: flex;
                        max-width: 200px;
                        min-width: 200px;
                        height: 200px;
                        -webkit-box-pack: center;
                            -ms-flex-pack: center;
                            justify-content: center;
                        -webkit-box-align: center;
                            -ms-flex-align: center;
                            align-items: center;
                        -webkit-box-flex: 1;
                            -ms-flex: 1;
                            flex: 1;
                    }
        
                    /* Switch 1 Specific Styles Start */
        
                    .box_1{
                        background: #eee;
                    }
        
                    input[type="checkbox"].switch_1{
                        font-size: 14px;
                        -webkit-appearance: none;
                        -moz-appearance: none;
                            appearance: none;
                        width: 3.5em;
                        height: 1.5em;
                        background: #ddd;
                        border-radius: 3em;
                        position: relative;
                        cursor: pointer;
                        outline: none;
                        -webkit-transition: all .2s ease-in-out;
                        transition: all .2s ease-in-out;
                    }
        
                    input[type="checkbox"].switch_1:checked{
                        background: #0ebeff;
                    }
        
                    input[type="checkbox"].switch_1:after{
                        position: absolute;
                        content: "";
                        width: 1.5em;
                        height: 1.5em;
                        border-radius: 50%;
                        background: #fff;
                        -webkit-box-shadow: 0 0 .25em rgba(0,0,0,.3);
                            box-shadow: 0 0 .25em rgba(0,0,0,.3);
                        -webkit-transform: scale(.7);
                            transform: scale(.7);
                        left: 0;
                        -webkit-transition: all .2s ease-in-out;
                        transition: all .2s ease-in-out;
                    }
        
                    input[type="checkbox"].switch_1:checked:after{
                        left: calc(100% - 1.5em);
                    }
        
                    /* Switch 1 Specific Style End */
        
        
                    /* Switch 4 Specific Style Start */
        
                    .box_4{
                        background: #eee;
                    }
        
                    .input_wrapper{
                    width: 80px;
                    height: 40px;
                    position: relative;
                    cursor: pointer;
                    }
        
                    .input_wrapper input[type="checkbox"]{
                    width: 80px;
                    height: 40px;
                    cursor: pointer;
                    -webkit-appearance: none;
                        -moz-appearance: none;
                        appearance: none;
                    background: #315e7f;
                    border-radius: 2px;
                    position: relative;
                    outline: 0;
                    -webkit-transition: all .2s;
                    transition: all .2s;
                    }
        
                    .input_wrapper input[type="checkbox"]:after{
                    position: absolute;
                    content: "";
                    top: 3px;
                    left: 3px;
                    width: 34px;
                    height: 34px;
                    background: #dfeaec;
                    z-index: 2;
                    border-radius: 2px;
                    -webkit-transition: all .35s;
                    transition: all .35s;
                    }
        
                    .input_wrapper svg{
                    position: absolute;
                    top: 50%;
                    -webkit-transform-origin: 50% 50%;
                        transform-origin: 50% 50%;
                    fill: #fff;
                    -webkit-transition: all .35s;
                    transition: all .35s;
                    z-index: 1;
                    }
        
                    .input_wrapper .is_checked{
                    width: 18px;
                    left: 18%;
                    -webkit-transform: translateX(190%) translateY(-30%) scale(0);
                        transform: translateX(190%) translateY(-30%) scale(0);
                    }
        
                    .input_wrapper .is_unchecked{
                    width: 15px;
                    right: 10%;
                    -webkit-transform: translateX(0) translateY(-30%) scale(1);
                        transform: translateX(0) translateY(-30%) scale(1);
                    }
        
                    /* Checked State */
                    .input_wrapper input[type="checkbox"]:checked{
                    background: #23da87;
                    }
        
                    .input_wrapper input[type="checkbox"]:checked:after{
                    left: calc(100% - 37px);
                    }
        
                    .input_wrapper input[type="checkbox"]:checked + .is_checked{
                    -webkit-transform: translateX(0) translateY(-30%) scale(1);
                        transform: translateX(0) translateY(-30%) scale(1);
                    }
        
                    .input_wrapper input[type="checkbox"]:checked ~ .is_unchecked{
                    -webkit-transform: translateX(-190%) translateY(-30%) scale(0);
                        transform: translateX(-190%) translateY(-30%) scale(0);
                    }
                    .beauty-select{
                        background-color: #fff;
                        height:28px;
                        width:180px;
                        line-height:28px;
                        border: 1px solid #ececec;
                        background: url(w.png) no-repeat;
                        background-position: 95% 50%;
        
                        -webkit-appearance: none;  /*去掉样式 for chrome*/
                            appearance:none;/*去掉样式*/
                            -moz-appearance:none;/*去掉样式*/
                    }
                `);
            }
            tryCatch(setCheckBoxCSS);
            tryCatch(set_display_last_click);
            tryCatch(set_select_clicked);
            tryCatch(set_checked_clicked);
            tryCatch(set_select_change_clicked);
        }
    }

    function mobile_all_setting() {
        tryCatch(reviews);
        tryCatch(recoveryIMGWidth);
        tryCatch(link);
        tryCatch(showUserUID);
        tryCatch(previewPictures);
        tryCatch(removeFontStyle);
        tryCatch(changeFontColorToBlack);
        tryCatch(autoSignIn);
        tryCatch(autoExpendFullText);
        tryCatch(searchHistory);
        tryCatch(loadNextComments, '', '$("#loading-comment-tip").text("加载评论失败")');
        tryCatch(loadPrevComments, '', '$("#loading-comment-tip-prev").text("加载评论失败")');
        tryCatch(repairClearSearchInput);
        tryCatch(repairUserSpace);
        tryCatch(postForumKGChartBed);
        tryCatch(postForumHelloChartBed);
        tryCatch(postForumZ4aChartBed);
        tryCatch(chatChartBed);
        tryCatch(paymentSubjectReminder);
    }



    function np() { //这是入口
        var usa = navigator.userAgent.match(mt_config.rexp.pc_useragent);
        if (usa != null) {
            tryCatch(set_PC_js);
            $(document).ready(function () {
                tryCatch(Latest_publication);
                // tryCatch(online_status);
                tryCatch(link);
                tryCatch(collect);
                tryCatch(quick_reply);
                tryCatch(user_level);
                tryCatch(autoSignIn);

            });
        } else {
            $(document).ready(function () {
                tryCatch(compatiblePartialFunction);
                mobile_all_setting();
                tryCatch(shield_user);
                tryCatch(shield_plate);

                tryCatch(userCheckBoxSettings);// 选项主要界面内容

                tryCatch(blackHome.insertMobileBlackHomeButton);
                tryCatch(quickUBB.insertQuickReplyUBB);
                tryCatch(quickUBB.insertReplayUBB);
                tryCatch(insert_blacklist);
                tryCatch(showTodayStar);
                tryCatch(show_latest_sign);
                tryCatch(ios_js_css);
                pageAfterDOMChangeRunFunction();
            })

        }
    } //function np()的结束处
    $(document).ready(function () {
        np()
    });

})();