Greasy Fork

简单封装一些信息

目前为 2022-03-18 提交的版本。查看 最新版本

此脚本不应直接安装,它是一个供其他脚本使用的外部库。如果您需要使用该库,请在脚本元属性加入:// @require https://update.greasyfork.cloud/scripts/439903/1029483/%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.5
// @description     无
// @match           bilibili
// @author          Pronax
// ==/UserScript==

(function () {
    let w = typeof (unsafeWindow) == "undefined" ? window : unsafeWindow;
    if (w.ROOM_INFO_API != undefined) { return; }
    w.ROOM_INFO_API = {
        ROOM_PLAY_INFO: undefined,
        ROOM_USER_INFO: undefined,
        FANS_MEDAL_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;
        },
        getFansMedalInfo: async function () {
            if (!this.ROOM_USER_INFO) {
                let uid = await ROOM_INFO_API.getUid();
                await this.fetchMedalInfo(uid);
            }
            return this.ROOM_USER_INFO.my_fans_medal;
        },
        getTempRid: function () {
            switch (true) {
                // 真实roomid
                case typeof (__NEPTUNE_IS_MY_WAIFU__) != 'undefined':
                    return __NEPTUNE_IS_MY_WAIFU__.roomInitRes.data.room_id;
                case document.querySelector("#iframe-popup-area>iframe") != null:
                    return document.querySelector("#iframe-popup-area>iframe").src.match(/roomid=(\d+)/)[1];
                // 下面的都是短位rid
                case location.href.match(/live.bilibili.com(\/blanc)?\/(\d+)/) != null:
                    return location.href.match(/live.bilibili.com(\/blanc)?\/(\d+)/)[2];
                case document.querySelector("#player-ctnr iframe"):
                    return document.querySelector("#player-ctnr iframe").src.match(/blanc\/(\d+)/)[1];
                case typeof (__initialState) != 'undefined' && __initialState["live-non-revenue-player"].length == 1:
                    return __initialState["live-non-revenue-player"][0].defaultRoomId;
                default:
                    alert("无法获得RID,请反馈给插件开发者");
            }
        },
        fetchPlayInfo: async function (rid) {
            return new Promise((resolve, reject) => {
                fetch(`https://api.live.bilibili.com/xlive/web-room/v2/index/getRoomPlayInfo?room_id=${rid}`, {
                    credentials: 'include',
                })
                    .then(res => res.json())
                    .then(json => {
                        this.ROOM_PLAY_INFO = json.data;
                        resolve();
                    });
            });
        },
        fetchUserInfo: async function (rid) {
            return new Promise((resolve, reject) => {
                fetch(`https://api.live.bilibili.com/xlive/web-room/v1/index/getInfoByUser?room_id=${rid}`, {
                    credentials: 'include',
                })
                    .then(res => res.json())
                    .then(json => {
                        this.ROOM_USER_INFO = json.data;
                        resolve();
                    });
            });
        },
        fetchMedalInfo: async function (uid) {
            return new Promise((resolve, reject) => {
                fetch(`https://api.live.bilibili.com/xlive/app-ucenter/v1/fansMedal/fans_medal_info?target_id=${uid}`, {
                    credentials: 'include',
                })
                    .then(res => res.json())
                    .then(json => {
                        this.ROOM_USER_INFO = json.data;
                        resolve();
                    });
            });
        }
    }
})();