yt blocker

none

// ==UserScript==
// @name         yt blocker
// @version      3
// @description  none
// @run-at       document-start
// @author       rssaromeo
// @license      GPLv3
// @match        *://youtube.com/*
// @match        *://*.youtube.com/*
// @icon         data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEgAAABICAMAAABiM0N1AAAAAXNSR0IB2cksfwAAAAlwSFlzAAAOxAAADsQBlSsOGwAAAHJQTFRFAAAAEIijAo2yAI60BYyuF4WaFIifAY6zBI2wB4usGIaZEYigIoiZCIyrE4igG4iYD4mjEomhFoedCoqpDIqnDomlBYyvE4efEYmiDYqlA42xBoytD4mkCYqqGYSUFYidC4qoC4upAo6yCoupDYqmCYur4zowOQAAACZ0Uk5TAO////9vr////1+/D/+/L+/Pf/////+f3///////H4////////+5G91rAAACgUlEQVR4nM2Y22KjIBCGidg1264liZqDadK03X3/V2wNKHMC7MpF/xthHD5mgERAqZhWhfYqH6K+Qf2qNNf625hCoFj9/gblMUi5q5jLkXLCKudgyiRm0FMK82cWJp1fLbV5VmvJbCIc0GCYaFqqlDJgADdBjncqAXYobm1xh72aFMflbysteFfdy2Yi1XGOm5HGBzQ1dq7TzEoxjeNTjQZb7VA3e1c7+ImgasAgQ9+xusNVNZIo5xmOMgihIS2PbCQIiHEUdTvhxCcS/kPomfFI2zHy2PkWmA6aNatIJpKFJyekyy02xh5Y3DI9T4aOT6VhIUrsNTFp1pf79Z4SIIVDegl6IJO6cHiL/GimIZDhgTu/BlYWCQzHMl0zBWT/T3KAhtxOuUB9FtBrpsz0RV4xsjHmW+UCaffcSy/5viMGer0/6HdFNMZBq/vjJL38H9Dqx4Fuy0Em12DbZy+9pGtiDijbglwAehyj11n0tRD3WUBm+lwulE/8h4BuA+iWAQQnteg2Xm63WQLTpnMnpjdge0Mgu/GRPsV4xdjQ94Lfi624fabhDkfUqIKNrM64Q837v8yL0prasepCgrtvw1sJpoqanGEX7b5mQboNW8eawXaWXTMfMGxub472hzWzHSn6Sg2G9+6TAyRruE71s+zAzjWaknoyJCQzwxrghH2k5FDT4eqWunuNxyN9QCGcxVod5oADbYnIUkDTGZEf1xDJnSFteQ3KdsT8zYDMQXcHxsevcLH1TrsABzkNPyA/L7b0jg704viMMlpQI96WsHknCt/3YH0kOEo9zcGkwrFK39ck72rmoehmKqo2RKlilzSy/nJKEV45CT38myJp456fezktHjN5aeMAAAAASUVORK5CYII=
// @grant        unsafeWindow
// @require https://update.gf.qytechs.cn/scripts/491829/1356221/tampermonkey%20storage%20proxy.js
// @grant GM_getValue
// @grant GM_setValue
// @namespace https://gf.qytechs.cn/users/1184528
// ==/UserScript==

;(async () => {
  const a = loadlib("allfuncs")
  const sp = new storageproxy("globaloptions")
  var ls = sp.get()
  var rate = 2
  var vidlock = true
  ls.blockedUsers ??= []
  ls.blockedTitles ??= []
  ls.blockedTitlesReg ??= []
  ls.blockedCreatorsReg ??= []
  await a.waitforelem(
    "#channel-name>#container>#text-container>yt-formatted-string>a"
  )
  var globalname
  function newBlockBtn(title, creator) {
    var elem = a.newelem("button", {
      innerHTML: ls.blockedUsers.includes(this.title)
        ? "unblock"
        : "block",
      creator,
      title,
      id: "blockbtn",
      onclick(e) {
        e.stopImmediatePropagation()
        e.stopPropagation()
        e.preventDefault()
        log(this.creator)
        if (ls.blockedUsers.includes(this.creator)) {
          ls.blockedUsers.splice(
            ls.blockedUsers.indexOf(this.creator),
            1
          )
        } else {
          ls.blockedUsers.push(this.creator)
        }
        update()
        log(ls.blockedUsers, this.creator)
      },
    })
    ;((elem, creator) => {
      var val = creator
      Object.defineProperty(elem, "creator", {
        get() {
          return val
        },
        set(newval) {
          val = newval.replace(/ • \d+\w? views$/, "")
        },
        enumerable: true,
        configurable: true,
      })
    })(elem, creator)
    return elem
  }

  update()

  function update() {
    unsafeWindow.ls = ls = sp.get()
    if (issearch()) {
      addVid(
        "div#dismissible.style-scope.ytd-video-renderer",
        "#video-title",
        "#text > a",
        "#channel-info"
      )
    } else if (isroot()) {
      globalname = null
      addVid(
        "div#content.style-scope.ytd-rich-item-renderer:has(ytd-rich-grid-media)",
        "#video-title-link",
        "#details>#meta>ytd-video-meta-block>#metadata>#byline-container>ytd-channel-name#channel-name>#container>#text-container>yt-formatted-string#text>a",
        "#details>#meta>ytd-video-meta-block"
      )
    } else if (iswatch()) {
      globalname = a.qs(
        "ytd-channel-name#channel-name>#container>#text-container>yt-formatted-string#text > a"
      )?.textContent
      if (
        !globalname ||
        !a.qs("#upload-info") ||
        !a.qs("#title > h1 > span.cbCustomTitle")
      ) {
        return "loading"
      }
      if (a.qs("#upload-info>#blockbtn")) {
        a.qs("#upload-info>#blockbtn").creator = globalname
      } else {
        a.qs("#upload-info").appendChild(
          newBlockBtn(
            a.qs("#title > h1 > span.cbCustomTitle").textContent,
            globalname
          )
        )
      }
      const btn = a.qs("#upload-info>#blockbtn")
      vidlock = isBlocked(btn.creator, btn.title)
      btn.innerHTML = isBlocked(btn.creator, btn.title)
        ? "unblock"
        : "block"
      try {
        addVid(
          "#dismissible:has(#video-title)",
          "#video-title",
          "#container>#text-container>yt-formatted-string#text",
          "#byline-container"
        )
        addVid(
          "#movie_player > div.html5-endscreen.ytp-player-content.videowall-endscreen.ytp-show-tiles > div > a:has(span.ytp-videowall-still-info)",
          "span.ytp-videowall-still-info > span > span>div>.cbCustomTitle",
          "span.ytp-videowall-still-info > span > span>.ytp-videowall-still-info-author",
          "span.ytp-videowall-still-info > span > span>div"
        )
      } catch (e) {
        error(e)
      }
    }
  }
  function isroot() {
    return /^https?:\/\/(?:www\.)?youtube\.com\/?(?:\?|#|$)/.test(
      location.href
    )
  }
  function iswatch() {
    return /^https?:\/\/(?:www\.)?youtube\.com\/watch\/?(?:\?|#|$)/.test(
      location.href
    )
  }
  function issearch() {
    return /^https?:\/\/(?:www\.)?youtube\.com\/results\?search_query=.*(?:#|$)/.test(
      location.href
    )
  }

  setInterval(() => {
    update()
    if (iswatch()) {
      for (var vid of a.qsa("video")) {
        vid.playbackRate = vidlock ? 0 : rate
      }
    }
  })

  function addVid(
    mainDivID,
    titleID,
    creatorID,
    blockButtonParentID
  ) {
    // remove invalid block buttons on root
    if (isroot())
      a.qsa("#blockbtn")
        .filter(function (btn) {
          return btn.closest(blockButtonParentID)
        })
        .forEach((e) => e.remove())
    for (var viddiv of a.qsa(mainDivID)) {
      var btn
      if ((btn = a.qs(blockButtonParentID + ">#blockbtn", viddiv))) {
        btn.title = a.qs(titleID, viddiv).textContent
        btn.creator = a.qs(creatorID, viddiv).textContent
        btn.innerHTML = ls.blockedUsers.includes(btn.creator)
          ? "unblock"
          : "block"
      } else {
        btn = a
          .qs(blockButtonParentID, viddiv)
          .appendChild(
            newBlockBtn(
              a.qs(titleID, viddiv).textContent,
              a.qs(creatorID, viddiv).textContent
            )
          )
      }
      viddiv.style.display = isBlocked(btn.creator, btn.title)
        ? "none"
        : ""
    }
  }
  unsafeWindow.isBlocked = isBlocked
  unsafeWindow.addVid = addVid
  function isBlocked(creator, title) {
    if (
      ls.blockedUsers.includes(creator) ||
      ls.blockedTitles.includes(title)
    )
      return true
    for (let reg of ls.blockedCreatorsReg) {
      if (new RegExp(reg, "i").test(creator)) return true
    }
    for (let reg of ls.blockedTitlesReg) {
      if (new RegExp(reg, "i").test(title)) return true
    }
    return false
  }
})()

QingJ © 2025

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