新增贡#用户数和在线用户数显示,自动刷新舰长数,1赞变1000赞,不显示B站直播间活动皮肤
// ==UserScript== // @name B站直播间小玩具 // @namespace https://greasyfork.org/zh-CN/scripts/ // @version 1.0 // @description 新增贡#用户数和在线用户数显示,自动刷新舰长数,1赞变1000赞,不显示B站直播间活动皮肤 // @author Eric Lam // @license MIT // @iconURL https://www.bilibili.com/favicon.ico // @icon64URL https://www.bilibili.com/favicon.ico // @match *://live.bilibili.com/1* // @match *://live.bilibili.com/2* // @match *://live.bilibili.com/3* // @match *://live.bilibili.com/4* // @match *://live.bilibili.com/5* // @match *://live.bilibili.com/6* // @match *://live.bilibili.com/7* // @match *://live.bilibili.com/8* // @match *://live.bilibili.com/9* // @match *://live.bilibili.com/blanc/1* // @match *://live.bilibili.com/blanc/2* // @match *://live.bilibili.com/blanc/3* // @match *://live.bilibili.com/blanc/4* // @match *://live.bilibili.com/blanc/5* // @match *://live.bilibili.com/blanc/6* // @match *://live.bilibili.com/blanc/7* // @match *://live.bilibili.com/blanc/8* // @match *://live.bilibili.com/blanc/9* // @match *://live.bilibili.com/blackboard/era/* // @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 unsafeWindow // ==/UserScript== //修改自https://greasyfork.org/zh-CN/scripts/435942 https://greasyfork.org/zh-CN/scripts/477746 (async function () { var roomId 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 } 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(); } } } } newWindow.init() const seconds = 5 const roomReg = /^\/(blanc\/)?(?<id>\d+)/ roomId = parseInt(roomReg.exec(location.pathname)?.groups?.id) const res = await fetcher('https://api.live.bilibili.com/room/v1/Room/room_init?id=' + roomId) roomId = res.data.room_id const uid = res.data.uid var oldURL = window.top.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('哔哩哔哩直播')){ let newURL = 'https://live.bilibili.com/blanc/' + roomId window.top.location = newURL } if(oldURL.includes('blackboard/era')){ let newURL = 'https://live.bilibili.com/blanc/' + roomId window.top.location = newURL } setTimeout(() => { try{ window.toast('点赞拦截代码加载成功'); window.toast('点赞后几秒内自动生效...'); const originalFetch = unsafeWindow.fetch; unsafeWindow.fetch = async function(...args) { const [resource, config] = args; // 检查是否是点赞请求 if (typeof resource === 'string' && resource.includes('/xlive/app-ucenter/v1/like_info_v3/like/likeReportV3')) { const newResource = resource.replace(/click_time=[0-9]+/,'click_time=1000'); window.toast('点赞次数修改为1000次') args[0] = newResource } return originalFetch.apply(this, args); }; } catch (err) { console.error(err); } },5000) if (res.data.live_status != 1) { console.warn(`不在直播,已略过`) return } 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);