MT论坛

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

目前为 2022-08-11 提交的版本。查看 最新版本

// ==UserScript==
// @name         MT论坛
// @namespace    http://tampermonkey.net/
// @description  MT论坛效果增强,如自动签到、自动展开帖子、滚动加载评论、显示uid、屏蔽用户、手机版小黑屋、今日签到之星、今日签到排名、帖外预览图片、搜索框清空按钮修复、个人空间正确进入、康哥图床-帖子内(20MB)、Hello图床-帖子内(20MB)、Z4A图床-帖子内(50MB)、康哥图床-聊天内(20MB)、Hello图床-聊天内(20MB)、Z4A图床-聊天内(50MB)、付费主题白嫖提醒等
// @version      2.4.6.1
// @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      https://greasyfork.org/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", "70px");
            $(".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()
    });

})();