// ==UserScript==
// @name bilibili自写过滤器
// @namespace http://tampermonkey.net/
// @version 0.31
// @description try to take over the world!
// @author Zino
// @match *www.bilibili.com/*
// @icon https://www.bilibili.com/favicon.ico?v=1
// @grant none
// @require https://apps.bdimg.com/libs/jquery/2.1.1/jquery.min.js
// @license MIT
// @run-at document-end
// ==/UserScript==
//======================================
var zz = new Array();
//要屏蔽的up主关键字
zz = ["一","萌","啊","捏","苏打","儿","呀","哦","丫","吖","o","ui",
"喵","ya","Ya","-","_","同学","饭","=","解说","肉","邻家",
"菌","七七","三","诶","视角姬","好屏如潮","四川观察","爬爬娘",
"穿毛裤","姬一元","GARNiDELiA","村霸","图吧首穷",
//------------------------------------
//游戏王鬼叫UP主
"水无月","赤夏之鸣","铭阳","洺阳","日石rs终极大魔头","卷饼",
//------------------
"嘻嘻嘻2134678","咽气","侃英语","阿狸"
];
// 模糊匹配
function fuzzyMatch(str, key){
let index = -1, flag = false;
for(var i = 0, arr = key.split(""); i < arr.length; i++ ){
//有一个关键字都没匹配到,则没有匹配到数据
if(str.indexOf(arr[i]) < 0){
break;
}else{
let match = str.matchAll(arr[i]);
let next = match.next();
while (!next.done){
if(next.value.index > index){
index = next.value.index;
if(i === arr.length - 1){
flag = true
}
break;
}
next = match.next();
}
}
}
return flag
}
(function() {
window.onload = function(){
function 过滤主页推荐() {
let 推广数量 = 0;
let x , strlevel;
推广数量 = Math.floor($(".rcmd-box-wrap").width() / $(".video-card-reco").width()) * 2;
//这里需要另外获取
if(isNaN(推广数量)) {
//获取新版
推广数量 = Math.floor($(".recommend-container__2-line").width() / $(".bili-video-card").width()) * 2;
if(isNaN(推广数量))
{
//判断是否旧页面
推广数量 = Math.floor($(".recommend-module").width() / $(".groom-module").width()) * 2;
if(推广数量 >= 3)
{
删除旧的主页推广();
}
console.log("[info] 非主页或是获取失败,或是已获取过,抛弃执行.");
return;
}
}
console.log("[info] 当前页面数量: ",推广数量);
//-----------------------
//主页推荐的广告过滤
$(".bili-video-card .bili-video-card__info--ad").each(function (index, element) {
$(this).parent().parent().parent().parent().parent().parent().remove();
return false;
});
//屏蔽作者
for (x = 0; x < zz.length; x++) {
if (zz[x] != "") {
//匹配作者
$(".video-card-reco .info-box .info .up").each(function (index, element) {
//支持作者模糊匹配
strlevel = $(this).text();
//console.log("新的请求->",strlevel, zz[x]);
if(fuzzyMatch(strlevel, zz[x]))
{
console.log("[info] 命中关键词->",strlevel,"命中词为->",zz[x]);
$(this).parent().parent().parent().parent().hide();
return false;
}
});
$(".bili-video-card .bili-video-card__info--author").each(function (index, element) {
strlevel = $(this).text();
if(fuzzyMatch(strlevel, zz[x]))
{
console.log("[info] 命中关键词->",strlevel,"命中词为->",zz[x]);
$(this).parent().parent().parent().parent().parent().parent().remove();
return false;
}
});
}
}
}
function 删除旧的主页推广()
{
let strlevel ,x;
for (x = 0; x < zz.length; x++) {
if (zz[x] != "")
{
$(".groom-module .author").each(function (index, element) {
//支持作者模糊匹配
strlevel = $(this).text();
if(fuzzyMatch(strlevel, zz[x]))
{
console.log("[info] 命中UP关键词-> ",strlevel ," , 命中词为-> " , zz[x]);
$(this).parent().parent().parent().hide();
return false;
}
});
}
}
//移除推广界面
$(".storey-box").each(function (index, element)
{
strlevel = $(this).text();
console.log("dbg->",strlevel);
$(this).parent().parent().hide();
return false;
});
//移除主页直播页面
$(".live-module").each(function (index, element)
{
strlevel = $(this).text();
console.log("dbg->",strlevel);
$(this).hide();
return false;
});
}
//直接连本带利移除掉推广栏目
function 删除推广栏目()
{
//删除大推广页
//$("div.focus-carousel").each(function (index, element) { $(this).remove();});
//删除推广
$("div.extension").each(function (index, element) { $(this).remove();});
$("div.bypb-window").each(function (index, element) { $(this).remove();});
//删除直播
$("div.live-list").each(function (index, element) { $(this).remove(); });
$("div.live-tabs").each(function (index, element) { $(this).remove(); });
//新版页面 - 推广
$("div.eva-extension-area").each(function (index, element) { $(this).remove(); });
//新版页面 - 直播
$("div.live-card-list").each(function (index, element) { $(this).remove(); });
$("div.aside-head").each(function (index, element) { $(this).remove(); });
//屏蔽头上的插件警告
$("div.adblock-tips").each(function (index, element) { $(this).remove(); });
}
//屏蔽播放页的UP
function 屏蔽播放页面UP()
{
//判断当前页面是否属于播放页.
let x;
var fl,i;
for (x = 0; x < zz.length; x++)
{
if (zz[x] != "") {
fl = document.evaluate('//div[@class="rec-list"]/div[@class="video-page-card"]/div[@class="card-box"]/div[@class="info"]/div[@class="count up"]/a[contains(text(),"' + zz[x] + '")]/../../../..', document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
if (fl.snapshotLength) {
for (i = fl.snapshotLength - 1; i > -1; i--)
{
//console.log("屏蔽up/标题 " + "\t" + zz[x] + " :\t->" + fl.snapshotItem(i).innerText.replace(/\n/g, " ").replace(/\s\s/g, " "));
fl.snapshotItem(i).remove();
}
}
}
}
}
//1秒后寻找元素,并进行HOOK功能! [当前只针对老版页面的 换一换]
setTimeout(function () {
//Hook按钮-旧版页面
$(".rcmd-box-wrap .change-btn").click(function () {
setTimeout(()=>{过滤主页推荐()}, 500);
})
//Hook按钮,新版页面
$("div.roll-btn-wrap .roll-btn").click(function () {
setTimeout(()=>{过滤主页推荐()}, 500);
})
//Hook按钮 [2023.5.19新增]
$("div.feed-roll-btn").click(function () {
setTimeout(()=>{过滤主页推荐()}, 500);
})
//---------------
//Hook按钮 [2023.9.27新增]
$("span.rec-btn.next").click(function () {
setTimeout(()=>{删除旧的主页推广()}, 500);
})
//---------------
过滤主页推荐();
删除推广栏目();
var site = location.href;
if ((site.indexOf("video/") > -1 && site.indexOf("online.html") < 0) || site.indexOf("play/") > -1) {
setTimeout(()=>{屏蔽播放页面UP()}, 1000);
}
}, 1000);
}
})();