哔哩高能用户(左)和贡献用户(右)舰长数

B站直播界面新增高能用户(左)和贡献用户(右),自动刷新舰长数,1赞变1000赞,不显示B站直播间活动皮肤

目前为 2024-12-27 提交的版本。查看 最新版本

// ==UserScript==
// @name         哔哩高能用户(左)和贡献用户(右)舰长数
// @namespace    https://gf.qytechs.cn/zh-CN/scripts/
// @version      0.3
// @description  B站直播界面新增高能用户(左)和贡献用户(右),自动刷新舰长数,1赞变1000赞,不显示B站直播间活动皮肤
// @author       Eric Lam
// @license      MIT
// @iconURL      https://www.bilibili.com/favicon.ico
// @icon64URL    https://www.bilibili.com/favicon.ico
// @match        https://live.bilibili.com/*
// @match        https://www.bilibili.com/blackboard/live/*
// @connect      bilibili.com
// @require      https://cdn.jsdelivr.net/npm/[email protected]/dist/jquery.min.js
// @require      https://unpkg.com/[email protected]/dist/ajaxhook.min.js
// @grant        none
// ==/UserScript==


//修改自https://gf.qytechs.cn/zh-CN/scripts/435942-%E9%AB%98%E8%83%BD%E6%A6%9C%E6%98%BE%E7%A4%BA%E6%80%BB%E4%BA%BA%E6%95%B0

(async function () {
    var oldUrlPath = window.location.pathname;
    var oldURL = window.location.href;
    var title = document.getElementsByTagName("title");
    if(oldURL.includes('lottery'))return
    if(oldURL.includes('treasurebox'))return
    if(!oldURL.includes('blanc') && !title[0].innerHTML.includes('哔哩哔哩直播'))
    {
        var newURL = 'https://live.bilibili.com/'.concat('blanc',oldUrlPath);
        window.location.replace(newURL)
    }
    const newWindow = {
        init: () => {
            return newWindow.Toast.init();
        },
        Toast: {
            init: () => {
                try {
                    const list = [];
                    window.toast = (msg, type = 'success', timeout = 5e3) => {
                        switch (type){
                            case 'success':
                            case 'info':
                            case 'error':
                                break;
                            default:
                                type = 'info';
                        }
                        const a = $(`<div class="link-toast ${type} fixed" style="z-index:2001;text-align: left;"><span class="toast-text">${msg}</span></div>`)[0];
                        document.body.appendChild(a);
                        a.style.top = (document.body.scrollTop + list.length * 40 + 10) + 'px';
                        a.style.left = (document.body.offsetWidth + document.body.scrollLeft - a.offsetWidth - 5) + 'px';
                        list.push(a);
                        setTimeout(() => {
                            a.className += ' out';
                            setTimeout(() => {
                                list.shift();
                                list.forEach((v) => {
                                    v.style.top = (parseInt(v.style.top, 10) - 40) + 'px';
                                });
                                $(a).remove();
                            }, 200);
                        }, timeout);
                    };
                    return $.Deferred().resolve();
                } catch (err){
                    return $.Deferred().reject();
                }
            }
        }
    }
    setTimeout(() => {
        try{
            newWindow.init()
            window.toast('点赞劫持代码加载成功');
            window.toast('点赞后几秒内自动生效...');
            ah.proxy({
                onRequest: (config, handler) => {
                    if (config.url.includes('/xlive/app-ucenter/v1/like_info_v3/like/likeReportV3')) {
                        config.body = config.body.replace(/click_time=[0-9]+/,'click_time=1000')
                        if(config.body.indexOf("click_time=1000") > -1){
                            window.toast('点赞次数修改为1000次');
                        }
                        handler.next(config);
                    }
                    else{
                        handler.next(config);
                    }
                },
                onResponse: (response, handler) => {
                    if (response.config.url.includes('/xlive/app-ucenter/v1/like_info_v3/like/likeReportV3')){
                        if(JSON.parse(response.response).code == 0){
                            window.toast('点赞成功');
                        }else{
                            window.toast('点赞失败');
                        }

                    }else{
                        handler.next(response)
                    }
                }
            },unsafeWindow);
        } catch (err) {
            console.error(err);
        }
    },5000)
    'use strict';
    // ====== 设定 ==========
    const seconds = 5 // 隔 X 秒侦测

    // =====================

    const roomReg = /^\/(blanc\/)?(?<id>\d+)/
    let roomId = parseInt(roomReg.exec(location.pathname)?.groups?.id)

    const res = await fetcher('https://api.live.bilibili.com/room/v1/Room/room_init?id=' + roomId)

    if (res.data.live_status != 1) {
        console.warn(`不在直播,已略过`)
        return
    }

    roomId = res.data.room_id
    const uid = res.data.uid

    let rankGold = undefined
    let guardTab = undefined

    while ($('.tab-list.dp-flex').children().length == 0) {
        console.warn(`找不到Tab元素,等待3秒。`)
        await new Promise((res,) => setTimeout(res, 3000)) // wait 3 seconds
    }

    const keywords = ['高能榜', '房间观众', '应援日榜']
    let keyword;
    for (const element of $('.tab-list.dp-flex').children()) {
        console.log(element.innerText)
        if(element.innerText.indexOf("大航海") > -1)guardTab = element
        const kw = keywords.find(s => element.innerText.startsWith(s))
        console.log(kw)
        if (kw) {
            rankGold = element
            keyword = kw
        }
    }

    if (!rankGold || !keyword) {
        console.warn(`找不到高能榜元素。`)
        return
    }

    setInterval(async () => {
        let online = 0
        let online2 = 0
        let guard = 0
        try {
            const data = await fetcher(`https://api.live.bilibili.com/xlive/general-interface/v1/rank/getOnlineGoldRank?ruid=${uid}&roomId=${roomId}&page=1&pageSize=1`)
            online = data.data.onlineNum
        } catch (err) {
            console.warn(`查询高能榜时出现错误: ${err}`)
            console.warn(err)
        }
        try {
            const data2 = await fetcher(`https://api.live.bilibili.com/xlive/general-interface/v1/rank/queryContributionRank?ruid=${uid}&room_id=${roomId}&page=1&page_size=1&type=online_rank&switch=contribution_rank`)
            online2 = data2.data.count
        } catch (err) {
            console.warn(`查询贡献榜时出现错误: ${err}`)
            console.warn(err)
        }
        rankGold.innerHTML = `<span title="高能用戶(左): ${online}\n贡献用户(右): ${online2}">${keyword}(${online}/${online2})</span>`
        try {
            const data3 = await fetcher(`https://api.live.bilibili.com/xlive/app-room/v2/guardTab/topListNew?roomid=${roomId}&page=1&ruid=${uid}&page_size=20&typ=5&platform=web`)
            guard = data3.data.info.num
        } catch (err) {
            console.warn(`查询大航海时出现错误: ${err}`)
            console.warn(err)
        }
        guardTab.innerHTML = `<span >大航海(${guard})</span>`
    }, seconds * 1000)
})().catch(console.warn);



async function fetcher(url) {
    const res = await fetch(url)
    if (!res.ok) {
        throw new Error(res.statusText)
    }

    const data = await res.json()
    console.debug(data)
    if (data.code != 0) {
        throw new Error(`B站API请求错误: ${data.message}`)
    }
    return data
}

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址