// ==UserScript== // @name Bilibili Live Danmaku Filter // @namespace http://tampermonkey.net/ // @version 1.0.1 // @description 使用一个简单的定时器把弹幕按照给定的正则表达式过滤一遍 // @supportURL https://space.bilibili.com/1534590 // @author yuyuyzl // @require https://code.jquery.com/jquery-3.4.0.min.js // @require https://code.jquery.com/ui/1.13.3/jquery-ui.min.js // @grant unsafeWindow // @grant GM_getValue // @grant GM_setValue // @grant GM_setClipboard // @grant GM_info // @match *://live.bilibili.com/* // @match *://www.douyu.com/* // @match *://yuyuyzl.github.io/BiliDMFilter/* // @match *://localhost*BiliDMFilter/* // @downloadURL https://update.greasyfork.icu/scripts/386759/Bilibili%20Live%20Danmaku%20Filter.user.js // @updateURL https://update.greasyfork.icu/scripts/386759/Bilibili%20Live%20Danmaku%20Filter.meta.js // ==/UserScript== var BLDFReg; var intervalID=-1; var updateTime=""; var config={ "BLDFAutoStart": true, "BLDFIntervalDelay": 20, "BLDFNeedSubBody": true, "BLDFRegex": "(.*)【(.*)】|(.*)【(.*)", "BLDFShowMatchedDanmakuText": true, "BLDFRecord": false, "BLDFOtherDanmakuOpacity":50, "BLDFMatchedDanmakuOpacity":100, "BLDFMatchedDanmakuColor":"", "BLDFMatchedDanmakuShadow":"", "BLDFJoinLetter":":", }; (function() { 'use strict'; var reloadConfig=function(){ Object.keys(config).forEach(function(key){ //console.log(key,config[key]); var valuet=GM_getValue(key); if(valuet!=null){ config[key]=valuet; }else { GM_setValue(key,config[key]); } }); }; reloadConfig(); var processMatchedTxt=(original,regex,joinLetter)=>{ var matchres = original.match(regex); if(matchres&&matchres.length>0)matchres=matchres.filter(a=>a && a.trim()); if(matchres&&matchres.length>1)matchres=matchres.splice(1); if(matchres)matchres=matchres.join(joinLetter); return matchres || null; } if(window.location.href.match(/.*live.bilibili.com.*/)) { if((GM_getValue("UpdateTime"))==null)GM_setValue("UpdateTime","NAN"); updateTime=GM_getValue("UpdateTime"); var main=setInterval(function () { $('iframe').each((i,o)=>{ const blancPlayer=o.src.match(/live\.bilibili\.com\/blanc\/([0-9]+)/); if(blancPlayer){ console.log(blancPlayer); $('body').append('回到原版直播间'); clearInterval(main); } }); if($(".icon-left-part").length==0)return; clearInterval(main); // 以下CSS以及字幕框元素来自SOW社团的自动字幕组件 // 发布帖链接:http://nga.178.com/read.php?tid=17180967 $("head").append(''); $(".icon-left-part").append(''); $(".icon-left-part").append(''); if (config.BLDFNeedSubBody) { $("#gift-control-vm.gift-control-section").before('
" + "已更新配置" + "
"); startInterval(); } $(".bili-danmaku-x-dm").each(function (i, obj) { //console.log(obj.innerHTML); if (!(obj.innerHTML.substr(-7) == "")) { $(obj).removeClass("matched-danmaku"); // var matchres = obj.innerText.match(BLDFReg); // if(matchres&&matchres.length>0)matchres=matchres.filter(a=>a && a.trim()); // if(matchres.length>1)matchres=matchres.splice(1).join(config.BLDFJoinLetter);else matchres=matchres[0]; let matchres=processMatchedTxt(obj.innerText,BLDFReg,config.BLDFJoinLetter); //console.log(obj); if (matchres != null && matchres != "") { //if (config.BLDFShowDanmaku) $(obj).removeClass("invisibleDanmaku"); $(obj).addClass("matched-danmaku"); //console.log(matchres); $('.SubtitleTextBody').prepend($("").text(matchres)); /* $('.SubtitleTextBody').each(function (i, obj) { $(obj).children().each(function (i, obj) { if (i >= 6) { //obj.remove(); } }); });//*/ if (config.BLDFShowMatchedDanmakuText) $(obj).text(matchres); if(config.BLDFRecord){ var ls=localStorage.getItem("record"); if (ls==null)ls=[];else ls=JSON.parse(ls); ls.push({time:new Date().getTime(),text:matchres[0]}); localStorage.setItem("record",JSON.stringify(ls)); } } obj.innerHTML = obj.innerHTML + ''; } if($(obj).hasClass("matched-danmaku")&& $(obj).offset().left+$(obj).width()<$(".danmaku-item-container").offset().left){ //console.log("stopped"); $(obj).removeClass("matched-danmaku"); } }) }, config.BLDFIntervalDelay); } $("#regexSettings").click(function () { window.open("https://yuyuyzl.github.io/BiliDMFilter/"); }); $("#regexOn").click(function () { if (intervalID >= 0) { clearInterval(intervalID); $(".danmaku-item-container").removeClass("BLDF"); $(".bilibili-danmaku").each(function (i, obj) { $(obj).removeClass("invisibleDanmaku"); }); intervalID=-1; $('.SubtitleTextBody').prepend("" + "弹幕过滤停止" + "
"); } else { $(".danmaku-item-container").addClass("BLDF"); $('.SubtitleTextBody').prepend("" + "弹幕过滤开始" + "
"); startInterval(); } }); if (config.BLDFAutoStart) { $("#regexOn").click(); } }, 100); }else if(window.location.href.match(/.*\/www.douyu.com\/.*/)){ var main=setInterval(function(){ var danmuClassName=""; $("div").each((i,o)=>{ if($(o).attr("class") && $(o).attr("class").trim().substr(0,6)=="danmu-")danmuClassName=$(o).attr("class").trim(); }) if(danmuClassName!="")clearInterval(main);else return; console.log(danmuClassName); // 以下CSS以及字幕框元素来自SOW社团的自动字幕组件 // 发布帖链接:http://nga.178.com/read.php?tid=17180967 $("head").append(''); $(".ChatToolBar").append('" + "弹幕过滤停止" + "
"); } else { $("body").addClass("BLDF"); $('.SubtitleTextBody').prepend("" + "弹幕过滤开始" + "
"); startInterval(); } }); if (config.BLDFAutoStart) { $("#regexOn").click(); } },100); }else if(window.location.href.match(/.*\/BiliDMFilter\/.*/)){ console.log(config); $("#BLDFSettingsSave").removeAttr("disabled"); Object.keys(config).forEach(function(key){ $("#"+key).removeAttr("disabled"); console.log(typeof config[key]); if (typeof config[key]=="string"||typeof config[key]=="number")$("#"+key).val(config[key]); if (typeof config[key]=="boolean")$("#"+key).attr("checked", config[key]); }); $('#BLDFSettingsSave').click(function () { GM_setValue("UpdateTime",new Date()+''); Object.keys(config).forEach(function(key){ if (typeof config[key]=="string")GM_setValue(key,$("#"+key).val()); if (typeof config[key]=="number")GM_setValue(key,parseInt($("#"+key).val())); if (typeof config[key]=="boolean")GM_setValue(key,$("#"+key).is(':checked')); }); }) } })();