// ==UserScript== // @name AcFun - 我的关注直播间 // @namespace http://tampermonkey.net/ // @version 1.2.4 // @description 修改uid: 0.0伪用户的直播间页面样式,只展示所关注的直播间列表 // @author dareomaewa // @match https://live.acfun.cn/live/0.0 // @icon https://www.google.com/s2/favicons?sz=64&domain=acfun.cn // @grant none // @require https://cdn.staticfile.org/jquery/3.5.0/jquery.min.js // @run-at document-start // @license MIT // @downloadURL none // ==/UserScript== (function() { 'use strict'; var hasPlayer,hasRecmdLive; new MutationObserver(function(mutations) { // console.log(mutations); if (document.querySelector('.player-outer-wrapper') && !hasPlayer) { hasPlayer = true; document.querySelector('.player-outer-wrapper').style.display = 'none'; } if (document.querySelector('.recmd-live-container') && !hasRecmdLive) { hasRecmdLive = true; document.querySelector('.recmd-live-container').style.display = 'none'; if (document.querySelector('.main')) { const main =document.querySelector('.main'); const loading = document.createElement("div"); loading.innerHTML = '

Loading...


如果加载太久,请刷新页面

'; main.appendChild(loading.childNodes[0]); } } }).observe(document, {childList: true, subtree: true}); })(); window.onload = function() { console.log('window.onload='); const config = { maxLoveUpsSize: 50, maxLiveSize: 1001, love: { // true: 打开love样式 false: 关闭 open: true, ups: [], }, egg: { // 彩蛋开关 true: 打开 false: 关闭 open: true, type: 0, upsInfo: { 416752: { uid: 416752, coverUrls: [ 'https://imgs.aixifan.com/newUpload/776907_30a99a69987d4995b43df39320491711.jpg', ], }, 36626547: { uid: 36626547, coverUrls: [ 'https://imgs.aixifan.com/newUpload/776907_3151ca8705334d88ba6cdc4834573ec1.jpg', ], }, 23682490: { uid: 23682490, coverUrls: [ 'https://imgs.aixifan.com/newUpload/776907_b8fbdbdd47be447895464b5555225679.jpg', ], }, 1345673: { uid: 1345673, coverUrls: [ 'https://imgs.aixifan.com/newUpload/776907_5d8820b3b8ca42d38f17240c48102752.jpg', ], }, 179922: { uid: 179922, coverUrls: [ 'https://imgs.aixifan.com/newUpload/776907_75e7e36b3e6445baa02f1c8618b4359c.jpg', ], }, 30561040: { uid: 30561040, coverUrls: [ 'https://imgs.aixifan.com/newUpload/776907_61f0f008b94c4d579f789c06e5d2ee4f.jpg', ], }, 40740702: { uid: 40740702, coverUrls: [ 'https://imgs.aixifan.com/newUpload/776907_25a67815bb984f5ea853395af9c8c237.jpg', ], }, 12553939: { uid: 12553939, coverUrls: [ 'https://imgs.aixifan.com/newUpload/776907_b8ac4f947626494cbb96356794d39e3c.jpg', ], }, }, }, }; var lsLoveUps = window.localStorage.getItem('ls_love_ups'); if (!lsLoveUps) { window.localStorage.setItem('ls_love_ups', JSON.stringify({})); lsLoveUps = window.localStorage.getItem('ls_love_ups'); } if (typeof(lsLoveUps) === 'string') { lsLoveUps = JSON.parse(lsLoveUps); } config.love.ups = lsLoveUps; console.log(`lsLoveUps: ${lsLoveUps}`); var loveUpsUids = Object.keys(lsLoveUps) ?? []; console.log(`loveUpsUids: ${loveUpsUids}`); var lsLoveOpen = window.localStorage.getItem('ls_love_open'); if (typeof(lsLoveOpen) !== 'boolean' && !lsLoveOpen) { console.log(`lsLoveOpen0: ${lsLoveOpen}`); window.localStorage.setItem('ls_love_open', config.love.open); lsLoveOpen = window.localStorage.getItem('ls_love_open'); } lsLoveOpen = String(lsLoveOpen) lsLoveOpen = /^true$/.test(lsLoveOpen) console.log(`lsLoveOpen: ${lsLoveOpen}`); function StringBuffer() { this.__strings__ = []; }; StringBuffer.prototype.Append = function (str) { this.__strings__.push(str); return this; }; StringBuffer.prototype.ToString = function () { return this.__strings__.join(''); }; function createLiveListItemHtmlStr(data) { var htmlStr = new StringBuffer(); htmlStr.Append('
'); htmlStr.Append(' '); htmlStr.Append('
'); htmlStr.Append(' '); htmlStr.Append('
'); htmlStr.Append(' '); htmlStr.Append('
'); htmlStr.Append(' ' + data.likeCount+ ''); htmlStr.Append(''); htmlStr.Append(' ' + data.onlineCount+ ''); htmlStr.Append(''); htmlStr.Append('
'); if (config.egg.open && Object.keys(config.egg.upsInfo).some(e => e === data.user.id)) { const eggCoverUrl = config.egg.upsInfo[data.user.id].coverUrls[config.egg.type]; htmlStr.Append('
'); htmlStr.Append(' '); htmlStr.Append(' '); htmlStr.Append('
'); htmlStr.Append('
'); return htmlStr.ToString(); } function waitElement(selector, times, interval, flag=true){ var _times = times || -1, _interval = interval || 1, _selector = selector, _iIntervalID, _flag = flag; return new Promise(function(resolve, reject){ _iIntervalID = setInterval(function() { if(!_times) { clearInterval(_iIntervalID); reject(); } _times <= 0 || _times--; var _self = $(_selector); if( (_flag && _self.length) || (!_flag && !_self.length) ) { clearInterval(_iIntervalID); resolve(_iIntervalID); } }, _interval); }); } function addChild(fatherNode, childNode, innerHtmlStr, type) { childNode.innerHTML = innerHtmlStr; if (type) { fatherNode.appendChild(childNode); }else { fatherNode.appendChild(childNode.childNodes[0]); } } function addChildDiv(fatherNode, innerHtmlStr) { addChild(fatherNode, document.createElement("div"), innerHtmlStr); } function addChildScript(fatherNode, scriptStr) { addChild(fatherNode, document.createElement("script"), scriptStr, 'script'); } function addChildStyle(fatherNode, styleStr) { addChild(fatherNode, document.createElement("style"), styleStr, 'style'); } function initLiveContainer(liveContainerSelector, liveList) { waitElement(liveContainerSelector).then(function() { var othersLiveContainer = document.querySelector(liveContainerSelector); //console.log(liveList); liveList.forEach(data => { addChildDiv(othersLiveContainer, createLiveListItemHtmlStr(data)); }); }); } function replaceText(selector, newText) { waitElement(selector).then(function() {document.querySelector(selector).innerText = newText;}); } function removeNode(selector) { waitElement(selector).then(function() {document.querySelector(selector).style.display = 'none';}); } function confirmMoreLive(selector) { const msg = '确定跳转AC直播大屏幕吗?你将可能进入未曾关注过的直播间。'; waitElement(selector).then(function() { const moreLiveNodes = document.querySelectorAll(selector); moreLiveNodes.forEach(node => { node.setAttribute('href', 'javascript:if(confirm("' + msg + '")) window.open("/");'); node.removeAttribute('target'); }); }); } replaceText('title', '我的关注直播间'); //replaceText('.recmd-live-title', '我的关注直播间'); //removeNode('.player-outer-wrapper'); //removeNode('.recmd-live-container'); confirmMoreLive('.more-live'); confirmMoreLive('.live-page-title'); confirmMoreLive('a[href="/"].live'); $.ajax({ url: '/api/channel/list?count=' + config.maxLiveSize + '&pcursor=&filters=[%7B%22filterType%22:3,+%22filterId%22:0%7D]', type: 'get', success: function (res) { //console.log(res); const liveList = res.liveList; replaceText('.recmd-live-title', '我的关注直播间 (' + liveList.length + ')'); let loveUps = Object.keys(config.love.ups) ?? []; waitElement('.recommend-live-wrapper').then(function() { const recommendLiveWrapperNode =document.querySelector('.recommend-live-wrapper'); addChildDiv(recommendLiveWrapperNode, '
'); addChildDiv(recommendLiveWrapperNode, '
'); }); waitElement('head').then(function() { const headNode = document.querySelector('head'); addChildStyle(headNode, '.live-check-cover {color: #fff;position: absolute;right: 4px;bottom: 5px;border-radius: 3px;text-align: center;width: auto;height: 19px;z-index: 996;} .live-check-cover-desc {font-size: 12px;line-height: 17px;height: 18px;display: inline-block;vertical-align: top;width: 58px;}'); if (lsLoveOpen) { addChildStyle(headNode, '#loveLiveContainer .live-list-item .list-content-top .list-content-data {background: linear-gradient(180deg,transparent,rgb(254 129 141 / 83%));} .list-container {min-height: 500px;}'); } if (config.egg.open) { addChildScript(headNode, 'function danmakuMaskTrigger(selector0, selector1){document.querySelector(selector0).setAttribute("style", "display: block;");document.querySelector(selector1).setAttribute("style", "display: none;");}'); } }); if (!lsLoveOpen || loveUps.length ===0) { initLiveContainer('#othersLiveContainer', liveList); }else { const loveLiveList = liveList.filter((e) => loveUps.some((uid) => uid == e.authorId)); initLiveContainer('#loveLiveContainer', loveLiveList); const othersLiveList = liveList.filter((e) => !loveUps.some((uid) => uid == e.authorId)); initLiveContainer('#othersLiveContainer', othersLiveList); } removeNode('.loading'); // var _interval = 200; // var _times = 50; // var _iIntervalID; // _iIntervalID = setInterval(function() { // if(!_times) { // clearInterval(_iIntervalID); // } // removeNode('.loading'); // _times <= 0 || _times--; // }, _interval); } }); window.aikaCut = function aikaCut() { const btn = document.querySelector('#aika-cut'); $.ajax({ url: 'https://id.app.acfun.cn/rest/web/token/get', type: 'post', data: {'sid': 'acfun.midground.api'}, xhrFields: { withCredentials: true }, success: function (res) { //console.log(res); const aikaText = document.getElementById('aika-text'); const aikaTestValue = aikaText.value.trim(); var aikaCutUrl; if (/https:\/\/onvideo.kuaishou.com\/vangogh\/editor\/(\d+)\?source=ac/g.test(aikaTestValue)) { aikaCutUrl = 'https://onvideoapi.kuaishou.com/rest/infra/sts?sid=acfun.midground.api&authToken=' + res['acfun.midground.api.at'] + '&followUrl=' + encodeURI(aikaTestValue); } else if (/^\d+$/.test(aikaTestValue)) { aikaCutUrl = 'https://onvideoapi.kuaishou.com/rest/infra/sts?sid=acfun.midground.api&authToken=' + res['acfun.midground.api.at'] + '&followUrl=' + encodeURI('https://onvideo.kuaishou.com/vangogh/editor/' + aikaTestValue + '?source=ac'); } else { aikaCutUrl = '#'; } console.log(aikaCutUrl); const aikaA = document.createElement('a'); aikaA.href = aikaCutUrl; aikaA.target = '_blank'; aikaA.click(); aikaA.remove(); }, beforeSend: function() { btn.disabled = true; btn.style['background-color'] = 'rgb(0 0 0 / 45%)'; btn.innerText = '跳转中…'; }, complete: function() { btn.disabled = false; btn.style['background-color'] = '#fd4c5d'; btn.innerText = '爱咔剪辑'; } }); } window.checkAika = function checkAika() { const btn = document.querySelector('#aika-find'); $.ajax({ url: 'https://id.app.acfun.cn/rest/web/token/get', type: 'post', data: {'sid': 'acfun.midground.api'}, xhrFields: { withCredentials: true }, success: function (res) { const aikaA = document.createElement('a'); aikaA.href = 'https://onvideoapi.kuaishou.com/rest/infra/sts?sid=acfun.midground.api&authToken=' + res['acfun.midground.api.at'] + '&followUrl=' + encodeURI('https://onvideo.kuaishou.com/vangogh/editor/0.0?source=ac'); aikaA.target = '_blank'; aikaA.click(); aikaA.remove(); }, beforeSend: function() { btn.disabled = true; btn.innerText = '跳转中…'; }, complete: function() { btn.disabled = false; btn.innerText = '爱咔号查询>'; } }); } window.triggerLove = function triggerLove() { const loveStyle = document.querySelector('#loveStyle'); const loveStyleChecked = loveStyle.checked; if(confirm(`即将刷新页面,确定${loveStyleChecked ? '打开' : '关闭'}喜爱模式吗?`)) { window.localStorage.setItem('ls_love_open', loveStyleChecked);; window.location.reload(); }else { loveStyle.checked = !loveStyleChecked; } } window.configTrigger = function configTrigger() { const configContainerNode = document.querySelector('#configContainer'); const configTriggerNode = document.querySelector('#configTrigger'); if(configContainerNode.style.display === 'none') { configContainerNode.style.display = 'block'; configTriggerNode.innerText = '收起配置'; const loveUpshtmlStringBuffer = new StringBuffer(); const copyAllUidTextStringBuffer = new StringBuffer(); if (loveUpsUids.length > 0) { loveUpsUids.forEach(uid => { loveUpshtmlStringBuffer.Append(`${lsLoveUps[uid]}  `) copyAllUidTextStringBuffer.Append(`${uid},`); }); } else { loveUpshtmlStringBuffer.Append('当前暂无喜爱主播的信息,请进行添加'); } const loveUpsContainer =document.querySelector('#love_ups_container'); const currentLoveUpsHtmlStr = `
当前喜爱主播 (${loveUpsUids.length})
${loveUpshtmlStringBuffer.ToString()}
`; addChild(loveUpsContainer, document.createElement("div"), currentLoveUpsHtmlStr, 'div'); }else { configContainerNode.style.display = 'none'; configTriggerNode.innerText = '展开配置'; const currentLoveUps =document.querySelector('#current_love_ups'); currentLoveUps.parentNode.remove(); } } function wait(ms) { return new Promise(resolve =>setTimeout(() => resolve(), ms)); }; window.addLoveUps = async function addLoveUps() { const tips = document.querySelector('#add_uid_tips'); tips.innerText = '进行中…'; const delTips = document.querySelector('#del_uid_tips'); delTips.innerText = ''; const btn = document.querySelector('#loveUid-add'); btn.disabled = true; btn.style['background-color'] = 'rgb(0 0 0 / 45%)'; await wait(100); if (loveUpsUids.length < config.maxLoveUpsSize) { var upUids = document.querySelector('#up_uids').value; upUids = upUids.trim(); const onlyOneUid = /^\d+$/.test(upUids); if (onlyOneUid && !loveUpsUids.some((fuid) => fuid == upUids)) { $.ajax({ async:false, url: 'https://live.acfun.cn/rest/pc-direct/user/userInfo?userId=' + upUids, type: 'get', xhrFields: { withCredentials: true }, success: function (res) { if (res.result === 0 && res.profile && res.profile.name) { lsLoveUps[Number(upUids)] = res.profile.name; console.log(lsLoveUps); window.localStorage.setItem('ls_love_ups', JSON.stringify(lsLoveUps)); loveUpsUids = Object.keys(lsLoveUps) ?? []; tips.innerText = '添加成功,刷新页面生效'; } else { tips.innerText = '添加失败,获取信息失败'; } }, error: function() { tips.innerText = '添加失败,获取信息失败'; } }); } else if(upUids && upUids.length > 0) { upUids = upUids.replaceAll(",", ",").replaceAll(" ", ","); const uids = upUids.split(','); if ((uids.length + loveUpsUids.length) <= config.maxLoveUpsSize) { uids.forEach(uid => { uid = uid.trim(); if (/^\d+$/.test(uid) && !loveUpsUids.some((fuid) => fuid == uid)) { $.ajax({ async:false, url: 'https://live.acfun.cn/rest/pc-direct/user/userInfo?userId=' + uid, type: 'get', xhrFields: { withCredentials: true }, success: function (res) { if (res.result === 0 && res.profile && res.profile.name) { lsLoveUps[Number(uid)] = res.profile.name; } } }); } }); console.log(lsLoveUps); window.localStorage.setItem('ls_love_ups', JSON.stringify(lsLoveUps)); loveUpsUids = Object.keys(lsLoveUps) ?? []; tips.innerText = '添加成功,刷新页面生效'; } else { tips.innerText = '添加失败,超出最大值50'; } } else { tips.innerText = '添加失败,无效uid'; } }else { tips.innerText = '添加失败,超出最大值50'; } btn.disabled = false; btn.style['background-color'] = '#fd4c5d'; } window.delLoveUps = async function delLoveUps() { const tips = document.querySelector('#del_uid_tips'); tips.innerText = ''; const addTips = document.querySelector('#add_uid_tips'); addTips.innerText = ''; const btn = document.querySelector('#loveUid-del'); btn.disabled = true; btn.style['background-color'] = 'rgb(0 0 0 / 45%)'; await wait(100); var upUids = document.querySelector('#up_uids').value; upUids = upUids.trim(); const onlyOneUid = /^\d+$/.test(upUids); if (onlyOneUid && loveUpsUids.some((fuid) => fuid == upUids)) { delete lsLoveUps[upUids]; console.log(lsLoveUps); window.localStorage.setItem('ls_love_ups', JSON.stringify(lsLoveUps)); tips.innerText = '删除成功,刷新页面生效'; } else if(upUids && upUids.length > 0) { upUids = upUids.replaceAll(",", ",").replaceAll(" ", ","); const uids = upUids.split(','); uids.forEach(uid => { uid = uid.trim(); if (/^\d+$/.test(uid) && loveUpsUids.some((fuid) => fuid == uid)) { delete lsLoveUps[uid]; } }); console.log(lsLoveUps); window.localStorage.setItem('ls_love_ups', JSON.stringify(lsLoveUps)); tips.innerText = '删除成功,刷新页面生效'; } else { tips.innerText = '删除失败,无效uid'; } btn.disabled = false; btn.style['background-color'] = '#e6e6e6'; } window.clearConfig = function clearConfig() { if(confirm(`即将刷新页面,确定初始化配置吗?`)) { window.localStorage.removeItem('ls_love_ups'); window.localStorage.removeItem('ls_love_open'); window.location.reload(); } } const aikaHtmlStr = `

爱咔

`; const configHtmlStr = `
`; waitElement('.list-right').then(function() { const listRightNode = document.querySelector('.list-right'); addChild(listRightNode, document.createElement("div"), aikaHtmlStr, 'div'); addChild(listRightNode, document.createElement("div"), configHtmlStr, 'div'); }); }