简单封装一些信息

目前为 2022-02-15 提交的版本。查看 最新版本

此脚本不应直接安装,它是一个供其他脚本使用的外部库。如果您需要使用该库,请在脚本元属性加入:// @require https://update.cn-greasyfork.org/scripts/439903/1018818/%E7%AE%80%E5%8D%95%E5%B0%81%E8%A3%85%E4%B8%80%E4%BA%9B%E4%BF%A1%E6%81%AF.js

// ==UserScript==
// @name            简单封装一些信息
// @version         1.0.2
// @description     无
// @author          Pronax
// ==/UserScript==

const ROOM_INFO_API = {
    ROOM_PLAY_INFO: undefined,
    ROOM_USER_INFO: undefined,
    getRid: async function () {
        if (!this.ROOM_PLAY_INFO) {
            await this.fetchPlayInfo(this.getTempRid());
        }
        return this.ROOM_PLAY_INFO.room_id;
    },
    getUid: async function () {
        if (!this.ROOM_PLAY_INFO) {
            await this.fetchPlayInfo(this.getTempRid());
        }
        return this.ROOM_PLAY_INFO.uid;
    },
    getDanmuLength: async function () {
        if (!this.ROOM_USER_INFO) {
            await this.fetchUserInfo(this.getTempRid());
        }
        return this.ROOM_USER_INFO.property.danmu.length;
    },
    getTempRid: function () {
        switch (true) {
            case location.href.match(/live.bilibili.com\/(\d+)/) != null:
                return location.href.match(/live.bilibili.com\/(\d+)/)[1];
            case typeof (__initialState) != 'undefined':
                return __initialState["live-non-revenue-player"][0].defaultRoomId;
            default:
                alert("无法获得RID,请反馈给插件开发者");
        }
    },
    fetchPlayInfo: async function (rid) {
        return new Promise((r, j) => {
            fetch(`https://api.live.bilibili.com/xlive/web-room/v2/index/getRoomPlayInfo?room_id=${rid}`, {
                credentials: 'include',
            })
                .then(r => r.json())
                .then(json => {
                    this.ROOM_PLAY_INFO = json.data;
                    r();
                });
        });
    },
    fetchUserInfo: async function (rid) {
        return new Promise((r, j) => {
            fetch(`https://api.live.bilibili.com/xlive/web-room/v1/index/getInfoByUser?room_id=${rid}`, {
                credentials: 'include',
            })
                .then(r => r.json())
                .then(json => {
                    this.ROOM_USER_INFO = json.data;
                    r();
                });
        });
    }
}