Greasy Fork

来自缓存

Greasy Fork is available in English.

9dm随机回帖

9大妈一键随机回复帖子, 切勿滥用, 违反9大妈论坛的规矩导致的后果, 作者一概不负.功能: 1. 添加随机回复按钮2. 添加快捷回复下拉框3. 添加评论管理器

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name        9dm随机回帖
// @namespace   http://greasyfork.icu/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;">&nbsp;&nbsp;<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");
    }
  }
})()