B站直播间删投喂礼物弹幕

删除礼物投喂弹幕,禁止评论栏上下跳动

// ==UserScript==
// @name         B站直播间删投喂礼物弹幕
// @namespace    http://tampermonkey.net/
// @version      0.3
// @description  删除礼物投喂弹幕,禁止评论栏上下跳动
// @author       You
// @license MIT
// @match        https://live.bilibili.com/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=bilibili.com
// @grant        none
// ==/UserScript==

function debug(message){
    console.log('[DEBUG]:',message)
}
function error(message){
    console.log('[ERROR]:',message)
}
function info(message){
    console.log('[INFO]:',message)
}
function print(message){
    console.log(message)
}

function ban_sleep(){
    const o_settimeout = setTimeout
    const o_setInterval = setInterval
    const sleep_function_name = 'triggerSleepCallback'
    setTimeout = function(func,...args){
        if(func.toString().indexOf(sleep_function_name) > -1){
            info('ban sleep')
            return null
        }
        return o_settimeout.call(this,func,...args)
    }

    setInterval = function(func,...args){
        if(func.toString().indexOf(sleep_function_name) > -1){
            info('ban sleep')
            return null
        }
        return o_setInterval.call(this,func,...args)
    }

}
class ChatListListen{
    constructor(class_name){
        this.class_name = class_name
        this._chat_list = null
        this.filter_gift_danmu = 0
        this.filter_style_change = 0

    }
    inject_style(){
        const style = document.createElement('style')
        style
    }
    set chat_list(value){
        this._chat_list = value
        this.shortest_class = value.className
        const chat_mutation = new MutationObserver(this.chat_list_changed.bind(this))
        const config = {childList:true,subtree:true}
        chat_mutation.observe(this._chat_list,config)

        const style_mutation = new MutationObserver(this.chat_list_style_changed.bind(this))
        const style_config = {attributes:true}
        style_mutation.observe(this._chat_list,style_config)

    }
    get char_list(){
        return this.char_list
    }
    chat_list_style_changed(mutations,ob){
        for(let mutation of mutations){
            if(mutation.target){
                if(mutation.target.className.indexOf('ps--active-y') > -1){
                    mutation.target.classList.remove('ps--active-y')
                    this.filter_style_change ++
                }
                if(mutation.target.className.indexOf('with-penury-gift') > -1){
                    mutation.target.classList.remove('with-penury-gift')
                    this.filter_style_change ++
                }
            }
        }
    }
    chat_list_changed(mutations,ob){
        for(let mutation of mutations){
            if(mutation.type == 'childList'){
                for(let node of mutation.addedNodes){
                    if(node.classList.contains('gift-item')){
                        node.style.display = 'none'
                        this.filter_gift_danmu ++
                    }
                }
            }
        }
    }
    listen(){
        const char_list = document.getElementsByClassName(this.class_name)[0]
        if(char_list){
            this.chat_list = char_list
            const penury = document.getElementById('penury-gift-msg')
            penury && penury.parentElement.removeChild(penury)
        }else{
            requestAnimationFrame(this.listen.bind(this))
        }
    }
}
(function() {
    'use strict';
    var char_list = new ChatListListen('chat-history-list')
    ban_sleep()
    char_list.listen()
})();