Discuz!

设置每小时发回帖数限制,显示回复限制倒计时,到点系统通知提醒,提供4个自定地址,配置持久化

目前为 2023-10-08 提交的版本。查看 最新版本

  1. // ==UserScript==
  2. // @name Discuz!
  3. // @icon https://www.discuz.vip/favicon.ico
  4. // @namespace https://greasyfork.org/users/878514
  5. // @version 20231009
  6. // @description 设置每小时发回帖数限制,显示回复限制倒计时,到点系统通知提醒,提供4个自定地址,配置持久化
  7. // @author Velens
  8. // @match *://*/forum.php*
  9. // @match *://*/forum-*.html
  10. // @match *://*/thread-*.html
  11. // @require https://code.jquery.com/jquery-3.6.0.min.js
  12. // @license MIT
  13. // @grant GM_registerMenuCommand
  14. // @grant GM_setValue
  15. // @grant GM_getValue
  16. // @grant GM_addStyle
  17. // @grant GM_notification
  18. // @grant GM_xmlhttpRequest
  19. // @connect *
  20. // ==/UserScript==
  21.  
  22. /* globals jQuery, $, waitForKeyElements */
  23. let tieshu = GM_getValue("tieshu",0),tieshuMenu = tieshu;
  24. let flagNotice = GM_getValue("flagNotice",false),flagNoticenow = false,flagNoticeMenu;
  25. let baseHref = $("base").attr("href");
  26. let baseTitle = baseHref.replace(/(http|https):\/\//,"").replace(/\//,"");
  27. let tieshu1 = GM_getValue("tieshu1"),tieshuMenu1 = tieshu1,baseHref1 = GM_getValue("baseHref1"),baseTitle1;
  28. let tieshu2 = GM_getValue("tieshu2"),tieshuMenu2 = tieshu2,baseHref2 = GM_getValue("baseHref2"),baseTitle2;
  29. let tieshu3 = GM_getValue("tieshu3"),tieshuMenu3 = tieshu3,baseHref3 = GM_getValue("baseHref3"),baseTitle3;
  30. let tieshu4 = GM_getValue("tieshu4"),tieshuMenu4 = tieshu4,baseHref4 = GM_getValue("baseHref4"),baseTitle4;
  31.  
  32. if(tieshu == 0){tieshuMenu = "关闭"};
  33. GM_registerMenuCommand("贴数限制:" + tieshuMenu,tieShu)
  34. function tieShu(){
  35. tieshu = prompt("请输入每小时发回帖数限制(关闭:0)", GM_getValue("tieshu"));
  36. if(/^\d+$/.test(tieshu) && tieshu != GM_getValue("tieshu")){
  37. GM_setValue("tieshu",tieshu);
  38. location.reload();}
  39. };
  40.  
  41. if(flagNotice){flagNoticeMenu = "开启"}
  42. else{flagNoticeMenu = "关闭"};
  43. GM_registerMenuCommand("到点提醒:" + flagNoticeMenu,flagNoticef)
  44. function flagNoticef(){
  45. flagNotice = !GM_getValue("flagNotice");
  46. GM_setValue("flagNotice",flagNotice);
  47. location.reload();
  48. };
  49.  
  50. if(tieshu1 == 0){tieshuMenu1 = "关闭"}
  51. if(!baseHref1){baseTitle1 = "网址";tieshuMenu1 = "帖数"}
  52. else{baseTitle1 = baseHref1.replace(/(http|https):\/\//,"").replace(/\//,"")};
  53. GM_registerMenuCommand("自定1:" + baseTitle1 + "," + tieshuMenu1,baseHref1f)
  54. function baseHref1f(){
  55. baseHref1 = baseHref;
  56. tieshu1 = prompt("请输入每小时发回帖数限制(关闭:0)", GM_getValue("tieshu1"));
  57. if(/^\d+$/.test(tieshu1)){
  58. if(baseHref1 != GM_getValue("baseHref1") || tieshu1 != GM_getValue("tieshu1")){
  59. GM_setValue("tieshu1",tieshu1);
  60. GM_setValue("baseHref1",baseHref1);
  61. location.reload();}
  62. }
  63. };
  64.  
  65. if(tieshu2 == 0){tieshuMenu2 = "关闭"}
  66. if(!baseHref2){baseTitle2 = "网址";tieshuMenu2 = "帖数"}
  67. else{baseTitle2 = baseHref2.replace(/(http|https):\/\//,"").replace(/\//,"")};
  68. GM_registerMenuCommand("自定2:" + baseTitle2 + "," + tieshuMenu2,baseHref2f)
  69. function baseHref2f(){
  70. baseHref2 = baseHref;
  71. tieshu2 = prompt("请输入每小时发回帖数限制(关闭:0)", GM_getValue("tieshu2"));
  72. if(/^\d+$/.test(tieshu2)){
  73. if(baseHref2 != GM_getValue("baseHref2") || tieshu2 != GM_getValue("tieshu2")){
  74. GM_setValue("tieshu2",tieshu2);
  75. GM_setValue("baseHref2",baseHref2);
  76. location.reload();}
  77. }
  78. };
  79.  
  80. if(tieshu3 == 0){tieshuMenu3 = "关闭"}
  81. if(!baseHref3){baseTitle3 = "网址";tieshuMenu3 = "帖数"}
  82. else{baseTitle3 = baseHref3.replace(/(http|https):\/\//,"").replace(/\//,"")};
  83. GM_registerMenuCommand("自定3:" + baseTitle3 + "," + tieshuMenu3,baseHref3f)
  84. function baseHref3f(){
  85. baseHref3 = baseHref;
  86. tieshu3 = prompt("请输入每小时发回帖数限制(关闭:0)", GM_getValue("tieshu3"));
  87. if(/^\d+$/.test(tieshu3)){
  88. if(baseHref3 != GM_getValue("baseHref3") || tieshu3 != GM_getValue("tieshu3")){
  89. GM_setValue("tieshu3",tieshu3);
  90. GM_setValue("baseHref3",baseHref3);
  91. location.reload();}
  92. }
  93. };
  94.  
  95. if(tieshu4 == 0){tieshuMenu4 = "关闭"}
  96. if(!baseHref4){baseTitle4 = "网址";tieshuMenu4 = "帖数"}
  97. else{baseTitle4 = baseHref4.replace(/(http|https):\/\//,"").replace(/\//,"")};
  98. GM_registerMenuCommand("自定4:" + baseTitle4 + "," + tieshuMenu4,baseHref4f)
  99. function baseHref4f(){
  100. baseHref4 = baseHref;
  101. tieshu4 = prompt("请输入每小时发回帖数限制(关闭:0)", GM_getValue("tieshu4"));
  102. if(/^\d+$/.test(tieshu4)){
  103. if(baseHref4 != GM_getValue("baseHref4") || tieshu4 != GM_getValue("tieshu4")){
  104. GM_setValue("tieshu4",tieshu4);
  105. GM_setValue("baseHref4",baseHref4);
  106. location.reload();}
  107. }
  108. };
  109.  
  110. if(baseHref == baseHref1){tieshu = tieshu1};
  111. if(baseHref == baseHref2){tieshu = tieshu2};
  112. if(baseHref == baseHref3){tieshu = tieshu3};
  113. if(baseHref == baseHref4){tieshu = tieshu4};
  114. if($("#g_upmine").text() && tieshu != 0){
  115. var numPage = Math.ceil(tieshu/20);
  116. GM_xmlhttpRequest({
  117. method: "get",
  118. url: baseHref + "home.php?mod=space&do=thread&view=me&type=reply&from=space&page=" + numPage,
  119. onload: function(resHome) {
  120. const pid = resHome.responseText.match(/ptid=\d+&pid=\d+/g);
  121. if(pid.length >= tieshu - 20*(numPage-1) && tieshu > 0){
  122. const pidNum= pid.map(value => value.match(/\d+/g));
  123. let i = 0,j = 0,t;
  124. for ( i = 0; i < pidNum.length; i++){
  125. for (j = 0; j < pidNum.length; j++){
  126. if (pidNum[i][1] > pidNum[j][1]){
  127. t = pidNum[i];
  128. pidNum[i] = pidNum[j];
  129. pidNum[j] = t;
  130. }}}
  131. const pidNew = pidNum[tieshu - 20*(numPage-1)-1];
  132. GM_xmlhttpRequest({
  133. method: "get",
  134. url: baseHref + "forum.php?mod=redirect&goto=findpost&ptid=" + pidNew[0] + "&pid=" + pidNew[1],
  135. onload: function(resTime) {
  136. let pidIndex = resTime.responseText.indexOf("authorposton" + pidNew[1]);
  137. let pidTime = resTime.responseText.substring(pidIndex+21,pidIndex+80);
  138. pidTime = pidTime.match(/\d+-\d+-\d+ \d+:\d+/)[0];
  139. var pidTimestamp = Date.parse(pidTime) + 3600000;
  140. var nowTime = Date.now();
  141. var waitTime = Math.ceil((pidTimestamp - nowTime)/60000);
  142. if(waitTime > 0){
  143. var buttonTime = "<button class='limitTime'></button>";
  144. $("body").append(buttonTime);
  145. $('.limitTime').click(function () {
  146. if(flagNotice){flagNotice = false;}
  147. else{flagNoticenow = !flagNoticenow;}
  148. if(flagNotice || flagNoticenow){GM_addStyle(`.limitTime{border: 2px solid #00FF00;}`);}
  149. else{GM_addStyle(`.limitTime{border: 2px solid #444;}`);}
  150. })
  151. $(".limitTime").attr("title", "每小时发回帖数限制 " + tieshu + "\n发表于 " + pidTime);
  152. $(".limitTime").text("回复限制 " + waitTime + " 分钟");
  153. if(flagNotice || flagNoticenow){GM_addStyle(`.limitTime{border: 2px solid #00FF00;}`);}
  154. else{GM_addStyle(`.limitTime{border: 2px solid #444;}`);}
  155. GM_addStyle(`.limitTime{position:fixed;top:163px;right:0px;white-space:pre-wrap;opacity:0.8;border-radius:10px;}`);
  156. var myVar = setInterval(waitVar, 10000);}
  157. function waitVar(){
  158. var nowTime = Date.now();
  159. var waitTime = Math.ceil((pidTimestamp - nowTime)/60000);
  160. if(waitTime > 0){
  161. $(".limitTime").text("回复限制 " + waitTime + " 分钟");
  162. }else{
  163. clearInterval(myVar);
  164. GM_addStyle(`.limitTime{display:none;}`);
  165. if(flagNotice || flagNoticenow){
  166. flagNotice = false;
  167. flagNoticenow = false;
  168. GM_notification({title: baseTitle,text:"每小时发回帖数限制已解除",image:baseHref + "favicon.ico"});}
  169. }
  170. }
  171. }
  172. })
  173. }}
  174. });
  175. }
  176.