S1 User Marker

Mark certain user

  1. // ==UserScript==
  2. // @name S1 User Marker
  3. // @namespace http://tampermonkey.net/
  4. // @version 1.11
  5. // @description Mark certain user
  6. // @origin_author 冰箱研会长、masakahaha、wugui14
  7. // @author Nanachi
  8. // @match https://bbs.saraba1st.com/2b/*
  9. // @match https://www.saraba1st.com/2b/*
  10. // @grant GM_getValue
  11. // @grant GM_setValue
  12. // @grant GM_deleteValue
  13. // @grant GM_listValues
  14. // @license GPL-V3
  15. // ==/UserScript==
  16. function getElementByXpath(path) {
  17. return document.evaluate(path, document, null,
  18. XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
  19. }
  20.  
  21. function Blockbutton_Appender(HtmlDiv, Block_Target, Origin_Name,PostNumber) {
  22. var Block_status = '';
  23. var status_text = GM_getValue(Origin_Name,null) ? '取消标记' : '标记此人';
  24. if (GM_getValue(Origin_Name,null)) {
  25. Block_Target.style='color:#CC241D';
  26. Block_Target.innerText = '#' + GM_getValue(Origin_Name);
  27. }
  28. function buttonClick(){
  29. console.log('test');
  30. console.log(Origin_Name);
  31. if (GM_getValue(Origin_Name,null)) {
  32. console.log('1');
  33. GM_deleteValue(Origin_Name);
  34. window.location.reload();
  35. } else {
  36. console.log('2');
  37. var tag = prompt("输入自定义标签","");
  38. if (tag != undefined && tag != "") {
  39. console.log(Origin_Name);
  40. // blockedList.set(Block_Target, tag);
  41. GM_setValue(Origin_Name, tag);
  42. window.location.reload();
  43. }
  44. }
  45. }
  46. var StrPostNumber = PostNumber.toString();
  47. HtmlDiv.innerHTML = HtmlDiv.innerHTML.concat(`
  48. <table class="tfm" cellspacing="0" cellpadding="0">
  49. <tbody><tr>
  50. <td>
  51. <button type="button" name="blacklistsubmit_btn" id="blockbtn`,StrPostNumber,`" value="true" class="pn vm" ><em>`,status_text,`</em></button>
  52. </td>
  53. </tr>
  54. </tbody></table>`);
  55. var button1 = document.getElementById("blockbtn"+PostNumber.toString());
  56. //console.log(button1);
  57. // 在js页面获取HTML的按钮函数
  58. button1.onclick = buttonClick;
  59. }
  60.  
  61. function S1_Reply_Blocker() {
  62. var PostLists = getElementByXpath(`//div[@id='postlist']`);
  63. if (PostLists) {
  64. var PostCounter = 1;
  65. while (getElementByXpath(`//div[@id='postlist']/div[${PostCounter}]`)) {
  66. var PostAuthor = getElementByXpath(`//div[@id='postlist']/div[${PostCounter}]/table/tbody/tr[1]/td[1]/div/div[1]/div/a`);
  67. var MarkPosition = getElementByXpath(`//div[@id='postlist']/div[${PostCounter}]/table/tbody/tr[1]/td[1]/div/p[1]/em/a`);
  68. if(PostAuthor){
  69. if(PostAuthor.innerText){
  70. var origin_author = PostAuthor.innerText;
  71. }
  72. var PostAruthorColumn = getElementByXpath(`//div[@id='postlist']/div[${PostCounter}]/table[1]/tbody[1]/tr[1]/td[1]/div[1]`);
  73. if (PostAruthorColumn) {
  74. Blockbutton_Appender(PostAruthorColumn, MarkPosition,origin_author,PostCounter);
  75. }}
  76. PostCounter = PostCounter + 1;
  77. }
  78. }
  79.  
  80.  
  81.  
  82. }
  83.  
  84. function ExportButton_Appender(nvDiv) {
  85. nvDiv.innerHTML= nvDiv.innerHTML.concat(`
  86. <button type="button" name="blacklistexport_btn" id="exportbtn" value="true" style="float: right; margin: 5px 8px 0;" class="pn vm" ><em>导出标记</em></button>
  87. <button type="button" name="blacklistimport_btn" id="importbtn" value="true" style="float: right; margin: 5px 8px 0;" class="pn vm" ><em>从粘贴板导入</em></button>
  88. `);
  89. function exoprt() {
  90.  
  91. var names = GM_listValues();
  92.  
  93. if (names) {
  94.  
  95. var exoprtJson = {};
  96. for (var i = 0; i < names.length; i++) {
  97. exoprtJson[names[i]] = GM_getValue(names[i], null)
  98. }
  99.  
  100. var exoprtValue = JSON.stringify(exoprtJson)
  101. console.log("导出到粘贴板:", exoprtValue)
  102. navigator.clipboard.writeText(exoprtValue).then(() => {
  103. window.confirm("本地名单列表:\n" + exoprtValue + "\n已复制到粘贴板")
  104. })
  105. }
  106. }
  107. var exportBtn = document.getElementById("exportbtn");
  108. // console.log(button1);
  109. // 在js页面获取HTML的按钮函数
  110. exportBtn.onclick = exoprt;
  111.  
  112. function OnImportClick() {
  113. navigator.clipboard.readText().then((clipText) => {
  114. console.log(clipText);
  115. if (!clipText) {
  116. window.confirm("未读取到数据,请先将名单复制至粘贴板")
  117. }else{
  118. try{
  119. var importedJson = JSON.parse(clipText);
  120. for (var item in importedJson) {
  121. var localValue = GM_getValue(item, '')
  122. if (!localValue || localValue.indexOf(importedJson[item]) === -1) {
  123. var ResultString = ''
  124. if(!localValue){
  125. ResultString += importedJson[item];
  126. }else{
  127. let temp_name = importedJson[item].split(":")[0];
  128. if(localValue.includes(temp_name)){
  129. console.log(temp_name);
  130. let regexpre = new RegExp(temp_name+":\\d\+","g");
  131. localValue = localValue.replace(regexpre,importedJson[item]);
  132. }
  133. else{
  134. ResultString += "/" + importedJson[item];
  135. }
  136. }
  137. localValue += ResultString;
  138. GM_setValue(item, localValue);
  139. console.log('导入成功', item, localValue);
  140. }
  141. }
  142. window.confirm('导入成功');
  143. }catch(e) {
  144. window.confirm('导入格式不正确,按照{"用户名":"标记名",...}格式导入');
  145. }
  146. }})
  147. }
  148. var importBtn = document.getElementById("importbtn");
  149. // console.log(button1);
  150. // 在js页面获取HTML的按钮函数
  151. importBtn.onclick = OnImportClick;
  152. }
  153.  
  154. function ImportButton_Appender(nvDiv) {
  155. nvDiv.innerHTML= nvDiv.innerHTML.concat(`
  156. <button type="button" name="blacklistimport_btn" id="importbtn" value="true" style="float: right; margin: 5px 8px 0;" class="pn vm" ><em>从粘贴板导入</em></button>
  157. `);
  158.  
  159. }
  160. if (window.location.href.startsWith('https://bbs.saraba1st.com/2b/home.php?mod=spacecp')||window.location.href.startsWith('https://www.saraba1st.com/2b/home.php?mod=spacecp')) {
  161. var Qmenu = getElementByXpath(`//div[@id='nv']`);
  162. if (Qmenu) {
  163. ExportButton_Appender(Qmenu)
  164. // ImportButton_Appender(Qmenu)
  165. }
  166. } else if (window.location.href.startsWith('https://bbs.saraba1st.com/2b/thread')||window.location.href.startsWith('https://bbs.saraba1st.com/2b/forum.php?mod=viewthread')||window.location.href.startsWith('https://www.saraba1st.com/2b/thread')||window.location.href.startsWith('https://www.saraba1st.com/2b/forum.php?mod=viewthread')) {
  167. S1_Reply_Blocker();
  168. }
  169.  

QingJ © 2025

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