贴吧黑名单

屏蔽贴吧用户

  1. // ==UserScript==
  2. // @name 贴吧黑名单
  3. // @namespace http://tampermonkey.net/
  4. // @description:zh-cn
  5. // @version 2024-11-09
  6. // @description 屏蔽贴吧用户
  7. // @author You
  8. // @run-at document-start
  9. // @match *://tieba.baidu.com/*
  10. // @match *://dq.tieba.com/*
  11. // @match *://jump2.bdimg.com/*
  12. // @match *://jump.bdimg.com/*
  13. // @icon https://tb3.bdstatic.com/public/icon/favicon-v2.ico
  14. // @grant GM_setValue
  15. // @grant GM_getValue
  16. // @grant GM_deleteValue
  17. // @grant GM_listValues
  18. // @grant GM_info
  19. // @license MIT
  20. // ==/UserScript==
  21. (function () {
  22. "use strict";
  23. const classBlockLis = [
  24. "member_thread_title_frs",
  25. "sign_highlight",
  26. "icon-crown-super-v2",
  27. 'icon-crown-year-v2',
  28. 'vip_red',
  29. 'icon-member-top',
  30. 'icon-crown-vip'
  31. ];
  32.  
  33. // 等待指定元素加载
  34. const waitForElement = (selector, timeout = 10000) => {
  35. return new Promise((resolve, reject) => {
  36. const interval = 100; // 检测间隔
  37. let elapsed = 0;
  38.  
  39. const check = setInterval(() => {
  40. const element = document.querySelector(selector);
  41. if (element) {
  42. clearInterval(check);
  43. resolve(element);
  44. } else if (elapsed >= timeout) {
  45. clearInterval(check);
  46. reject(`元素 ${selector} 超时未加载`);
  47. } else {
  48. elapsed += interval;
  49. }
  50. }, interval);
  51. });
  52. };
  53. const waitForAllElement = (selector, timeout = 10000) => {
  54. return new Promise((resolve, reject) => {
  55. const interval = 100; // 检测间隔
  56. let elapsed = 0;
  57. const check = setInterval(() => {
  58. const element = document.querySelectorAll(selector);
  59. if (element) {
  60. clearInterval(check);
  61. resolve(element);
  62. } else if (elapsed >= timeout) {
  63. clearInterval(check);
  64. reject(`元素 ${selector} 超时未加载`);
  65. } else {
  66. elapsed += interval;
  67. }
  68. }, interval);
  69. });
  70. };
  71. function removeClassByElement(element, className) {
  72. if (element.classList) {
  73. element.classList.remove(className);
  74. } else {
  75. element.className = element.className.replace(
  76. new RegExp(
  77. "(^|\\b)" + className.split(" ").join("|") + "(\\b|$)",
  78. "gi"
  79. ),
  80. " "
  81. );
  82. }
  83. }
  84. function add_block_user(uid) {
  85. let key = "block_users";
  86. let block_users = GM_getValue(key, []);
  87. block_users.push(uid);
  88. GM_setValue(key, block_users);
  89. }
  90. function get_block_users() {
  91. let key = "block_users";
  92. return GM_getValue(key, []);
  93. }
  94. async function removeClassByClassBlockList() {
  95. for (const className of classBlockLis) {
  96. const elements = await waitForAllElement("." + className);
  97. elements.forEach((element) => {
  98. removeClassByElement(element, className);
  99. });
  100. }
  101. }
  102. async function block_users() {
  103. let thread_listEl = await waitForElement("#thread_list");
  104. let id_list = get_block_users();
  105. if (thread_listEl) {
  106. for (let child of thread_listEl.children) {
  107. let nameEl = child.getElementsByClassName("frs-author-name")[0];
  108. if (!nameEl) continue;
  109. let data_field = JSON.parse(nameEl.getAttribute("data-field"));
  110. console.log(data_field);
  111. if (nameEl.parentElement.getElementsByTagName("button").length === 0) {
  112. let btnHandle = (uid) => {
  113. return () => {
  114. add_block_user(uid);
  115. block_users();
  116. };
  117. };
  118. let btnEl = document.createElement("button");
  119. btnEl.innerText = "屏蔽";
  120.  
  121. btnEl.onclick = btnHandle(data_field.id);
  122. nameEl.parentElement.appendChild(btnEl);
  123. }
  124. if (id_list.includes(data_field.id)) {
  125. child.hidden = true;
  126. }
  127. }
  128. }
  129. }
  130. async function run(){
  131. block_users();
  132. removeClassByClassBlockList();
  133. }
  134.  
  135.  
  136.  
  137. document.addEventListener("DOMContentLoaded", function () {
  138. run()
  139.  
  140. });
  141. })();
  142.  

QingJ © 2025

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