// ==UserScript== // @name 高亮个别用户的弹幕 // @namespace http://tampermonkey.net/ // @version 0.6.4 // @description 高亮个别用户的弹幕, 有时候找一些特殊人物(其他直播主出现在直播房间)用 // @author Eric Lam // @include /https?:\/\/live\.bilibili\.com\/(blanc\/)?\d+\??.*/ // @require https://cdn.jsdelivr.net/npm/jquery@3.5.1/dist/jquery.min.js // @require https://cdn.jsdelivr.net/npm/pako@1.0.10/dist/pako.min.js // @require https://cdnjs.cloudflare.com/ajax/libs/toastr.js/latest/toastr.min.js // @require https://greasyfork.org/scripts/417560-bliveproxy/code/bliveproxy.js?version=875812 // @grant none // @downloadURL none // ==/UserScript== (function() { 'use strict'; console.log('using highlight filter') $(document.head).append(``) // 设定 // 高亮用户 ID const highlightUsers = [ 396024008, // 日本兄贵 604890122, // 日本兄贵 623441609, // 凤玲天天 (DD) 1618670884, // 日本兄贵 840358977, // 日本兄贵 406805563, // 乙女音 2299184, // 古守 625255764, // 辻蓝佳音瑠 198297, // 冰糖 1576121, // paryi ] const settings = { // 颜色 // 颜色列表 https://my.oschina.net/mye/blog/213309 color: 0xFFFF00, // 透明度 opacity: 1.0, playAudio: false // 啟用直播間進入通知音效 } // 代码 const audio = new Audio('https://mobcup.net/d/w4s8t6ld/mp3') const hightlights = new Set() bliveproxy.addCommandHandler('DANMU_MSG', command => { const userId = command.info[2][0] console.debug(userId) if (!highlightUsers.includes(userId)) return console.debug('detected highlighted user: '+userId) command.info[0][3] = settings.color command.info[1] += `(${command.info[2][1]})` console.debug(`converted danmaku: ${command.info[1]}`) hightlights.add(command.info[1]) }) toastr.options = { "closeButton": false, "debug": false, "newestOnTop": true, "progressBar": true, "positionClass": "toast-bottom-left", "preventDuplicates": false, "onclick": null, "showDuration": "300", "hideDuration": "1000", "timeOut": "5000", "extendedTimeOut": "1000", "showEasing": "swing", "hideEasing": "linear", "showMethod": "fadeIn", "hideMethod": "fadeOut" } bliveproxy.addCommandHandler('INTERACT_WORD', ({data}) => { const {uid, uname} = data if (!highlightUsers.includes(uid)) return console.debug(`name: ${uname} has enter this live room`) toastr.info(`你所关注的用户 ${uname} 已进入此直播间。`, `噔噔咚!`) if (settings.playAudio) audio.play() }) const config = { attributes: false, childList: true, subtree: true } function danmakuCheckCallback(mutationsList){ for(const mu of mutationsList){ for (const node of mu.addedNodes){ const danmaku = node?.innerText?.trim() ?? node?.data?.trim() if (danmaku === undefined || danmaku === '') continue if (!hightlights.has(danmaku)) continue console.debug('highlighting danmaku: '+danmaku) const n = node.innerText !== undefined ? node : node.parentElement const jimaku = $(n) jimaku.css('opacity', `${settings.opacity}`) hightlights.delete(danmaku) } } } const danmakuObserver = new MutationObserver((mu, obs) => danmakuCheckCallback(mu)) danmakuObserver.observe($('.bilibili-live-player-video-danmaku')[0], config) })();