屏蔽B站用户、屏蔽视频、屏蔽直播
// ==UserScript==// @name block-bilibili-up// @namespace https://bbs.tampermonkey.net.cn/// @version 0.1.5// @license MIT// @description 屏蔽B站用户、屏蔽视频、屏蔽直播// @author You// @require https://cdn.bootcss.com/jquery/1.12.4/jquery.min.js// @match https://www.bilibili.com/// @grant unsafeWindow// @grant GM_addStyle// @grant GM_xmlhttpRequest// ==/UserScript==(function () {'use strict';const cssStyle = `.opt-button {display: block;z-index: 999;width: 60px;background-color: #ff5722;color: #fff;padding: 0.5em 1em;border-radius: 0.2em;cursor: pointer;font-size: 0.8em;transition: all 0.3s ease;display: none;margin: 5px;}.opt-button:hover {background-color: #f44336;}.block-hide{display: none !important;}.block-container {z-index: 999;top: 0;left: 0;position: absolute;padding: 0.5em 1em;width: 150px;height: 50px;display: flex;flex-direction: horizontal;}.block-container:hover .opt-button {display: block;}`;GM_addStyle(cssStyle);const storageBlocksItemName = 'block-bilibili-blackList';const storgeIgnoresItemName = 'block-bilibili-ignoreList';//从storage读取黑名单//格式: [{"name":"黑名单用户1","uid":123456}]let blackList = JSON.parse(localStorage.getItem(storageBlocksItemName) || '[]');//忽略视频列表//格式: [{"videoid":"BV1jb421v7EY","name":"忽略视频1"},{"videoid":"BV1jb421v7EZ","name":"忽略视频2"}]let ignoreList = JSON.parse(localStorage.getItem(storgeIgnoresItemName) || '[]');function hideCard(card) {if ($(card).hasClass("block-hide")) {return;}$(card).attr("class", "block-hide");}//右上角添加“屏蔽”按钮,鼠标移上时显示function addBlockButton(card) {if ($(card).find(".block-button").length > 0) {return;}$(card).css("position", "relative");let blockContainer = $('<div class="block-container"></div>');$(card).append(blockContainer);let blockButton = $('<button class="block-button opt-button">屏蔽</button>');$(blockContainer).append(blockButton);$(blockButton).click(function () {hideCard(card);let black = getAuthorUid(card);if (black == null) {return;}blackList.push(black);localStorage.setItem(storageBlocksItemName, JSON.stringify(blackList));console.log("屏蔽用户:" + black.name + " uid:" + black.uid);});}function addIgnoreButton(card) {if ($(card).find(".ignore-button").length > 0) {return;}let blockContainer = $(card).find(".block-container");if (blockContainer.length == 0) {return;}let ignoreButton = $('<button class="ignore-button opt-button">忽略</button>');$(blockContainer).append(ignoreButton);ignoreButton.click(function () {//添加到忽略列表,存入storagelet videoIdAndName = getVideoIdAndName(card);if (videoIdAndName == null) {return;}ignoreList.push(videoIdAndName);localStorage.setItem(storgeIgnoresItemName, JSON.stringify(ignoreList));console.log("忽略视频:" + videoIdAndName.name + " videoid:" + videoIdAndName.videoid);hideCard(card);});}//return {name: "黑名单用户1", uid: 123456}function getAuthorUid(card) {let owner = $(card).find("a.bili-video-card__info--owner");if (owner.length == 0) {return null;}//space地址://space.bilibili.com/123456let spaceHref = $(owner).attr("href")//提取uidlet uid = spaceHref.match(/\/(\d+)/)[1];let author = $(card).find(".bili-video-card__info--author");let name = $(author).attr("title");return { name: name, uid: uid };}//return {videoid: "BV1jb421v7EY", name: "忽略视频1"}function getVideoIdAndName(card) {//提取href中的videoid:href="https://www.bilibili.com/video/BV1jb421v7EY"let a = $(card).find(".bili-video-card__image--link");if (a.length == 0) {return null;}let href = $(a).attr("href");let videoid = href.match(/\/video\/(\w+)/)[1];let title = $(card).find(".bili-video-card__info--tit");if (title.length == 0) {return null;}return { videoid: videoid, name: $(title).attr("title") };}//屏蔽直播card//return :true-已屏蔽; false-未屏蔽function blockLiving(card) {let living = $(card).find(".bili-live-card__info--living,.living");if (living.length > 0) {hideCard(card);console.log("屏蔽直播card.");return true;}return false;}function refreshBlackList() {$(".feed-card,.bili-video-card.is-rcmd.enable-no-interest,.bili-live-card.is-rcmd.enable-no-interest,.floor-single-card").each((index, card) => {if ($(card).parent(".feed-card").length > 0) {card = $(card).parent(".feed-card");}$(card).removeClass("recommended-container_floor-aside");addBlockButton(card);addIgnoreButton(card);if ($(card).hasClass("block-hide")) {return;}//隐藏直播if (blockLiving(card)) {return;}//隐藏黑名单let authorUid = getAuthorUid(card);if (authorUid == null) {return;}let isInBlackList = blackList.some(item => item.uid == authorUid.uid);if (isInBlackList) {//隐藏hideCard(card);console.log("隐藏用户:" + authorUid.name + " uid:" + authorUid.uid);}let videoIdAndName = getVideoIdAndName(card);if (videoIdAndName == null) {return;}let isInIgnoreList = ignoreList.some(item => item.videoid == videoIdAndName.videoid);if (isInIgnoreList) {//隐藏hideCard(card);console.log("隐藏视频:" + videoIdAndName.name + " videoid:" + videoIdAndName.videoid);}});}refreshBlackList();//每2秒检测一次setInterval(() => {refreshBlackList();}, 2000);})();