Discuz自动回复

Discuz自动回复按钮,可自选回复语句。修改自https://gf.qytechs.cn/scripts/4635

目前為 2021-02-18 提交的版本,檢視 最新版本

// ==UserScript==
// @name         Discuz自动回复
// @namespace    http://tampermonkey.net/
// @version      2.02
// @description  Discuz自动回复按钮,可自选回复语句。修改自https://gf.qytechs.cn/scripts/4635
// @author       backrock12
// @license      GPL License
// @include      http*forum.php?*
// @include      http*thread*.html
// @require      https://gf.qytechs.cn/scripts/421868-gbk-js/code/GBKjs.js?version=901431
// @require      http://libs.baidu.com/jquery/2.0.0/jquery.min.js
// ==/UserScript==

var $jq = jQuery.noConflict(true);
(function ($) {
    "use strict";

    /* 自定义参数 */
    const selectnum = 5; //下拉数量
    const istitle = false; //是否显示标题  true/false
    //回复语
    /* 例子
       {
        key: "www.baidu.com",   //匹配的网址,可以填写正则表达式
        value: [
          "baidu 1",  //对应回复语
          "baidu 2",
          "baidu 3",
          "baidu 4",
          "baidu 5",
        ]
      } */

    const messages = [
        {
            //默认回复,请勿去掉
            key: "default",
            value: [
                "十分感谢分享",
                "楼主是个好人",
                "楼主一生平安",
                "感谢楼主分享,顶贴支持",
                "好东西啊,谢谢楼主分享",
                "收藏了。谢谢楼主分享",
                "大佬辛苦了",
                "感谢楼主分享的内容!",
                "感谢分享!给你点赞!",
                "感谢分享!论坛因你更精彩!",
                "看看隐藏内容是什么!谢谢!",
                "先下载看看好不好用!",
                "楼主一生平安!好人一生平安!",
                "你说的观点我也很支持!",
                "楼主太棒了!我先下为敬!",
                "给楼主点赞,希望继续分享!",
                "感谢论坛,感谢LZ热心分享!",
                "感谢楼主分享优质内容,希望继续努力!",
                "下载试用一下,如果用着不错就给楼主顶贴!",
                "这么好的东西!感谢楼主分享!感谢论坛!",
                "希望楼主继续分享更多好用的东西!谢谢!",
                "看到楼主这么努力分享,我只能顶个贴感谢一下了!",
                "好东西,拿走了,临走顶个贴感谢一下楼主!",
                "这就非常给力了!感谢分享!",
                "厉害了!先收藏,再回复!谢谢!"
            ],
        },
        /*     {
            key: "www.baidu.com",
            value: [
              "baidu 1",
              "baidu 2",
              "baidu 3",
              "baidu 4",
              "baidu 5",
            ]
          }, */
    ];

    /* 系統參數 */
    let isready = true;
    const keyword = "回复可见|隐藏";
    let GBK = null;
    let curmessage;
    var run_mk = true
    var cssnum = 0;
    /* ---------- */

    initialize();

    /* ---------- */

    function autoReply(re_message, obj) {
        if (!isready) return;
        isready = false;

        let default_message;

        let htitle = document.querySelector(".ts");
        if (htitle) {
            htitle = htitle.innerText;
        } else {
            htitle = document.querySelector(".thread_subject");
            if (htitle) htitle = htitle.innerText;
        }

        if (!htitle) htitle = document.title;

        default_message = re_message
            ? re_message
            : curmessage[Math.floor(Math.random() * curmessage.length)];

        let fastpost_textarea = document.querySelectorAll("#fastpostmessage");
        let fastpost_submit = document.querySelectorAll("#fastpostsubmit");
        let fastpost_verify = document.querySelectorAll(
            'input[name="seccodeverify"]'
        );

        let message = istitle ? default_message + "\r\n" + htitle : default_message;

        if (fastpost_textarea.length == 0 || fastpost_submit.length == 0) {
            //   alert("未找到快速回复表格!");
            console.log("未找到快速回复表格!");
            autoReplynoapi(message, obj);
            isready = true;
            return;
        }

        fastpost_textarea[0].innerHTML = message;

        // console.log(message);

        //xhr不需要,不过输入验证码的情况填上也是方便点的
        if (fastpost_verify.length > 0) {
            alert("需要输入验证码!");

            let h = document.body.scrollHeight;
            window.scroll(0, h);
            fastpost_verify[0].focus();
            isready = true;
            return;
        }

        //xhr发帖
        let form = document.querySelectorAll("#fastpostform")[0];
        let url = form.action;
        let hidden = form.querySelectorAll('input[type="hidden"]');
        let data = "";
        for (let i = 0; i < hidden.length; i++) {
            data += hidden[i].name + "=" + hidden[i].value + "&";
        }

        let charset =
            typeof wrappedJSObject == "object"
                ? wrappedJSObject.document.characterSet
                : document.characterSet;

        let mmessage;
        if (charset.toLowerCase() == "gbk") {
            if (!GBK) GBK = GBKfunction();
            mmessage = GBK.URI.encodeURI(message);
        } else {
            mmessage = encodeURIComponent(message);
        }

        let mdata = "message=" + mmessage + "&replysubmit=replysubmit&" + data;
        let xhr = new XMLHttpRequest();
        xhr.open("POST", url, true);
        xhr.setRequestHeader("content-type", "application/x-www-form-urlencoded");
        xhr.onreadystatechange = function (oEvent) {
            if (xhr.readyState === 4) {
                if (xhr.status === 200) {
                    location.reload();
                } else {
                    console.log("Error", xhr.statusText);
                }
            }
        };
        xhr.send(mdata);
        //xhr over
        isready = true;
    }

    function autoReplynoapi(re_message, obj) {
        // console.log(obj);
        if (!obj) return;
        if (obj.className != "locked") return;
        const hf = $(obj).find("a:contains('回复')");
        if (hf.length > 0) {
            hf.click();
            waitElement("#postmessage", 10, 150).then(function () {
                $("#postmessage").val(re_message);
                $("#postsubmit").click();
            });
        } else {
            const fhf = $("#fastpostmessage");
            if (fhf.length > 0) {
                fhf.val(re_message);
                $("#fastpostsubmit").click();
            }
        }

        isready = true;
        return;
    }



    function initialize() {
        const list = document.querySelectorAll("div.locked");
        if (list.length > 0) {
            if (!addcss())
                return
            if (!run_mk) return
            let ulstring = "";

            if (messages.length == 1) {
                curmessage = messages[0].value;
            } else {
                for (let m = 0; m < messages.length; m++) {
                    const e = messages[m];
                    if (e.key == "default") {
                        curmessage = e.value;
                    }
                    let reg;
                    if (Object.prototype.toString.call(e.key) == "[object RegExp]") {
                        reg = e.key;
                    } else {
                        reg = new RegExp(e.key);
                    }
                    if (reg.test(location.href)) {
                        curmessage = e.value;
                        break;
                    }
                }
            }

            const num = selectnum > curmessage.length ? curmessage.length : selectnum;
            for (let i = 0; i < num; i++) {
                ulstring += `<li><a href="javascript:;">${curmessage[i]}</a></li>`;
            }

            if (!run_mk) return

            if (ulstring) {
                for (const n of list) {

                    if (
                        n.innerHTML.search(new RegExp(keyword)) != -1
                        &&
                        n.innerHTML.search(new RegExp('title="内容购买"'))
                    ) {
                        let bt = document.createElement("div");
                        bt.className = "DiscuzautoReplyele";
                        bt.innerHTML = `
            <div class="DiscuzautoReply">
            <button class="DiscuzautoReplybutton" >自动回复</button>
          <div class="DiscuzautoReplyDiv">
          <button class="DiscuzautoReplyhead">»</button>
          <div class="DiscuzautoReplyDownbtn">
            <ul>
              ${ulstring}
            </ul>
          </div>
        </div>
        </div>
          `;
                        run_mk = false;
                        n.appendChild(bt);
                    }

                }

                const allbutton = document.querySelectorAll(".DiscuzautoReplybutton");
                for (let b of allbutton) {
                    b.onclick = function () {
                        autoReply(null, this.parentElement.parentElement.parentElement);
                    };
                }

                const alla = document.querySelectorAll(
                    ".DiscuzautoReplyDownbtn ul li a"
                );
                for (let b of alla) {
                    b.onclick = function () {
                        autoReply(
                            this.innerHTML,
                            this.parentElement.parentElement.parentElement
                        );
                    };
                }


            }
        }
    }

    function addcss() {
        const cssText = [
            `
            .DiscuzautoReplybutton {
            color: rgb(102, 102, 102);
            background-color: rgb(238, 238, 238);
            border: medium none;
            font-weight: 300;
            font-size: 15px;
            text-decoration: none;
            text-align: center;
            line-height: 20px;
            height: 20px;
            padding-left: 15px;
            padding-right: 0px;
            margin: 0px 0px 0px 5px;
            display: inline-block;
            -moz-appearance: none;
            cursor: pointer;
            box-sizing: border-box;
            transition-property: all;
            transition-duration: 0.3s;
            border-radius: 4px;
            }
            `,
            `    .DiscuzautoReplyDiv{
                display:inline-block;
            }`,
            `    .DiscuzautoReplyDiv:hover .DiscuzautoReplyDownbtn{
                display:block;
                 background-color: #f1f1f1;
            }`,
            `    .DiscuzautoReplyDiv .DiscuzautoReplyDownbtn{
                display:none;
                background-color:#f9f9f9;
                box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
                min-width: 160px;
                position:absolute;
                z-index:9999;
                margin: -2px 2px 2px -40px;
                transition:all .5s .1s;
                -moz-transition:all .5s .1s;
                -ms-transition:all .5s .1s;
                -o-transition:all .5s .1s;
                -webkit-transition:all .5s .1s;
            }`,
            `    .DiscuzautoReplyDiv .DiscuzautoReplyDownbtn li{
                line-height:20px;
                text-align:left;
                padding-left:4px;
                margin-left: 0px;
                list-style: none;
            }`,
            `
            .DiscuzautoReplyDiv .DiscuzautoReplyDownbtn ul {
            margin: 0px;
            padding: 0px;
            text-decoration: none;
            list-style: none;
            left:auto;
            right:0;
            }`,
            `    .DiscuzautoReplyDiv .DiscuzautoReplyDownbtn a:hover{
                text-decoration:underline;
                color:#f00;
                transition:all .5s .1s;
                -moz-transition:all .5s .1s;
                -ms-transition:all .5s .1s;
                -o-transition:all .5s .1s;
                -webkit-transition:all .5s .1s;
            }`,
            `    .DiscuzautoReplyDiv .DiscuzautoReplyDownbtn a{
                display:block;
                color:black;
                width:100%;
                font-size: 13px;
            }`,
            `.DiscuzautoReplyhead {
              color: rgb(102, 102, 102);
              background-color: rgb(238, 238, 238);
              border: medium none;
              font-size: 15px;
              text-decoration: none;
              text-align: center;
              line-height: 20px;
              height: 20px;
              margin-left: -5px;
              padding-left: 20px;
            }`,
          ];

        try {
            for (const s of cssText) {
                document.styleSheets[0].insertRule(s, 0);
            }
            return true;
        }
        catch (e) {
            console.log('addcss err')
            if (cssnum >= 5)
                return false;
            cssnum++;
            setTimeout(initialize, 1000)
            return false;
        }
    }


    function waitElement(selector, times, interval, flag = true) {
        var _times = times || -1, // 默认不限次数
            _interval = interval || 500, // 默认每次间隔500毫秒
            _selector = selector, //选择器
            _iIntervalID,
            _flag = flag; //定时器id
        return new Promise(function (resolve, reject) {
            _iIntervalID = setInterval(function () {
                if (!_times) {
                    //是0就退出
                    clearInterval(_iIntervalID);
                    reject();
                }
                _times <= 0 || _times--; //如果是正数就 --
                var _self = $(_selector); //再次选择
                if ((_flag && _self.length) || (!_flag && !_self.length)) {
                    //判断是否取到
                    clearInterval(_iIntervalID);
                    resolve(_iIntervalID);
                }
            }, _interval);
        });
    }
})($jq);

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址