贴吧黑名单

屏蔽贴吧用户

// ==UserScript==
// @name         贴吧黑名单
// @namespace    http://tampermonkey.net/
// @description:zh-cn 
// @version      2024-11-09
// @description  屏蔽贴吧用户
// @author       You
// @run-at document-start
// @match      *://tieba.baidu.com/*
// @match      *://dq.tieba.com/*
// @match      *://jump2.bdimg.com/*
// @match      *://jump.bdimg.com/*
// @icon         https://tb3.bdstatic.com/public/icon/favicon-v2.ico
// @grant        GM_setValue
// @grant        GM_getValue
// @grant        GM_deleteValue
// @grant        GM_listValues
// @grant        GM_info
// @license MIT
// ==/UserScript==
(function () {
  "use strict";
  const classBlockLis = [
    "member_thread_title_frs",
    "sign_highlight",
    "icon-crown-super-v2",
      'icon-crown-year-v2',
      'vip_red',
      'icon-member-top',
      'icon-crown-vip'
  ];

  // 等待指定元素加载
  const waitForElement = (selector, timeout = 10000) => {
    return new Promise((resolve, reject) => {
      const interval = 100; // 检测间隔
      let elapsed = 0;

      const check = setInterval(() => {
        const element = document.querySelector(selector);
        if (element) {
          clearInterval(check);
          resolve(element);
        } else if (elapsed >= timeout) {
          clearInterval(check);
          reject(`元素 ${selector} 超时未加载`);
        } else {
          elapsed += interval;
        }
      }, interval);
    });
  };
  const waitForAllElement = (selector, timeout = 10000) => {
    return new Promise((resolve, reject) => {
      const interval = 100; // 检测间隔
      let elapsed = 0;
      const check = setInterval(() => {
        const element = document.querySelectorAll(selector);
        if (element) {
          clearInterval(check);
          resolve(element);
        } else if (elapsed >= timeout) {
          clearInterval(check);
          reject(`元素 ${selector} 超时未加载`);
        } else {
          elapsed += interval;
        }
      }, interval);
    });
  };
  function removeClassByElement(element, className) {
    if (element.classList) {
      element.classList.remove(className);
    } else {
      element.className = element.className.replace(
        new RegExp(
          "(^|\\b)" + className.split(" ").join("|") + "(\\b|$)",
          "gi"
        ),
        " "
      );
    }
  }
  function add_block_user(uid) {
    let key = "block_users";
    let block_users = GM_getValue(key, []);
    block_users.push(uid);
    GM_setValue(key, block_users);
  }
  function get_block_users() {
    let key = "block_users";
    return GM_getValue(key, []);
  }
  async function removeClassByClassBlockList() {
    for (const className of classBlockLis) {
      const elements = await waitForAllElement("." + className);
      elements.forEach((element) => {
        removeClassByElement(element, className);
      });
    }
  }
  async function block_users() {
    let thread_listEl = await waitForElement("#thread_list");
    let id_list = get_block_users();
    if (thread_listEl) {
      for (let child of thread_listEl.children) {
        let nameEl = child.getElementsByClassName("frs-author-name")[0];
        if (!nameEl) continue;
        let data_field = JSON.parse(nameEl.getAttribute("data-field"));
        console.log(data_field);
        if (nameEl.parentElement.getElementsByTagName("button").length === 0) {
          let btnHandle = (uid) => {
            return () => {
              add_block_user(uid);
              block_users();
            };
          };
          let btnEl = document.createElement("button");
          btnEl.innerText = "屏蔽";

          btnEl.onclick = btnHandle(data_field.id);
          nameEl.parentElement.appendChild(btnEl);
        }
        if (id_list.includes(data_field.id)) {
          child.hidden = true;
        }
      }
    }
  }
  async function run(){
    block_users();
    removeClassByClassBlockList();
  }



  document.addEventListener("DOMContentLoaded", function () {
      run()

  });
})();

QingJ © 2025

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