Discuz自动回复按钮,可自选回复语句。修改自https://greasyfork.org/scripts/4635
// ==UserScript==// @name Discuz自动回复// @namespace http://tampermonkey.net/// @version 2.23// @description Discuz自动回复按钮,可自选回复语句。修改自https://greasyfork.org/scripts/4635// @author backrock12// @license GPL License// @include http://*forum.php?*// @include http://*thread*.html// @include https://*forum.php?*// @include https://*thread*.html// @include *thread*.html// @include *forum.php?*// @require https://greasyfork.org/scripts/421868-gbk-js/code/GBKjs.js?version=901431// ==/UserScript==(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热心分享!","感谢楼主分享优质内容,希望继续努力!","下载试用一下,如果用着不错就给楼主顶贴!","这么好的东西!感谢楼主分享!感谢论坛!","希望楼主继续分享更多好用的东西!谢谢!","看到楼主这么努力分享,我只能顶个贴感谢一下了!","好东西,拿走了,临走顶个贴感谢一下楼主!","这就非常给力了!感谢分享!","厉害了!先收藏,再回复!谢谢!","感谢大佬分享6!",],},/* {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;console.log("autoReply");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) {//console.log("OK", xhr);location.reload();} else {console.log("Error", xhr.statusText);}}};xhr.send(mdata);//xhr overisready = true;}function autoReplynoapi(re_message, obj) {// console.log(obj);if (!obj) return;if (obj.className != "locked") return;//const hf = $(obj).find("a:contains('回复')");// const hf = obj.querySelector("a:contains('回复')");const hf = [...obj.querySelectorAll("div")].filter((div) =>div.innerHTML.includes("回复"));if (hf.length > 0) {hf[0].click();waitElement("#postmessage", 10, 150).then(function () {// $("#postmessage").val(re_message);// $("#postsubmit").click();document.querySelector("#postmessage").value = re_message;document.querySelector("#postsubmit").click();}).catch(function () {console.log("waitElement error");});} else {// const fhf = $("#fastpostmessage");const fhf = document.querySelector("#fastpostmessage");if (fhf) {//fhf.val(re_message);fhf.value = re_message;// $("#fastpostsubmit").click();const c = document.querySelector("#fastpostsubmit");c.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;}`,];function createStyleSheet() {var head = document.head || document.getElementsByTagName("head")[0];var style = document.createElement("style");style.type = "text/css";head.appendChild(style);return style.sheet || style.styleSheet;}try {var sheet = createStyleSheet();for (const s of cssText) {// document.styleSheets[0].insertRule(s, 0);sheet.insertRule(s, 0);}return true;} catch (e) {console.log("addcss err");if (cssnum >= 5) {console.log("initialize初始化失敗");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, //定时器id_flag = flag;return new Promise(function (resolve, reject) {_iIntervalID = setInterval(function () {if (!_times) {//是0就退出clearInterval(_iIntervalID);reject();}_times <= 0 || _times--; //如果是正数就 --// var _self = $(_selector); //再次选择const _self = document.querySelectorAll(_selector);if ((_flag && _self.length) || (!_flag && !_self.length)) {//判断是否取到clearInterval(_iIntervalID);resolve(_self);}}, _interval);});}})();