您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
9大妈一键随机回复帖子, 切勿滥用, 违反9大妈论坛的规矩导致的后果, 作者一概不负.功能: 1. 添加随机回复按钮2. 添加快捷回复下拉框3. 添加评论管理器
// ==UserScript== // @name 9dm随机回帖 // @namespace https://greasyfork.org/zh-CN/scripts/429335 // @icon data:image/png;base64,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 // @match *://www.9dmdamaomod.net/thread-* // @match *://www.9dmdamaomod.net/forum.php* // @grant GM_info // @grant GM_registerMenuCommand // @grant GM_unregisterMenuCommand // @grant GM_openInTab // @grant GM_getValue // @grant GM_setValue // @grant GM_notification // @version 1.22 // @author 六记 // @description 9大妈一键随机回复帖子, 切勿滥用, 违反9大妈论坛的规矩导致的后果, 作者一概不负.功能: 1. 添加随机回复按钮2. 添加快捷回复下拉框3. 添加评论管理器 // ==/UserScript== (function () { var defualtMsg = [ "楼主@{author} 流弊~", "楼主, 为你点[b]赞[/b]", "感谢楼主分享", "66666666666666", "针不戳呀,写的针不戳!", "{hitokoto}", ] if(!GM_getValue('msg')){ GM_setValue('msg',defualtMsg); } var MSG = GM_getValue('msg'); var notification = {text: "", title:`${GM_info.script.name}`, image:`${GM_info.script.icon}`, timeout: 3000}; var enable = GM_getValue('enable'), debug = GM_getValue('debug'), menu_enable_toggle_ID, menu_debug_toggle_ID, menu_feedBack_ID, menu_Quick_ID; registerMenuCommand(); debugging("-->添加<随机回复>按钮<--"); let scrolltop = document.querySelector(".c1scrolltop"); let ulButton = document.querySelector(".c1scrolltop>ul"); if(ulButton){ try{ let ul = ulButton.innerHTML; let html = '<li class="reply ac_show" id="action"><span>随机回复</span></li>'; scrolltop.innerHTML = '<ul>'+ html + ul+'</ul>'; let button = document.querySelector("#action"); debugging(`-->找到<随机回复>按钮: ${button}<--`); debugging(`给按钮添加点击监听事件:\n-->${actionRandom}<--`); button.addEventListener("click", actionRandom); createSelect(); console.log(`脚本: ${GM_info.script.name}启动成功`); }catch(exception){ debugging(`-->触发异常: ${exception}<--`); console.log(`脚本: ${GM_info.script.name}启动失败`); } } function createSelect(){ debugging("-->添加<简洁回复框>[下拉框]<--"); let inputButton = document.querySelector("#fastposteditor"); let selectButton = document.querySelector("#select"); let option; MSG = GM_getValue('msg'); if(!selectButton){ option = '<option value="0">↓↓↓选择快捷回复↓↓↓</option>'; for(let i in MSG){ option += `<option value="${i+1}">${MSG[i]}</option>`; } let select = `<lable>快捷回复列表<select id="select">${option}</select></lable>`; inputButton.innerHTML = select + inputButton.innerHTML; selectButton = document.querySelector("#select"); selectButton.addEventListener("change", actionQuick); }else{ option = '<option value="0">↓↓↓选择快捷回复↓↓↓</option>'; for(let i in MSG){ option += `<option value="${i+1}">${MSG[i]}</option>`; } selectButton.innerHTML = option; selectButton.addEventListener("change", actionQuick); } } debugging("-->创建事件<--"); // 随机回复事件 function actionRandom(){ debugging("-->触发点击<随机回复>事件<--"); getAuthor(); getHitokoto(); let info = { author:window.author ? window.author : "楼主获取失败", hitokoto:window.hitokoto ? window.hitokoto : "一言获取失败", } debugging(`-->楼主: ${info.author}<--`); debugging(`-->一言: ${info.hitokoto}<--`); let inputButton; let initialValue; let initialStyleColor; let pushButton; MSG = GM_getValue('msg'); let msgIndex = Math.floor(Math.random() * MSG.length); let msg = MSG[msgIndex].format(info); inputButton = document.querySelector("#vmessage"); debugging(`-->获取快捷回复输入框: ${inputButton?"成功":"失败"}<--`); if(inputButton){ initialValue = inputButton.value; initialStyleColor = inputButton.style.color; debugging("-->1. 获得焦点<--"); inputButton.focus(); inputButton.style.color = "rgb(0,0,0)"; debugging(`-->2. 填写回复:${msg} ${msgIndex}<--`); inputButton.value = msg; debugging(`-->3. 点击<快捷回复>按钮<--`); pushButton = document.querySelector("#vreplysubmit"); }else{ try{ inputButton = document.querySelector("#fastpostmessage"); debugging(`-->获取简洁回复输入框: ${inputButton?"成功":"失败"}<--`); initialValue = inputButton.value; initialStyleColor = inputButton.style.color; debugging("-->1. 获得焦点<--"); inputButton.focus(); inputButton.style.color = "rgb(0,0,0)"; debugging(`-->2. 填写回复:${msg} ${msgIndex}<--`); inputButton.value = msg; debugging(`-->3. 点击<发表回复>按钮<--`); pushButton = document.querySelector("#fastpostsubmit"); }catch(err){ debugging(`-->触发未知BUG: 不存在<简洁回复>,也不存在<快捷回复>\n错误原因: ${err}<--`); return; } } enable = GM_getValue('enable'); if(enable){ debugging(`-->回帖内容:${inputButton.value} 默认内容:${initialValue} ${inputButton.value == initialValue?'相等, 不应该发送':'不相等, 应该发送'}<--`); if(inputButton.value != initialValue){ pushButton.click(); debugging(`-->4. 还原 还原样式:${initialStyleColor}<--`); let title = document.querySelector("#thread_subject"); title = title?title.innerText:"帖子名称获取失败"; notification.text = `帖子:${title}\n回帖成功, 回复内容:${inputButton.value}` GM_notification(notification); // 提示消息 inputButton.blur(); inputButton.style.color = initialStyleColor; }else{ notification.text = `回帖失败, 回复内容:${inputButton.value}` GM_notification(notification); // 提示消息 } } } // 快捷回复事件 function actionQuick(){ debugging("-->触发点击<快捷回复>事件<--"); debugging("判断是否为网址第一页"); getAuthor(); getHitokoto(); let info = { author:window.author ? window.author : "楼主获取失败", hitokoto:window.hitokoto ? window.hitokoto : "一言获取失败", } debugging(`-->楼主: ${info.author}<--`); debugging(`-->一言: ${info.hitokoto}<--`); let inputButton; let initialValue; let initialStyle; let pushButton; let selectButton = document.querySelector("#select"); let Index = selectButton.selectedIndex - 1; if(Index > -1 && Index < MSG.length){ let msg = MSG[Index].format(info); debugging("-->获取简洁回复输入框<--"); inputButton = document.querySelector("#fastpostmessage"); initialValue = inputButton.value; initialStyle = inputButton.style; debugging("-->1. 获得焦点<--"); inputButton.focus(); inputButton.style.color = "rgb(0,0,0)"; debugging(`-->2. 填写回复:${msg} ${Index}<--`); inputButton.value = msg; debugging(`-->3. 点击<发表回复>按钮<--`); pushButton = document.querySelector("#fastpostsubmit"); enable = GM_getValue('enable'); if(enable){ debugging(`-->回帖内容:${inputButton.value} 默认内容:${initialValue} ${inputButton.value == initialValue?'相等, 不应该发送':'不相等, 应该发送'}<--`); if(inputButton.value != initialValue){ pushButton.click(); debugging(`-->4. 还原 还原样式:${initialStyleColor}<--`); let title = document.querySelector("#thread_subject"); title = title?title.innerText:"帖子名称获取失败"; notification.text = `帖子:${title}\n回帖成功, 回复内容:${inputButton.value}` GM_notification(notification); // 提示消息 inputButton.blur(); inputButton.style.color = initialStyleColor; }else{ notification.text = `回帖失败, 回复内容:${inputButton.value}` GM_notification(notification); // 提示消息 } } } } // 打印调试信息 function debugging(str){ debug = GM_getValue('debug'); if(debug){ console.log(str) } } // box事件 function boxClose(event){ debugging("-->触发窗口关闭事件<--"); event.stopPropagation(); let box = document.querySelector("#box"); if(box){ box.hidden = true; } } function boxReset(event){ debugging("-->触发评论重置事件<--"); event.stopPropagation(); let box = document.querySelector("#box"); if(box){ let text = document.querySelector("#text"); text.value = defualtMsg.join("\n"); } } function boxSave(event){ debugging("-->触发评论保存事件<--"); event.stopPropagation(); let box = document.querySelector("#box"); if(box){ let text = document.querySelector("#text"); let comment = text.value; let comments = comment.split("\n"); debugging(comments); GM_setValue('msg', comments); createSelect() } } // -------- 获取信息事件----------- // 获取楼主名称 function getAuthor(){ let author = document.querySelector("#tath>a"); if(author){ window.author = author.title; }else{ window.author = document.querySelector(".authi>.xw1").innerText; } return window.author } // 获取一言 function getHitokoto(){ let msg; let author; let httpRequest; try{ if (window.XMLHttpRequest){// code for IE7, Firefox, Mozilla, etc. httpRequest=new XMLHttpRequest(); }else if (window.ActiveXObject){// code for IE5, IE6 httpRequest=new ActiveXObject("Microsoft.XMLHTTP"); } httpRequest.open('GET', 'https://v1.hitokoto.cn/', true); httpRequest.send(); httpRequest.onload = function () { if (httpRequest.readyState == 4 && httpRequest.status == 200) { let json = httpRequest.responseText; let jsonObject = eval('(' + json + ')'); msg = jsonObject.hitokoto; author = jsonObject.from; let spaceLength = Math.floor(msg.length * 2); let space = new Array(spaceLength).join(" "); window.hitokoto = `${msg}\n${space}-${author}`; }else{ alert(`HTTP请求失败,错误原因: 请求的URL的相应状态=${httpRequest.status}\n请求的结果状态=${httpRequest.readyState}`); } }; httpRequest.onerror = function(){ alert(`HTTP请求失败,错误原因: 请求的URL的相应状态=${httpRequest.status}\n请求的结果状态=${httpRequest.readyState}`); } }catch(err){ debugging(`-->HTTP请求失败, 未知错误<--`); } } // 添加字符串format方法 String.prototype.format = function(args) { var result = this; if (arguments.length > 0) { if (arguments.length == 1 && typeof (args) == "object") { for (var key in args) { if(args[key]!=undefined){ var reg = new RegExp("({" + key + "})", "g"); result = result.replace(reg, args[key]); } } } else { for (var i = 0; i < arguments.length; i++) { if (arguments[i] != undefined) { //var reg = new RegExp("({[" + i + "]})", "g");//这个在索引大于9时会有问题 var reg = new RegExp("({)" + i + "(})", "g"); result = result.replace(reg, arguments[i]); } } } } return result; } // -------- 脚本菜单----------- debugging("-->创建脚本菜单<--"); // 注册脚本菜单 function registerMenuCommand() { if (menu_feedBack_ID || menu_enable_toggle_ID || menu_debug_toggle_ID || menu_Quick_ID){ // 如果反馈菜单ID不是 null,则删除所有脚本菜单 GM_unregisterMenuCommand(menu_enable_toggle_ID); GM_unregisterMenuCommand(menu_debug_toggle_ID); GM_unregisterMenuCommand(menu_Quick_ID); GM_unregisterMenuCommand(menu_feedBack_ID); enable = GM_getValue('enable'); debug = GM_getValue('debug'); } menu_feedBack_ID = GM_registerMenuCommand('💬 反馈 & 建议 [Github]', function () {window.GM_openInTab('https://github.com/ACG-Q/script/issues/1', {active: true,insert: true,setParent: true});}); menu_Quick_ID = GM_registerMenuCommand(`🧰 快捷评论管理`, menu_Quick); menu_enable_toggle_ID = GM_registerMenuCommand(`🔄 ${enable?'开启':'关闭'} 自动回复 - 点击切换`, menu_enable_toggle); menu_debug_toggle_ID = GM_registerMenuCommand(`🔄 ${debug?'开启':'关闭'} 调试 - 点击切换`, menu_debug_toggle); } // 切换事件 function menu_enable_toggle() { enable = GM_getValue('enable'); GM_setValue('enable', !enable); enable = GM_getValue('enable'); notification.text = `已${enable?'开启':'关闭'} 自动回复` GM_notification(notification); // 提示消息 registerMenuCommand(); // 重新注册脚本菜单 }; function menu_debug_toggle(){ debug = GM_getValue('debug'); GM_setValue('debug', !debug); debug = GM_getValue('debug'); notification.text = `已${debug?'开启':'关闭'} 调试` GM_notification(notification); // 提示消息 registerMenuCommand(); // 重新注册脚本菜单 }; function menu_Quick(){ let box = document.querySelector("#box"); let msg; if(!box){ let quickHTML = '<div id="box" style="position: fixed; top: 105px; left: 1022px; padding: 10px; background: rgb(255, 255, 255) none repeat scroll 0% 0%; border-radius: 10px; z-index: 9; cursor: default; border: 1px solid;"><input type="button" value="X" id="close" style="border: 1px solid;background: rgba(255, 255, 255,0) none repeat scroll 0% 0%;padding: 0;float: right;width: 20px;border-radius: 5px;text-align: center;"><h1>快捷评论管理</h1><textarea id="text" autofocus="true" style="width: 250px;height: 200px;border-radius: 5px;border: 1px solid;"></textarea><br><input type="button" value="重置" id="reset" style="border: none;background: rgba(255, 255, 255,0) none repeat scroll 0% 0%;padding: 0;margin: 0;"> <input type="button" value="保存" id="save" style="border: none;background: rgba(255, 255, 255,0) none repeat scroll 0% 0%;padding: 0;margin: 0;"></div>'; let body = document.querySelector("body"); body.innerHTML = quickHTML + body.innerHTML; box = document.querySelector("#box"); let left = GM_getValue("boxLeft"); let top = GM_getValue("boxTop"); if(left || top){ box.style.left = left + 'px'; box.style.top = top + 'px'; } let text = document.querySelector("#text"); msg = GM_getValue('msg'); text.value = msg.join("\n"); // -----拖拽事件------- let x,y,isDown = false; //鼠标按下事件 box.addEventListener('mousedown',mousedownbox); function mousedownbox(e) { //获取x坐标和y坐标 x = e.clientX; y = e.clientY; //获取左部和顶部的偏移量 left = box.offsetLeft; top = box.offsetTop; //开关打开 isDown = true; //设置样式 box.style.cursor = 'move'; } //鼠标移动 box.addEventListener('mousemove',mousemovebox); function mousemovebox(e) { if (isDown == false) { return; } //获取x和y let nx = e.clientX; let ny = e.clientY; //计算移动后的左偏移量和顶部的偏移量 let nl = nx - (x - left); let nt = ny - (y - top); box.style.left = nl + 'px'; box.style.top = nt + 'px'; GM_setValue("boxLeft",nl); GM_setValue("boxTop",nt); } //鼠标抬起事件 box.addEventListener('mouseup',mouseupbox); function mouseupbox() { //开关关闭 isDown = false; box.style.cursor = 'default'; } function noMove(event){ debugging("-->触发不鼠标移动事件<--"); isDown = false; } // -----按钮关闭事件----- let closeButton = document.querySelector("#close"); let resetButton = document.querySelector("#reset"); let saveButton = document.querySelector("#save"); let button = document.querySelector("#action"); closeButton.addEventListener("click", boxClose); resetButton.addEventListener("click", boxReset); saveButton.addEventListener("click", boxSave); closeButton.addEventListener("mousemove", noMove); resetButton.addEventListener("mousemove", noMove); saveButton.addEventListener("mousemove", noMove); text.addEventListener("mousemove", noMove); button.addEventListener("click", actionRandom); }else{ box.hidden = !box.hidden; let text = document.querySelector("#text"); msg = GM_getValue('msg'); text.value = msg.join("\n"); } } })()