Greasy Fork

Greasy Fork is available in English.

bili指挥部(指挥部精准降落)

查找弹幕中的"指挥部"关键词,实现自动跳过片头(可能误伤)

当前为 2020-06-25 提交的版本,查看 最新版本

// ==UserScript==
// @name         bili指挥部(指挥部精准降落)
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  查找弹幕中的"指挥部"关键词,实现自动跳过片头(可能误伤)
// @author       kakasearch
// @match         *://www.bilibili.com/*
// @connect      https://comment.bilibili.com
// @run-at       document-end
// @grant        GM_xmlhttpRequest
// @license      MIT
// ==/UserScript==
var setting={
    keyword:['指挥部','精准降落','指挥官','精准落地','感谢指路','精准'],
    react_time:2,//弹幕发送的反应时间
    cid:'',//控制切p
    debug : 0,
}
function info(){
    const arg = Array.from(arguments);
    arg.unshift(`color: white; background-color:#2274A5`);
    arg.unshift('%c bili指挥部:');
    console["info"].apply(console, arg);

}

function get_danmu(cid){//获取弹幕
    if(setting.debug){
        info('开始获取弹幕')
    }


    GM_xmlhttpRequest({
        method: 'GET',
        url: 'https://comment.bilibili.com/'+cid+'.xml',
        onload: function(xhr) {
            let found = 0
            if (xhr.status == 200) {
                let text = xhr.responseText.replace(/<\/d>/g,'\n')//弹幕中找指挥部
                for(let i=0;i <setting.keyword.length;i++)
                {
                    let pattern1 = new RegExp( "<d p=\"(\\d+\\.\\d+),.*?\">.*?"+setting.keyword[i]+".*?", "gi");
                    let result = pattern1.exec(text)
                    if(result){
                        if(setting.debug){
                            info('找到指挥部关键词',setting.keyword[i])
                        }

                        let target = Number(result[1])//指挥部所在时间
                        let video= document.querySelector("video")
                        video.currentTime = target-setting.react_time
                        video.play()
                        found = 1
                        setting.cid = cid

                        info('已降落至指挥部')
                        break
                    }
                }
                if(found==0){
                    info('未找到指挥部')
                    info( text)
                }

            } else {
                info('获取弹幕失败')
            }
        }
    });
}
(function() {
    let cid
    function initfun(){
        let init = setInterval(function(){
            cid = document.querySelector(" li.bilibili-player-video-btn-menu-list.bilibili-player-active.bilibili-player-blink").getAttribute('data-id')
            if(cid &&cid !=setting.cid){clearInterval(init) //成功进入页面,开始执行功能
                                        let video= document.querySelector("video")
                                        let observer = new MutationObserver(initfun);
                                        observer.observe(video,{attributes: true,childList: true,subtree: true});//检测video变化,防止中途切换失效
                                        get_danmu(cid)
                                       }
        },1000)
        }
    initfun()
    // Your code here...
})();