Greasy Fork

Greasy Fork is available in English.

虎牙弹幕屏蔽及热度排序

弹幕屏蔽关键词(在原屏蔽按钮后面),直播页面按热度排序。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         虎牙弹幕屏蔽及热度排序
// @namespace    http://tampermonkey.net/
// @version      1.33
// @description  弹幕屏蔽关键词(在原屏蔽按钮后面),直播页面按热度排序。
// @author       Hugo16
// @match        *://www.huya.com/*
// @grant        GM_addStyle
// @run-at       document-end
// @require      http://code.jquery.com/jquery-1.7.2.min.js
// @namespace    http://greasyfork.icu/users/238424
// ==/UserScript==

(function () {
    'use strict';

    // 添加屏蔽界面
    var blockWordsWrap = $('<div class="block-mask-wrap"><div id="block-mask"></div><div id="blockWrap"><div id="bWtop"><input id="blockWord"/><button id="blockBtn">屏蔽</button></div><div id="wordsWrap"><ul></ul></div></div></div>');
    $("body").append(blockWordsWrap);
    blockWordsWrap.hide();
    var blockShowBtn = $("<i class='room-chat-tool room-chat-tool-blockWords' id='J_roomChatIconBlockWords1' title='免登录屏蔽'></i>");
    findElement("J_roomChatIconBlockWords",function(){
        $("#J_roomChatIconBlockWords").after(blockShowBtn);
        blockShowBtn.on("click",function(){
            blockWordsWrap.show();
        })
        $("#block-mask").on("click",function(){
            blockWordsWrap.hide();
        })
    })

    // 读取屏蔽词
    var blockWords = readBlockWords();
    // 添加屏蔽词
    $("#blockBtn").on("click",function(){
        var word = $("#blockWord").val().toLocaleUpperCase();
        if(word!=""){
            blockWords.push(word);
            $("#wordsWrap ul").append("<li><span class='keyWords'>"+word+"</span><span class='cancelBtn'>取消屏蔽<span></li>");
        }
        writeBlockWords(blockWords);
    });
    // 删除屏蔽词
    $("#wordsWrap ul").on("click","li span.cancelBtn",function(event){
        var target = $(event.target);
        var word = target.prev().text();
        target.parent().remove();
        blockWords = $.grep(blockWords, function(value) {
            return value != word;
        });
        writeBlockWords(blockWords);
    })


    // 检测新弹幕
    window.onload = function(){
        $("#danmudiv").bind("DOMNodeInserted", function(){
            var item = $(this).children("div:last");
            var text = item.children("span").text();
            if(compareStr(text,blockWords)){
                item.children("span").html("")
            }
        });
    }

    // 热度排序
    sort();
})();

// 寻找元素
function findElement(name,func){
    if(document.getElementById(name)|| document.getElementsByClassName(name)){
        func();
    }
    else{
        setTimeout(function(){findDanmuDiv(func)},500);
    }
}

// 比较屏蔽词
function compareStr(str,strArr){
    for(var i=0;i<strArr.length;i++){
        if(str.toLocaleUpperCase().indexOf(strArr[i])>=0){
            console.log(strArr[i] + ":" + str);
            return true;
        }
    }
    return false;
}

// 读取屏蔽词
function readBlockWords(){
    var words = [];
    // 读取屏蔽词
    if(localStorage.getItem("huyaBlock")!=null&&localStorage.getItem("huyaBlock")!=""){
        words = localStorage.getItem("huyaBlock").split(',')
    }
    for(var i=0;i<words.length;i++){
        $("#wordsWrap ul").append("<li><span class='keyWords'>"+words[i]+"</span><span class='cancelBtn'>取消屏蔽<span></li>");
    }
    return words;
}

// 写入屏蔽词
function writeBlockWords(blockWords){
    var words = blockWords.join(",");
    window.localStorage.setItem('huyaBlock',words)
}

// 热度排序
function sort() {

    setTimeout(() => {
        let fHot = document.getElementsByClassName("js-num");
        if(!fHot[0]){
            fHot = $(".subscribe-live-item .num");
            if(!fHot[0]){
            return;
        }
        }
        if (fHot[0].innerHTML != "") {
            let lists = document.getElementById("js-live-list");
            if (!lists) {
                lists = document.getElementsByClassName("live-list")[0];
                if (!lists) {
                    return;
                }
            }

            let arr = new Array();

            let list = lists.children;
            for (let i = 0; i < list.length; i++) {
                let hot;
                if($(list[i]).find(".js-num").length!=0){
                    hot = list[i].getElementsByClassName("js-num")[0].innerText;
                }
                else if($(list[i]).find(".num").length!=0){
                    try{
                        hot = list[i].getElementsByClassName("num total")[0].innerText;
                    }
                    catch{
                        hot = "0";
                    }
                }
                else{
                    return;
                }
                hot = hot.replace(/,/g,'');
                console.log(hot)
                if (hot.indexOf("万") != -1) {
                    hot = hot.replace(/万/, "") * 1 * 10000;
                }
                else if (hot.indexOf("亿") != -1) {
                    hot = hot.replace(/亿/, "") * 1 * 100000000;
                }
                arr.push([list[i], hot])
            }

            arr.sort(function (a, b) {
                return b[1] - a[1];
            })

            lists.innerHTML = "";
            for (let j = 0; j < arr.length; j++) {
                $(arr[j][0]).find('.pic').attr("src",$(arr[j][0]).find('.pic').attr("data-original"));
                lists.appendChild(arr[j][0]);
            }

        }
        else {
            sort();
        }

    }, 10);

}

var content = document.getElementsByClassName('js-responded-list')[0];


GM_addStyle(".block-mask-wrap { width: 100%; height: 100%;top:0;position:absolute;z-index:99999}"
            + "#block-mask { width: 100%; height: 100%; background: #000; opacity: .5;}"
            + "#blockWrap { width: 500px; height: 500px;top:50%;left:50%;margin:-250px 0 0 -250px; background: white;opacity:1; position: absolute; bottom: 0; border-top: 1px solid #80808042; padding: 10px;border-radius:3px; }"
            + "#bWtop { display: flex;height:30px;margin-bottom:3px}"
            + "#blockWord { width: 70%; margin-right: 3%;}"
            + "#blockBtn { width: 20%}"
            + "#wordsWrap { overflow: auto;height:calc(100% - 33px)}"
            + "#wordsWrap>ul>li { display: flex;height:35px;align-items: center;padding-left:3px;color:#808080b5;}"
            + "#wordsWrap>ul>li:nth-child(Odd) { background:#8080804f;}"
            + "#wordsWrap>ul>li:hover { background:#f49f0fb3;color:white;}"
            + "#wordsWrap>ul>li>span:nth-child(1) { width: 354px; margin-right: 15px;}"
            + "#wordsWrap>ul>li>span:nth-child(2) { width:20%;text-align:center;cursor:pointer}");