From 8c2c0138f5e4097aa9d4e25cad4318d4a8a6b66a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]@users.noreply.github.com" Date: Sun, 17 Sep 2023 12:29:11 +0000 Subject: [PATCH] =?UTF-8?q?=F0=9F=94=A7=20Automated=20build:=20v7.1.2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dist/bilibili-live-tasks-helper.min.user.js | 6 +- dist/bilibili-live-tasks-helper.user.js | 490 ++++++++++++-------- 2 files changed, 287 insertions(+), 209 deletions(-) diff --git a/dist/bilibili-live-tasks-helper.min.user.js b/dist/bilibili-live-tasks-helper.min.user.js index 5796823c..e358a74a 100644 --- a/dist/bilibili-live-tasks-helper.min.user.js +++ b/dist/bilibili-live-tasks-helper.min.user.js @@ -3,7 +3,7 @@ // @name:en Bilibili Live Tasks Helper // @name:zh Bilibili Live Tasks Helper // @namespace https://github.com/andywang425 -// @version 7.1.1 +// @version 7.1.2 // @author andywang425 // @description Enhancing the experience of watching Bilibili live streaming. // @description:en Enhancing the experience of watching Bilibili live streaming. @@ -40,7 +40,7 @@ // @require https://unpkg.com/pinia@2.1.6/dist/pinia.iife.prod.js // @require https://unpkg.com/lodash@4.17.21/lodash.min.js // @require https://unpkg.com/hotkeys-js@3.12.0/dist/hotkeys.min.js -// @require https://unpkg.com/luxon@3.4.2/build/global/luxon.min.js +// @require https://unpkg.com/luxon@3.4.3/build/global/luxon.min.js // @require https://unpkg.com/crypto-js@4.1.1/crypto-js.js // @resource element-plus/dist/index.css https://unpkg.com/element-plus@2.3.12/dist/index.css // @connect api.bilibili.com @@ -57,4 +57,4 @@ // @grant unsafeWindow // @run-at document-start // ==/UserScript== -(e=>{if("function"==typeof GM_addStyle)return void GM_addStyle(e);const t=document.createElement("style");t.textContent=e,document.head.append(t)})(" .title[data-v-dda95e10]{padding-left:20px;align-items:center;display:flex}.header-big-text[data-v-dda95e10]{font-size:var(--big-text-size)}.header-small-text[data-v-dda95e10]{font-size:var(--small-text-size);padding-top:calc(var(--big-text-size) - var(--small-text-size));margin-left:10px;--small-text-size: 18px}.collapse-btn[data-v-dda95e10]{display:flex;justify-content:center;align-items:center;height:100%;float:left;cursor:pointer}.avatar-wrap[data-v-d7ecdd75]{width:80px;height:80px}.avatar[data-v-d7ecdd75]{display:flex;justify-content:center;align-items:center;border-radius:50%}.base[data-v-0fb8057a]{z-index:1003;position:absolute;background-color:#fff;border-bottom:1px solid #e3e5e7;border-left:1px solid #e3e5e7;border-right:1px solid #e3e5e7}.header[data-v-0fb8057a]{position:relative;box-sizing:border-box;width:100%;font-size:var(--big-text-size);align-items:center;display:flex;border-bottom:1px solid #e3e5e7;height:60px;--big-text-size: 25px}.aside[data-v-0fb8057a]{width:auto}.aside #aside-el-menu[data-v-0fb8057a]:not(.el-menu--collapse){width:150px}.main[data-v-0fb8057a]{--main-top-botton-padding: calc(var(--el-main-padding) * .625);padding-top:var(--main-top-botton-padding);padding-bottom:var(--main-top-botton-padding)}.fade-enter-active[data-v-0fb8057a],.fade-leave-active[data-v-0fb8057a]{transition:opacity .1s ease}.fade-enter-from[data-v-0fb8057a],.fade-leave-to[data-v-0fb8057a]{opacity:0}.info-icon[data-v-c1d8df5e]{font-size:var(--el-font-size-base);cursor:pointer}.status-icon[data-v-72d53133]{font-size:var(--el-font-size-base)}.blth_btn{background-color:#23ade5;font-size:small;margin-inline-start:5px;color:#fff;border-radius:4px;border:none;padding:5px;cursor:pointer;box-shadow:0 0 2px #00000075;line-height:10px;margin-left:15px}.blth_btn:hover{background-color:#1097cc}.blth_btn:hover:active{background-color:#0e86b6;position:relative;top:1px} "),async function(e,t,i,o,s,a,n,r){"use strict";function l(e){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e)for(const i in e)if("default"!==i){const o=Object.getOwnPropertyDescriptor(e,i);Object.defineProperty(t,i,o.get?o:{enumerable:!0,get:()=>e[i]})}return t.default=e,Object.freeze(t)}const c=l(o);var d,u=Object.defineProperty,h=(e,t,i)=>(((e,t,i)=>{t in e?u(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i})(e,"symbol"!=typeof t?t+"":t,i),i),m=(()=>"undefined"!=typeof GM_addStyle?GM_addStyle:void 0)(),g=(()=>"undefined"!=typeof GM_getValue?GM_getValue:void 0)(),f=(()=>"undefined"!=typeof GM_setValue?GM_setValue:void 0)(),p=(()=>"undefined"!=typeof GM_xmlhttpRequest?GM_xmlhttpRequest:void 0)(),v=(()=>"undefined"!=typeof unsafeWindow?unsafeWindow:void 0)();const y={ui:{isCollapse:!1,isShowPanel:!0,activeMenuIndex:"MainSiteTasks"},modules:{DailyTasks:{MainSiteTasks:{login:{enabled:!1,_lastCompleteTime:0},watch:{enabled:!1,_lastCompleteTime:0},coin:{enabled:!1,num:1,_lastCompleteTime:0},share:{enabled:!1,_lastCompleteTime:0}},LiveTasks:{sign:{enabled:!1,_lastCompleteTime:0},appUser:{enabled:!1,_lastCompleteTime:0},medalTasks:{danmu:{enabled:!1,list:["(⌒▽⌒)","( ̄▽ ̄)","(=・ω・=)","(`・ω・´)","(〜 ̄△ ̄)〜","(・∀・)","(°∀°)ノ","╮( ̄▽ ̄)╭","_(:3」∠)_","(^・ω・^ )","(● ̄(エ) ̄●)","ε=ε=(ノ≧∇≦)ノ","⁄(⁄ ⁄•⁄ω⁄•⁄ ⁄)⁄","←◡←","(●'◡'●)ノ♥"],_lastCompleteTime:0},like:{enabled:!1,includeHighLevelMedals:!1,_lastCompleteTime:0},watch:{enabled:!1,time:70,_watchedSecondsToday:0,_lastWatchTime:0,_lastCompleteTime:0},isWhiteList:!1,roomidList:[]}},OtherTasks:{groupSign:{enabled:!1,_lastCompleteTime:0},silverToCoin:{enabled:!1,_lastCompleteTime:0},coinToSilver:{enabled:!1,num:1,_lastCompleteTime:0},getYearVipPrivilege:{enabled:!1,_nextReceiveTime:0}}},EnhanceExperience:{switchLiveStreamQuality:{enabled:!1,qualityDesc:"原画"},banp2p:{enabled:!1},noReport:{enabled:!1},noSleep:{enabled:!1}},RemoveElement:{removePKBox:{enabled:!1},removeLiveWaterMark:{enabled:!1},removeShopPopover:{enabled:!1},removeGameParty:{enabled:!1}}},cache:{lastAliveHeartBeatTime:0}};class w{static mergeConfigs(e,t){const o=i.difference(i.keys(e),i.keys(t));e=i.omit(e,o);const s=i.difference(i.keys(t),i.keys(e));i.assign(e,i.pick(t,s));for(const[o,a]of Object.entries(e).filter((e=>!s.includes(e[0]))))i.isPlainObject(a)&&(e[o]=this.mergeConfigs(a,t[o]));return e}static setUiConfig(e){f("ui",e)}static getUiConfig(){return this.mergeConfigs(g("ui",{}),y.ui)}static setModuleConfig(e){f("modules",e)}static getModuleConfig(){return this.mergeConfigs(g("modules",{}),y.modules)}static setCache(e){f("cache",e)}static getCache(){return this.mergeConfigs(g("cache",{}),y.cache)}}const _=t.defineStore("ui",(()=>{const t=e.reactive(w.getUiConfig()),o=e.computed((()=>({MainSiteTasks:"主站任务",LiveTasks:"直播任务",OtherTasks:"其它任务"}[t.activeMenuIndex]))),s=e.reactive({top:0,left:0,height:0,width:0}),a=e.computed((()=>({top:s.top.toString()+"px",left:s.left.toString()+"px",height:s.height.toString()+"px",width:s.width.toString()+"px"}))),n=e.computed((()=>t.isShowPanel?"隐藏控制面板":"显示控制面板")),r=e.computed((()=>(s.height-60).toString()+"px"));return e.watch(t,i.debounce((e=>w.setUiConfig(e)),350)),{isShowPanelButtonText:n,activeMenuName:o,baseStyleValue:s,baseStyle:a,scrollBarHeight:r,uiConfig:t,changeCollapse:function(){t.isCollapse=!t.isCollapse},changeShowPanel:function(){t.isShowPanel=!t.isShowPanel},setActiveMenuIndex:function(e){t.activeMenuIndex=e}}})),T={class:"title"},k=(e,t)=>{const i=e.__vccOpts||e;for(const[e,o]of t)i[e]=o;return i},x=k(e.defineComponent({__name:"PanelHeader",setup(t){const i=_();return(t,s)=>{const a=e.resolveComponent("el-icon"),n=e.resolveComponent("el-text");return e.openBlock(),e.createElementBlock(e.Fragment,null,[e.createElementVNode("div",{class:"collapse-btn",onClick:s[0]||(s[0]=t=>e.unref(i).changeCollapse())},[e.unref(i).uiConfig.isCollapse?(e.openBlock(),e.createBlock(a,{key:0},{default:e.withCtx((()=>[e.createVNode(e.unref(o.Expand))])),_:1})):(e.openBlock(),e.createBlock(a,{key:1},{default:e.withCtx((()=>[e.createVNode(e.unref(o.Fold))])),_:1}))]),e.createElementVNode("div",T,[e.createVNode(n,{tag:"b",class:"header-big-text"},{default:e.withCtx((()=>[e.createTextVNode("控制面板")])),_:1}),e.createVNode(n,{class:"header-small-text"},{default:e.withCtx((()=>[e.createTextVNode(e.toDisplayString(e.unref(i).activeMenuName),1)])),_:1})])],64)}}}),[["__scopeId","data-v-dda95e10"]]),b=e.defineComponent({__name:"PanelAside",setup(t){const i=_(),o=[{icon:"Tasks",title:"每日任务",index:"DailyTasks",subs:[{title:"主站任务",index:"MainSiteTasks"},{title:"直播任务",index:"LiveTasks"},{title:"其它任务",index:"OtherTasks"}]},{icon:"Monitor",title:"体验优化",index:"EnhanceExperience"},{icon:"Scissor",title:"移除元素",index:"RemoveElement"}];return(t,s)=>{const a=e.resolveComponent("el-icon"),n=e.resolveComponent("el-menu-item"),r=e.resolveComponent("el-sub-menu"),l=e.resolveComponent("el-menu");return e.openBlock(),e.createBlock(l,{"default-active":e.unref(i).uiConfig.activeMenuIndex,style:e.normalizeStyle({"min-height":e.unref(i).scrollBarHeight}),collapse:e.unref(i).uiConfig.isCollapse,"unique-opened":"",onSelect:e.unref(i).setActiveMenuIndex,id:"aside-el-menu"},{default:e.withCtx((()=>[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(o,(t=>(e.openBlock(),e.createElementBlock(e.Fragment,null,[t.subs?(e.openBlock(),e.createBlock(r,{index:t.index,key:t.index},{title:e.withCtx((()=>[e.createVNode(a,null,{default:e.withCtx((()=>[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(t.icon)))])),_:2},1024),e.createElementVNode("span",null,e.toDisplayString(t.title),1)])),default:e.withCtx((()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.subs,(t=>(e.openBlock(),e.createBlock(n,{key:t.index,index:t.index},{default:e.withCtx((()=>[e.createTextVNode(e.toDisplayString(t.title),1)])),_:2},1032,["index"])))),128))])),_:2},1032,["index"])):(e.openBlock(),e.createBlock(n,{index:t.index,key:t.index},{title:e.withCtx((()=>[e.createTextVNode(e.toDisplayString(t.title),1)])),default:e.withCtx((()=>[e.createVNode(a,null,{default:e.withCtx((()=>[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(t.icon)))])),_:2},1024)])),_:2},1032,["index"]))],64)))),64))])),_:1},8,["default-active","style","collapse","onSelect"])}}}),C=t.defineStore("bili",(()=>{const t=e.ref(),i=e.ref(),o=e.ref(),s=e.ref(),a=e.ref(),n=e.ref(),r=e.ref(),l=e.computed((()=>r.value?r.value.filter((e=>0!==e.room_info.room_id)):null));return{BilibiliLive:t,userInfo:o,giftConfig:s,cookies:i,dailyRewardInfo:a,dynamicVideos:n,fansMedals:r,filteredFansMedals:l}}));let V=class{constructor(e,t){h(this,"url_prefix"),h(this,"origin"),this.url_prefix=e??"",this.origin=t??"https://bilibili.com"}get(e,t,o){return new Promise(((s,a)=>{const n={method:"GET",url:this.url_prefix+e+(t?"?"+new URLSearchParams(t).toString():""),responseType:"json",headers:{Accept:"application/json, text/plain, */*",Referer:this.origin,Origin:this.origin,"Sec-Fetch-Site":"same-site"},onload:function(e){s(e.response)},onerror:function(e){a(e)}},r=i.defaultsDeep(o,n);p(r)}))}post(e,t,o){return new Promise(((s,a)=>{const n={method:"POST",url:this.url_prefix.concat(e),data:new URLSearchParams(t).toString(),responseType:"json",headers:{Accept:"application/json, text/plain, */*",Referer:this.origin,Origin:this.origin,"Sec-Fetch-Site":"same-site","Content-Type":"application/x-www-form-urlencoded"},onload:function(e){s(e.response)},onerror:function(e){a(e)}},r=i.defaultsDeep(o,n);"multipart/form-data"===r.headers["Content-Type"]&&delete r.headers["Content-Type"],p(r)}))}};function S(e){return new Promise((t=>setTimeout(t,e)))}function P(e){const t=new FormData;return i.forEach(e,((e,i)=>t.append(i,e.toString()))),t}function N(e,t,o){i.forOwn(e,(function(e,s){const a=o?o+"."+s:s;i.isPlainObject(e)&&!i.isEmpty(e)?N(e,t,a):t(e,a)}))}function B(e){switch(e){case"document-start":return Promise.resolve();case"document-head":return new Promise((e=>{if(document.head)e();else{const t=new MutationObserver((()=>{document.head&&(t.disconnect(),e())}));t.observe(document.documentElement,{childList:!0})}}));case"document-body":return new Promise((e=>{if(document.body)e();else{const t=new MutationObserver((()=>{document.body&&(t.disconnect(),e())}));t.observe(document.documentElement,{childList:!0})}}));case"document-end":return new Promise((e=>{"loading"!==document.readyState?e():document.addEventListener("DOMContentLoaded",(()=>e()))}));case"window-load":return new Promise((e=>{"complete"===document.readyState?e():window.addEventListener("load",(()=>e()))}));default:return Promise.reject("Illegal moment")}}function D(e,t=0,i=5){const o=s.DateTime.fromMillis(e),a=s.DateTime.now().set({hour:t,minute:i,second:0,millisecond:0}),n=a.plus({days:1}),r=a.minus({days:1});return s.DateTime.now()>=a?o>=a&&o=r&&oo&&(o=o.plus({days:1}));const a=o.diff(i);return{ms:a.toMillis(),str:a.toFormat("h小时m分钟s秒").replace(/^0小时/,"").replace(/^0分钟/,"")}}function I(e,t,i,o){const a=s.DateTime.now(),n=s.DateTime.local(a.year,a.month,a.day,e,t),r=s.DateTime.local(a.year,a.month,a.day,i,o);return a>=n&&aR.live.get("/xlive/web-room/v1/giftPanel/roomGiftConfig",{platform:o,room_id:e,area_parent_id:t,area_id:i}),doSign:()=>R.live.get("/xlive/web-ucenter/v1/sign/DoSign"),getSignInfo:()=>R.live.get("/xlive/web-ucenter/v1/sign/WebGetSignInfo"),fansMedalPanel:(e,t=10)=>R.live.get("/xlive/app-ucenter/v1/fansMedal/panel",{page:e,page_size:t},{Origin:"https://link.bilibili.com",Referer:"https://link.bilibili.com/p/center/index"}),sendMsg:(e,t,i=0,o=1,s=0,a=25,n=16777215,r=0)=>{const l=C().cookies.bili_jct;return R.live.post("/msg/send",void 0,{data:P({roomid:t,room_type:i,rnd:L(),msg:e,mode:o,jumpfrom:s,fontsize:a,csrf:l,csrf_token:l,color:n,bubble:r}),headers:{"Content-Type":"multipart/form-data"}})},likeReport:(e,t,i=1)=>{const o=C().cookies.bili_jct;return R.live.post("/xlive/app-ucenter/v1/like_info_v3/like/likeReportV3",{click_time:i,room_id:e,anchor_id:t,uid:t,ts:L(),csrf:o})},getInfoByRoom:e=>R.live.get("/xlive/web-room/v1/index/getInfoByRoom",{room_id:e}),getUserTaskProgress:(e=11153765)=>{const t=C().cookies.bili_jct;return R.live.get("/xlive/app-ucenter/v1/userTask/GetUserTaskProgress",{target_id:e,csrf:t,ts:L()})},userTaskReceiveRewards:(e=11153765)=>{const t=C().cookies.bili_jct;return R.live.post("/xlive/app-ucenter/v1/userTask/UserTaskReceiveRewards",{actionKey:"csrf",target_id:e,csrf:t,ts:L()})},silver2coin:(e="")=>{const t=C().cookies.bili_jct;return R.live.post("/xlive/revenue/v1/wallet/silver2coin",{csrf:t,csrf_token:t,visit_id:e})},coin2silver:(e,t="pc",i="")=>{const o=C().cookies.bili_jct;return R.live.post("/xlive/revenue/v1/wallet/coin2silver",{num:e,csrf:o,csrf_token:o,platform:t,visit_id:i})}},O={E:(e,t,i,o=0,s=[],a="")=>{const n=C().cookies.bili_jct;return R.liveTrace.post("/xlive/data-interface/v1/x25Kn/E",{id:JSON.stringify(e),device:JSON.stringify(t),ruid:i,ts:E(),is_patch:o,heart_beat:JSON.stringify(s),ua:navigator.userAgent,csrf_token:n,csrf:n,visit_id:a})},X:(e,t,i,o,s,a,n,r,l="")=>{const c=C().cookies.bili_jct;return R.liveTrace.post("/xlive/data-interface/v1/x25Kn/X",{s:e,id:JSON.stringify(t),device:JSON.stringify(i),ruid:o,ets:s,benchmark:a,time:n,ts:r,ua:navigator.userAgent,csrf_token:c,csrf:c,visit_id:l})}},$={nav:()=>R.main.get("/x/web-interface/nav"),reward:()=>R.main.get("/x/member/web/exp/reward"),dynamicAll:(e,t=1,i=-480,o="itemOpusStyle")=>R.main.get("/x/polymer/web-dynamic/v1/feed/all",{timezone_offset:i,type:e,page:t,features:o}),videoHeartbeat:(e,t="",i=0,o=0,s=0,a="https://t.bilibili.com/?spm_id_from=444.3.0.0",n=116,r=100,l=3,c=0,d=0,u=2,h=0,m=0,g="333.488.0.0",f="333.31.list.card_archive.click",p='{"player_version":"4.1.21-rc.1727.0"}')=>{var v;const y=C();return R.main.post("/x/click-interface/web/heartbeat",{start_ts:L(),mid:null==(v=C().userInfo)?void 0:v.mid,aid:e,cid:t,type:l,sub_type:c,dt:u,play_type:d,realtime:i,played_time:o,real_played_time:s,refer_url:a,quality:n,video_duration:r,last_play_progress_time:h,max_play_progress_time:m,spmid:g,from_spmid:f,extra:p,csrf:y.cookies.bili_jct})},share:(e,t="pc_client_normal",i=2,o=0,s=1)=>{const a=C().cookies.bili_jct;return R.main.post("/x/web-interface/share/add",{aid:e,eab_x:i,ramval:o,source:t,ga:s,csrf:a})},coinAdd:(e,t,i=0,o=!0,s=2,a=6,n="web_normal",r=1)=>{const l=C().cookies.bili_jct;return R.main.post("/x/web-interface/coin/add ",{aid:e,multiply:t,select_like:i,cross_domain:o,eab_x:s,ramval:a,source:n,ga:r,csrf:l})},videoRelation:(e,t="")=>R.main.get("/x/web-interface/archive/relation",{aid:e,bvid:t}),vip:{myPrivilege:()=>{const e=C().cookies.bili_jct;return R.main.get("/x/vip/privilege/my",{csrf:e},{headers:{Referer:"https://account.bilibili.com/account/big/myPackage",Origin:"https://account.bilibili.com/account/big/myPackage"}})},receivePrivilege:(e,t="web")=>{const i=C().cookies.bili_jct;return R.main.post("/x/vip/privilege/receive",{type:e,platform:t,csrf:i},{headers:{Referer:"https://account.bilibili.com/account/big/myPackage",Origin:"https://account.bilibili.com/account/big/myPackage"}})}}},U={myGroups:(e=0,t="web")=>R.vc.get("/link_group/v1/member/my_groups",{build:e,mobi_app:t}),signIn:(e,t)=>R.vc.get("/link_setting/v1/link_setting/sign_in",{group_id:e,owner_id:t})};class j{constructor(e){h(this,"NAME","BLTH"),h(this,"prefix_title_str"),h(this,"title"),this.title=e,this.prefix_title_str=e.split("_").join("][")}get prefix(){return[`%c${this.NAME}%c[${(new Date).toLocaleString()}]%c[${this.prefix_title_str}]%c:`,"font-weight: bold; color: white; background-color: #23ade5; padding: 1px 4px; border-radius: 4px;","font-weight: bold; color: #0920e6;","font-weight: bold;",""]}log(...e){console.log(...this.prefix,...e)}error(...e){console.error(...this.prefix,...e)}warn(...e){console.warn(...this.prefix,...e)}}class H{constructor(e){h(this,"moduleName"),h(this,"logger"),h(this,"moduleStore",Ee()),h(this,"config"),this.moduleName=e,this.logger=new j(this.moduleName)}set status(e){throw new Error("Method not implemented.")}run(){throw new Error("Method not implemented.")}}h(H,"runMultiple",!1),h(H,"runAt","document-body"),h(H,"onFrame","target"),h(H,"runAfterDefault",!0);class z extends H{run(){throw new Error("Method not implemented.")}}h(z,"runAt","document-body"),h(z,"onFrame","target");const q=Object.freeze(Object.defineProperty({__proto__:null,Default_BilibiliLive:class extends z{getBilibiliLive(){return this.logger.log("unsafeWindow.BilibiliLive",v.BilibiliLive),new Promise((e=>{0===v.BilibiliLive.UID?v.BilibiliLive=new Proxy(v.BilibiliLive,{set:(t,i,o)=>(t[i]=o,"UID"===i&&0!==v.BilibiliLive.UID&&(e(v.BilibiliLive),v.BilibiliLive=t),!0)}):e(v.BilibiliLive)}))}async run(){C().BilibiliLive=await this.getBilibiliLive()}},Default_Cookies:class extends z{getCookies(){return function(e){const t={};for(const i of e)t[i]=null;for(const i of document.cookie.split("; ")){for(let o=0;oe.enabled&&!D(e._lastCompleteTime))))return Promise.resolve(null);try{const e=await $.reward();return this.logger.log("BAPI.main.reward response",e),0===e.code?Promise.resolve(e.data):(this.logger.error("获取主站每日任务完成情况失败",e.message),Promise.reject(e.message))}catch(e){return this.logger.error("获取主站每日任务完成情况出错",e),Promise.reject(e)}}async run(){const e=C();e.dailyRewardInfo=await this.getDailyRewardInfo(),setTimeout((async()=>{e.dailyRewardInfo=await this.getDailyRewardInfo()}),M(0,4).ms)}},Default_DynamicVideos:class extends z{async getDynamicVideos(){const e=this.moduleStore.moduleConfig.DailyTasks.MainSiteTasks;if(!Object.entries(e).filter((([e])=>["watch","share","coin"].includes(e))).some((e=>e[1].enabled&&!D(e[1]._lastCompleteTime))))return Promise.resolve(null);try{const e=await $.dynamicAll("video");return this.logger.log("BAPI.main.dynamicAll response",e),0===e.code?Promise.resolve(e.data.items):(this.logger.error("获取主站每日任务完成情况失败",e.message),Promise.reject(e.message))}catch(e){return this.logger.error("获取主站每日任务完成情况出错",e),Promise.reject(e)}}async run(){const e=C();e.dynamicVideos=await this.getDynamicVideos(),setTimeout((async()=>{e.dynamicVideos=await this.getDynamicVideos()}),M(0,4).ms)}},Default_FansMetals:class extends z{async getFansMetals(e=10,t=!1){const i=this.moduleStore.moduleConfig.DailyTasks.LiveTasks.medalTasks;if(!t&&!Object.entries(i).filter((([e])=>["danmu","like","watch"].includes(e))).some((e=>e[1].enabled&&!D(e[1]._lastCompleteTime))))return Promise.resolve(null);{const t=[];let i=1;try{const o=await A.fansMedalPanel(1);if(this.logger.log("BAPI.live.fansMedalPanel(1) response",o),0!==o.code)return this.logger.error("获取粉丝勋章列表第1页失败",o.message),Promise.reject(o.message);i=o.data.page_info.total_page,t.push(...o.data.special_list,...o.data.list);for(let s=2;s<=Math.min(i,e);s++){const e=await A.fansMedalPanel(s);if(this.logger.log(`BAPI.live.fansMedalPanel(${s}) response`,e),0!==o.code)return this.logger.error(`获取粉丝勋章列表第${s}页失败`,o.message),t;t.push(...e.data.list),await S(250)}return Promise.resolve(t)}catch(e){return this.logger.error("获取粉丝勋章列表出错",e),Promise.reject(e)}}}async run(){const e=C();e.fansMedals=await this.getFansMetals(),setTimeout((async()=>{e.fansMedals=await this.getFansMetals()}),M(0,4).ms),Ee().emitter.on("Default_FansMedals",(async()=>{e.fansMedals=await this.getFansMetals(10,!0)}))}},Default_UserInfo:class extends z{async getUserInfo(){try{const e=await $.nav();return this.logger.log("BAPI.main.nav response",e),0===e.code?Promise.resolve(e.data):(this.logger.error("获取用户信息失败",e.message),Promise.reject(e.message))}catch(e){return this.logger.error("获取用户信息出错",e),Promise.reject(e)}}async run(){const e=C();e.userInfo=await this.getUserInfo(),setTimeout((async()=>{e.userInfo=await this.getUserInfo()}),M(0,4).ms)}}},Symbol.toStringTag,{value:"Module"}));const F=document.querySelector.bind(document);document.querySelectorAll.bind(document);const G=document.createElement.bind(document),K=()=>v.self===v.top;class W{constructor(e,t,i,o,s,a=!1){h(this,"logger",new j("RoomHeart")),h(this,"config"),h(this,"isLast"),h(this,"watchedSeconds"),h(this,"timer"),h(this,"stop",!1),h(this,"areaID"),h(this,"parentID"),h(this,"roomID"),h(this,"ruid"),h(this,"seq",0),h(this,"buvid",(null==(d=C().cookies)?void 0:d.LIVE_BUVID)??function(e){const t=e+"=";for(const e of document.cookie.split("; "))if(e.startsWith(t)){const i=e.substring(t.length);return decodeURIComponent(i)}return null}("LIVE_BUVID")),h(this,"uuid","xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,(function(e){const t=16*Math.random()|0;return("x"===e?t:3&t|8).toString(16)}))),h(this,"device",[this.buvid,this.uuid]),h(this,"ua",navigator.userAgent),h(this,"heartBeatInterval"),h(this,"secretKey"),h(this,"secretRule"),h(this,"timestamp"),this.roomID=e,this.areaID=t,this.parentID=i,this.ruid=o,this.watchedSeconds=s,this.isLast=a,this.config=Ee().moduleConfig.DailyTasks.LiveTasks.medalTasks.watch}set status(e){Ee().moduleStatus.DailyTasks.LiveTasks.medalTasks.watch=e}get id(){return[this.parentID,this.areaID,this.seq,this.roomID]}start(){if(this.buvid)return this.timer=setTimeout((()=>this.stop=!0),M(0,0).ms),this.E();this.logger.error(`缺少buvid,无法为直播间 ${this.roomID} 执行观看直播任务,请尝试刷新页面`)}async E(){if(this.stop)this.status="";else try{const e=await O.E(this.id,this.device,this.ruid);this.logger.log(`BAPI.liveTrace.E(${this.id}, ${this.device}, ${this.ruid}) response`,e),0===e.code?(this.seq+=1,({heartbeat_interval:this.heartBeatInterval,secret_key:this.secretKey,secret_rule:this.secretRule,timestamp:this.timestamp}=e.data),setTimeout((()=>this.X()),1e3*this.heartBeatInterval)):this.logger.error(`BAPI.liveTrace.E(${this.id}, ${this.device}, ${this.ruid}) 失败`,e.message)}catch(e){this.logger.error(`BAPI.liveTrace.E(${this.id}, ${this.device}, ${this.ruid}) 出错`,e)}}async X(){if(this.stop)this.status="";else try{const e={id:JSON.stringify(this.id),device:JSON.stringify(this.device),ets:this.timestamp,benchmark:this.secretKey,time:this.heartBeatInterval,ts:E(),ua:this.ua},t=this.sypder(JSON.stringify(e),this.secretRule),i=await O.X(t,this.id,this.device,this.ruid,this.timestamp,this.secretKey,this.heartBeatInterval,e.ts);if(this.logger.log(`BAPI.liveTrace.X(${t}, ${this.id}, ${this.device}, ${this.ruid}, ${this.timestamp}, ${this.secretKey}, ${this.heartBeatInterval}, ${e.ts}) response`,i),0===i.code){if(this.seq+=1,this.watchedSeconds+=this.heartBeatInterval,this.isLast&&(this.config._watchedSecondsToday=this.watchedSeconds),this.watchedSeconds>=60*this.config.time)return this.isLast&&(this.config._lastCompleteTime=E(),this.logger.log("观看直播任务已完成"),this.status="done"),void clearTimeout(this.timer);({heartbeat_interval:this.heartBeatInterval,secret_key:this.secretKey,secret_rule:this.secretRule,timestamp:this.timestamp}=i.data),setTimeout((()=>this.X()),1e3*this.heartBeatInterval)}else this.logger.error(`BAPI.liveTrace.X(${t}, ${this.id}, ${this.device}, ${this.ruid}, ${this.timestamp}, ${this.secretKey}, ${this.heartBeatInterval}) 失败`,i.message)}catch(e){this.logger.error(`BAPI.liveTrace.X(s, ${this.id}, ${this.device}, ${this.ruid}, ${this.timestamp}, ${this.secretKey}, ${this.heartBeatInterval}) 出错`,e)}}sypder(e,t){const i=JSON.parse(e),[o,s,n,r]=JSON.parse(i.id),[l,c]=JSON.parse(i.device),d=i.benchmark,u={platform:"web",parent_id:o,area_id:s,seq_id:n,room_id:r,buvid:l,uuid:c,ets:i.ets,time:i.time,ts:i.ts};let h=JSON.stringify(u);for(const e of t)switch(e){case 0:default:h=a.HmacMD5(h,d).toString(a.enc.Hex);break;case 1:h=a.HmacSHA1(h,d).toString(a.enc.Hex);break;case 2:h=a.HmacSHA256(h,d).toString(a.enc.Hex);break;case 3:h=a.HmacSHA224(h,d).toString(a.enc.Hex);break;case 4:h=a.HmacSHA512(h,d).toString(a.enc.Hex);break;case 5:h=a.HmacSHA384(h,d).toString(a.enc.Hex)}return h}}class X extends H{constructor(){super(...arguments),h(this,"medalTasksConfig",this.moduleStore.moduleConfig.DailyTasks.LiveTasks.medalTasks),h(this,"config",this.medalTasksConfig.watch)}set status(e){this.moduleStore.moduleStatus.DailyTasks.LiveTasks.medalTasks.watch=e}getRoomidUidList(){const e=C();return e.filteredFansMedals?e.filteredFansMedals.filter((e=>e.medal.level<20&&(this.medalTasksConfig.isWhiteList?this.medalTasksConfig.roomidList.includes(e.room_info.room_id):!this.medalTasksConfig.roomidList.includes(e.room_info.room_id)))).map((e=>[e.room_info.room_id,e.medal.target_id])).slice(0,100):null}async getAreaInfo(e){try{const t=await A.getInfoByRoom(e);if(this.logger.log(`BAPI.live.getInfoByRoom(${e}) response`,t),0===t.code){const e=t.data.room_info;return[e.area_id,e.parent_area_id]}return null}catch(t){return this.logger.error(`获取指定直播间的 area_id 和 parent_area_id(roomid = ${e}) 出错`,t),null}}async run(){if(this.logger.log("观看直播模块开始运行"),this.config.enabled)if(D(this.config._lastCompleteTime))I(0,0,0,5)?this.logger.log("昨天的观看直播任务已经完成过了,等到今天的00:05再执行"):(this.logger.log("今天已经完成过观看直播任务了"),this.status="done");else{this.status="running",D(this.config._lastWatchTime,0,0)?this.config._watchedSecondsToday-=this.config._watchedSecondsToday%300:this.config._watchedSecondsToday=0,this.config._lastWatchTime=E();const e=this.getRoomidUidList();if(e)if(0===e.length)this.status="done",this.config._lastCompleteTime=E();else for(let t=0;te>0))&&new W(i,s[0],s[1],o,this.config._watchedSecondsToday,t===e.length-1).start(),await S(3e3)}}const e=M();setTimeout((()=>this.run()),e.ms),this.logger.log("距离观看直播模块下次运行时间:",e.str)}}h(X,"runAt","window-load");class J extends H{constructor(){super(...arguments),h(this,"config",this.moduleStore.moduleConfig.EnhanceExperience.switchLiveStreamQuality)}async waitForPlayer(){return new Promise(((e,t)=>{const i=v.top?v.top:v,o=setInterval((()=>{i.livePlayer&&Object.prototype.hasOwnProperty.call(i.livePlayer,"switchQuality")&&Object.prototype.hasOwnProperty.call(i.livePlayer,"getPlayerInfo")&&(clearInterval(o),clearTimeout(s),e(i.livePlayer))}),200),s=setTimeout((()=>{clearInterval(o),clearTimeout(s),t()}),1e4)}))}async switchQuality(e){const t=e.getPlayerInfo();if(0===t.liveStatus)this.logger.log("当前直播间未开播");else{const i=()=>{const i=t.qualityCandidates.find((({desc:e})=>e===this.config.qualityDesc));i&&t.quality!==i.qn&&(e.switchQuality(i.qn),this.logger.log(`已将画质切换为${this.config.qualityDesc}`,i))};setTimeout((()=>i()),K()?2500:5e3)}}async run(){if(this.logger.log("自动切换画质模块开始运行"),this.config.enabled)try{const e=await this.waitForPlayer();this.switchQuality(e)}catch(e){this.logger.error("等待播放器超时")}}}h(J,"runMultiple",!0),h(J,"runAt","window-load"),h(J,"runAfterDefault",!1);class Q extends H{constructor(){super(...arguments),h(this,"config",this.moduleStore.moduleConfig.EnhanceExperience.banp2p)}async banP2P(){var e;const t=["RTCPeerConnection","mozRTCPeerConnection","webkitRTCPeerConnection"];for(const i of t)Object.prototype.hasOwnProperty.call(v,i)&&(null==(e=Object.getOwnPropertyDescriptor(v,i))?void 0:e.configurable)&&Object.defineProperty(v,i,{value:function(){this.addEventListener=function(){},this.removeEventListener=function(){},this.createDataChannel=function(){return{close:function(){}}},this.createOffer=function(){return Promise.resolve()},this.setLocalDescription=function(){return Promise.resolve()},this.close=function(){},this.setRemoteDescription=function(){return Promise.resolve()},this.createAnswer=function(){}},enumerable:!1,writable:!1,configurable:!1})}async run(){if(this.logger.log("禁用P2P模块开始运行"),this.config.enabled)try{await this.banP2P()}catch(e){this.logger.error("禁用P2P失败",e)}}}h(Q,"runMultiple",!0),h(Q,"runAt","document-start"),h(Q,"onFrame","all"),h(Q,"runAfterDefault",!1);var Y=["load","loadend","timeout","error","readystatechange","abort"],Z="__origin_xhr";function ee(e,t){var i={};for(var o in e)i[o]=e[o];return i.target=i.currentTarget=t,i}var te=Y[0],ie=Y[1],oe=Y[2],se=Y[3],ae=Y[4],ne=Y[5],re="prototype";function le(e,t){return function(e,t){var i=e.onRequest,o=e.onResponse,s=e.onError;function a(e,t){var i,s=new ge(e),a=function(){var e=t.responseType;return e&&"text"!==e?"json"===e&&"object"==typeof JSON&&-1!==((navigator||0).userAgent||"").indexOf("Trident")?JSON.parse(t.responseText):t.response:t.responseText},n={get response(){return a&&(i=a(),a=null),i},set response(e){return a=null,i=e,!0},status:t.status,statusText:t.statusText,config:e.config,headers:e.resHeader||e.getAllResponseHeaders().split("\r\n").reduce((function(e,t){if(""===t)return e;var i=t.split(":");return e[i.shift()]=function(e){return e.replace(/^\s+|\s+$/g,"")}(i.join(":")),e}),{})};if(!o)return s.resolve(n);o(n,s)}function n(e,t,i,o){var a=new fe(e);i={config:e.config,error:i,type:o},s?s(i,a):a.next(i)}function r(){return!0}function l(e){return function(t,i){return n(t,this,i,e),!0}}function c(e,t){return 4===e.readyState&&0!==e.status?a(e,t):4!==e.readyState&&de(e,ae),!0}var{originXhr:d,unHook:u}=function(e,t){var i=(t=t||window).XMLHttpRequest,o=function(){for(var e=new i,t=0;t(e.onRequest&&_e.push(e.onRequest),e.onResponse&&Te.push(e.onResponse),we||((e=>{e.fetch=async(e,t)=>{for(const i of _e){const o=new ve;if(i.apply(v,[{input:e,init:t},o]),o._resolve)return o._resolve;if(o._error)throw o._error;if(!o._next)break;e=o._input,t=o._init}let i=await pe.apply(v,[e,t]);for(const e of Te){const t=new ye;if(e.apply(v,[i,t]),t._resolve)return t._resolve;if(t._error)throw t._error;if(!t._next)break;i=t._response}return i}})(t),we=!0),{unProxy:()=>{e.onRequest&&_e.splice(_e.findIndex((t=>t===e.onRequest)),1),e.onResponse&&Te.splice(Te.findIndex((t=>t===e.onResponse)),1)},unHook:()=>{t.fetch=pe,_e=[],Te=[]},originFetch:pe}),xe=class e extends H{constructor(){super(...arguments),h(this,"config",this.moduleStore.moduleConfig.EnhanceExperience.noReport)}static isTargetURL(e){return!(!e.includes("//data.bilibili.com")&&!e.includes("//data.bilivideo.com"))}hookProperties(e){Object.defineProperty(e.navigator,"sendBeacon",{value:()=>!0}),Object.defineProperties(e,{reportObserver:{get:()=>({reportCustomData:function(){}}),set(){}},reportConfig:{get:()=>({}),set(){}}})}async ajaxHook(){const t={onRequest:(t,i)=>{e.isTargetURL(t.url)?i.resolve({config:t,status:200,headers:{"Content-Type":"text/plain; charset=utf-8"},response:"ok"}):i.next(t)}},i={onRequest(t,i){const o="string"==typeof(s=t.input)?s:s instanceof URL?s.toString():s instanceof Request?s.url:"Incorrect input";var s;e.isTargetURL(o)?i.resolve(new Response("ok")):i.next(t)},onResponse(e,t){t.next(e)}};this.hookProperties(v),le(t,v),ke(i,v)}async run(){if(this.logger.log("拦截日志数据上报模块开始运行"),this.config.enabled)try{await this.ajaxHook()}catch(e){this.logger.error("拦截日志数据上报失败",e)}}};h(xe,"runMultiple",!0),h(xe,"runAt","document-start"),h(xe,"onFrame","all"),h(xe,"runAfterDefault",!1);let be=xe;class Ce extends H{constructor(){super(...arguments),h(this,"config",this.moduleStore.moduleConfig.EnhanceExperience.noSleep)}async run(){this.logger.log("屏蔽挂机检测模块开始运行"),this.config.enabled&&setInterval((()=>{document.dispatchEvent(new MouseEvent("mousemove"))}),3e5)}}h(Ce,"runMultiple",!0),h(Ce,"runAt","window-load"),h(Ce,"runAfterDefault",!1);class Ve extends H{constructor(){super(...arguments),h(this,"config",this.moduleStore.moduleConfig.RemoveElement.removePKBox)}removePKNode(){m("#awesome-pk-vm { display: none !important }")}removePKToast(){const e=["主播即将结束PK","连线断开中"];new MutationObserver((t=>{for(const i of t)i.addedNodes.forEach((t=>{t instanceof HTMLElement&&t.classList.contains("link-toast")&&e.some((e=>{var i;return null==(i=t.textContent)?void 0:i.includes(e)}))&&(t.style.display="none")}))})).observe(document.body,{childList:!0})}async run(){this.logger.log("移除大乱斗元素模块开始运行"),this.config.enabled&&(this.removePKNode(),this.removePKToast())}}h(Ve,"runMultiple",!0);class Se extends H{constructor(){super(...arguments),h(this,"config",this.moduleStore.moduleConfig.RemoveElement.removeLiveWaterMark)}async run(){this.logger.log("移除直播间水印模块开始运行"),this.config.enabled&&m(".web-player-icon-roomStatus { display: none !important }")}}h(Se,"runMultiple",!0);class Pe extends H{constructor(){super(...arguments),h(this,"config",this.moduleStore.moduleConfig.RemoveElement.removeShopPopover)}async run(){this.logger.log("移除直播间小黄车弹窗模块开始运行"),this.config.enabled&&m(".shop-popover { display: none !important }")}}h(Pe,"runMultiple",!0);class Ne extends H{constructor(){super(...arguments),h(this,"config",this.moduleStore.moduleConfig.RemoveElement.removeGameParty)}async run(){this.logger.log("移除直播间幻星派对标志模块开始运行"),this.config.enabled&&m("#game-id { display: none !important }")}}h(Ne,"runMultiple",!0);const Be=Object.freeze(Object.defineProperty({__proto__:null,DailyTask_LiveTask_AppUserTask:class extends H{constructor(){super(...arguments),h(this,"config",this.moduleStore.moduleConfig.DailyTasks.LiveTasks.appUser)}set status(e){this.moduleStore.moduleStatus.DailyTasks.LiveTasks.appUser=e}async getUserTaskProgress(){try{const e=await A.getUserTaskProgress();return this.logger.log("BAPI.live.getUserTaskProgress response",e),0===e.code?e.data:(this.logger.error("获取APP用户任务进度失败",e.message),this.status="error",null)}catch(e){return this.logger.error("获取APP用户任务进度出错",e),this.status="error",null}}async userTaskReceiveRewards(){try{const e=await A.userTaskReceiveRewards();return this.logger.log("BAPI.live.userTaskReceiveRewards response",e),0===e.code?e.data:(this.logger.error("获取APP用户任务进度失败",e.message),this.status="error",null)}catch(e){return this.logger.error("获取APP用户任务进度出错",e),this.status="error",null}}async sendDanmu(e,t){try{const i=await A.sendMsg(e,t);this.logger.log(`BAPI.live.sendMsg(${e}, ${t})`,i),0===i.code?this.logger.log(`在直播间 ${t} 发送弹幕 ${e} 成功`):this.logger.error(`在直播间 ${t} 发送弹幕 ${e} 失败`,i.message)}catch(i){this.logger.error(`在直播间 ${t} 发送弹幕 ${e} 出错`,i)}}async run(){if(this.logger.log("APP用户任务模块开始运行"),this.logger.warn("APP用户任务暂时没有,该模块不运行"),this.config.enabled=!1,this.config.enabled)if(D(this.config._lastCompleteTime))I(0,0,0,5)?this.logger.log("昨天的APP用户任务已经完成过了,等到今天的00:05再执行"):(this.logger.log("今天已经完成过APP用户任务了"),this.status="done");else{this.status="running";const e=this.moduleStore.moduleConfig.DailyTasks.LiveTasks.medalTasks.danmu;e.enabled&&!D(e._lastCompleteTime)&&await function(e,t=-1){return new Promise((i=>{Ee().emitter.once(e,(e=>i(e))),-1!==t&&setTimeout(i,t)}))}("DailyTask_LiveTask_AppUserTask",3e5);const t=await this.getUserTaskProgress();if(t)if(-1!==t.is_surplus)if(3===t.day_task.status)this.config._lastCompleteTime=E(),this.status="done";else if(2===t.day_task.status){const e=await this.userTaskReceiveRewards();if(e){const t=e.num;t?this.logger.log(`领取奖励成功:${t}个电池`):this.logger.warn("领取奖励失败:未领取到电池"),this.config._lastCompleteTime=E(),this.status="done"}}else{let e=t.day_task.target-t.day_task.progress;for(;e>0;)await this.sendDanmu(`打卡${e}`,22474988),await S(2e3),e--;const i=await this.userTaskReceiveRewards();if(i){const e=i.num;e?this.logger.log(`领取奖励成功:${e}个电池`):this.logger.warn("领取奖励失败:未领取到电池"),this.config._lastCompleteTime=E(),this.status="done"}}else this.logger.log("今天APP用户任务的奖励已经没有了,明天早点来吧"),this.config._lastCompleteTime=E(),this.status="done"}const e=M();setTimeout((()=>this.run()),e.ms),this.logger.log("距离APP用户任务模块下次运行时间:",e.str)}},DailyTask_LiveTask_DanmuTask:class extends H{constructor(){super(...arguments),h(this,"medalTasksConfig",this.moduleStore.moduleConfig.DailyTasks.LiveTasks.medalTasks),h(this,"config",this.medalTasksConfig.danmu)}set status(e){this.moduleStore.moduleStatus.DailyTasks.LiveTasks.medalTasks.danmu=e}getRoomidList(){const e=C();return e.filteredFansMedals?e.filteredFansMedals.filter((e=>e.medal.level<20&&910884!=e.room_info.room_id&&(this.medalTasksConfig.isWhiteList?this.medalTasksConfig.roomidList.includes(e.room_info.room_id):!this.medalTasksConfig.roomidList.includes(e.room_info.room_id)))).map((e=>e.room_info.room_id)).slice(0,100):(this.status="error",null)}async sendDanmu(e,t){try{const i=await A.sendMsg(e,t);this.logger.log(`BAPI.live.sendMsg(${e}, ${t})`,i),0===i.code?this.logger.log(`在直播间 ${t} 发送弹幕 ${e} 成功`):this.logger.error(`在直播间 ${t} 发送弹幕 ${e} 失败`,i.message)}catch(i){this.logger.error(`在直播间 ${t} 发送弹幕 ${e} 出错`,i)}}async run(){if(this.logger.log("发送弹幕模块开始运行"),this.config.enabled)if(D(this.config._lastCompleteTime))I(0,0,0,5)?this.logger.log("昨天的发送弹幕任务已经完成过了,等到今天的00:05再执行"):(this.logger.log("今天已经完成过发送弹幕任务了"),this.status="done");else{this.status="running";const e=this.getRoomidList();if(e){const t=this.config.list;for(let i=0;ithis.run()),e.ms),this.logger.log("距离发送弹幕模块下次运行时间:",e.str)}},DailyTask_LiveTask_LikeTask:class extends H{constructor(){super(...arguments),h(this,"medalTasksConfig",this.moduleStore.moduleConfig.DailyTasks.LiveTasks.medalTasks),h(this,"config",this.medalTasksConfig.like)}set status(e){this.moduleStore.moduleStatus.DailyTasks.LiveTasks.medalTasks.like=e}getRoomidUidList(){const e=C();return e.filteredFansMedals?e.filteredFansMedals.filter((e=>(!!this.config.includeHighLevelMedals||e.medal.level<20)&&(this.medalTasksConfig.isWhiteList?this.medalTasksConfig.roomidList.includes(e.room_info.room_id):!this.medalTasksConfig.roomidList.includes(e.room_info.room_id)))).map((e=>[e.room_info.room_id,e.medal.target_id])).slice(0,100):(this.status="error",null)}async like(e,t){try{const i=await A.likeReport(e,t);this.logger.log(`BAPI.live.likeReport(${e}, ${t})`,i),0===i.code?this.logger.log(`给主播点赞 房间号 = ${e} 主播UID = ${t} 成功`):this.logger.error(`给主播点赞 房间号 = ${e} 主播UID = ${t} 失败`,i.message)}catch(i){this.logger.error(`给主播点赞 房间号 = ${e} 主播UID = ${t} 出错`,i)}}async run(){if(this.logger.log("给主播点赞模块开始运行"),this.config.enabled)if(D(this.config._lastCompleteTime))I(0,0,0,5)?this.logger.log("昨天的给主播点赞任务已经完成过了,等到今天的00:05再执行"):(this.logger.log("今天已经完成过给主播点赞任务了"),this.status="done");else{this.status="running";const e=this.getRoomidUidList();if(e){for(const[t,i]of e)await this.like(t,i),await S(2e3);this.config._lastCompleteTime=E(),this.status="done",this.logger.log("给主播点赞任务已完成")}}const e=M();setTimeout((()=>this.run()),e.ms),this.logger.log("距离给主播点赞模块下次运行时间:",e.str)}},DailyTask_LiveTask_SignTask:class extends H{constructor(){super(...arguments),h(this,"config",this.moduleStore.moduleConfig.DailyTasks.LiveTasks.sign)}set status(e){this.moduleStore.moduleStatus.DailyTasks.LiveTasks.sign=e}async getSignInfo(){try{const e=await A.getSignInfo();return this.logger.log("BAPI.live.getSignInfo response",e),0===e.code?e.data:(this.logger.error("获取直播签到信息失败",e.message),null)}catch(e){return this.logger.error("获取直播签到信息出错",e),null}}async sign(){try{const e=await A.doSign();if(this.logger.log("BAPI.live.doSign response",e),0===e.code){this.logger.log("直播签到成功,获得奖励:",e.data.text),this.config._lastCompleteTime=E(),this.status="done",this.logger.log("直播签到任务已完成");const t=F(".checkin-btn");t&&t.remove()}else this.logger.error("直播签到失败",e.message),this.status="error"}catch(e){this.logger.error("执行直播签到任务出错",e),this.status="error"}}async run(){if(this.logger.log("直播签到模块开始运行"),this.config.enabled)if(D(this.config._lastCompleteTime))I(0,0,0,5)?this.logger.log("昨天的直播签到任务已经完成过了,等到今天的00:05再执行"):(this.logger.log("今天已经完成过直播签到任务了"),this.status="done");else{this.status="running";const e=await this.getSignInfo();e?0===e.status?await this.sign():(this.config._lastCompleteTime=E(),this.status="done"):await this.sign()}const e=M();setTimeout((()=>this.run()),e.ms),this.logger.log("距离直播签到模块下次运行时间:",e.str)}},DailyTask_LiveTask_WatchTask:X,DailyTask_MainSiteTask_CoinTask:class extends H{constructor(){super(...arguments),h(this,"config",this.moduleStore.moduleConfig.DailyTasks.MainSiteTasks.coin),h(this,"MAX_COIN",1)}set status(e){this.moduleStore.moduleStatus.DailyTasks.MainSiteTasks.coin=e}getDynamicVideoIds(){const e=C();return i.isEmpty(e.dynamicVideos)?(this.status="error",null):e.dynamicVideos.map((e=>{const t=e.modules.module_dynamic.major.archive;return{aid:t.aid,bvid:t.bvid}}))}async getVideoCoinInfo(e,t){try{const i=await $.videoRelation(e,t);return this.logger.log(`BAPI.main.videoRelation(${e}, ${t}) response`,i),0===i.code?i.data.coin:(this.logger.error(`获取视频投币信息失败 aid = ${e} bvid = ${t}`,i.message),0)}catch(i){return this.logger.error(`获取视频投币信息出错 aid = ${e} bvid = ${t}`,i),0}}async coinDynamicVideos(e){const t=this.getDynamicVideoIds();if(t)for(const{aid:i,bvid:o}of t){const t=await this.getVideoCoinInfo(i,o),s=this.MAX_COIN-t;if(s>0){const t=Math.min(s,e),o=await this.coin(i,t);if(0===o){if(0===(e-=t)){this.logger.log("每日投币任务已完成"),this.config._lastCompleteTime=E(),this.status="done";break}}else if(1===o){this.status="error";break}}}}async coin(e,t){try{const i=await $.coinAdd(e,t);return this.logger.log(`BAPI.main.coinAdd(${e}) response`,i),0===i.code?(this.logger.log(`投币成功 视频aid = ${e} 投币数量num = ${t}`),0):-104===i.code?(this.logger.warn("硬币余额不足,每日投币任务终止"),1):(this.logger.error(`投币失败 视频aid = ${e} 投币数量num = ${t}`,i.message),2)}catch(i){return this.logger.error(`投币出错 视频aid = ${e} 投币数量num = ${t}`,i),3}}async run(){if(this.logger.log("每日投币模块开始运行"),this.config.enabled){const e=C();if(D(this.config._lastCompleteTime))I(0,0,0,5)?this.logger.log("昨天的每日投币任务已经完成过了,等到今天的00:05再执行"):(this.logger.log("今天已经完成过每日投币任务了"),this.status="done");else if(this.status="running",e.dailyRewardInfo){const t=e.dailyRewardInfo.coins/10;if(t(C().userInfo.money??5)?(this.logger.log("硬币余额不足,不执行每日投币任务"),this.status="done"):await this.coinDynamicVideos(e)}else this.config._lastCompleteTime=E(),this.status="done",this.logger.log("每日投币任务已完成")}}const e=M();setTimeout((()=>this.run()),e.ms),this.logger.log("距离每日投币模块下次运行时间:",e.str)}},DailyTask_MainSiteTask_LoginTask:class extends H{constructor(){super(...arguments),h(this,"config",this.moduleStore.moduleConfig.DailyTasks.MainSiteTasks.login)}set status(e){this.moduleStore.moduleStatus.DailyTasks.MainSiteTasks.login=e}async login(){return this.logger.log("每日登录任务已完成"),this.config._lastCompleteTime=E(),this.status="done",Promise.resolve()}async run(){if(this.logger.log("每日登录模块开始运行"),this.config.enabled){const e=C();D(this.config._lastCompleteTime)?I(0,0,0,5)?this.logger.log("昨天的每日登录任务已经完成过了,等到今天的00:05再执行"):(this.logger.log("今天已经完成过每日登录任务了"),this.status="done"):(this.status="running",e.dailyRewardInfo&&!e.dailyRewardInfo.login?await this.login():(this.config._lastCompleteTime=E(),this.status="done"))}const e=M();setTimeout((()=>this.run()),e.ms),this.logger.log("距离每日登录模块下次运行时间:",e.str)}},DailyTask_MainSiteTask_ShareTask:class extends H{constructor(){super(...arguments),h(this,"config",this.moduleStore.moduleConfig.DailyTasks.MainSiteTasks.share)}set status(e){this.moduleStore.moduleStatus.DailyTasks.MainSiteTasks.share=e}getAid(){const e=C();return i.isEmpty(e.dynamicVideos)?"2":e.dynamicVideos[0].modules.module_dynamic.major.archive.aid}async share(e){try{const t=await $.share(e);this.logger.log(`BAPI.main.share(${e}) response`,t),0===t.code||71e3===t.code?(this.logger.log("每日分享视频任务已完成"),this.config._lastCompleteTime=E(),this.status="done"):(this.logger.error("分享视频失败",t.message),this.status="error")}catch(e){this.logger.error("执行每日分享视频任务出错",e),this.status="error"}}async run(){if(this.logger.log("每日分享视频模块开始运行"),this.config.enabled){const e=C();if(D(this.config._lastCompleteTime))I(0,0,0,5)?this.logger.log("昨天的每日分享任务已经完成过了,等到今天的00:05再执行"):(this.logger.log("今天已经完成过每日分享任务了"),this.status="done");else if(this.status="running",e.dailyRewardInfo&&!e.dailyRewardInfo.share){const e=this.getAid();await this.share(e)}else this.config._lastCompleteTime=E(),this.status="done",this.logger.log("每日分享视频任务已完成")}const e=M();setTimeout((()=>this.run()),e.ms),this.logger.log("距离每日分享视频模块下次运行时间:",e.str)}},DailyTask_MainSiteTask_WatchTask:class extends H{constructor(){super(...arguments),h(this,"config",this.moduleStore.moduleConfig.DailyTasks.MainSiteTasks.watch)}set status(e){this.moduleStore.moduleStatus.DailyTasks.MainSiteTasks.watch=e}getAid(){const e=C();return i.isEmpty(e.dynamicVideos)?"2":e.dynamicVideos[0].modules.module_dynamic.major.archive.aid}async watch(e){try{const t=await $.videoHeartbeat(e);this.logger.log(`BAPI.main.videoHeartbeat(${e}) response`,t),0===t.code?(this.logger.log("每日观看视频任务已完成"),this.config._lastCompleteTime=E(),this.status="done"):(this.logger.error("发送观看视频心跳失败",t.message),this.status="error")}catch(e){this.logger.error("执行每日观看视频任务出错",e),this.status="error"}}async run(){if(this.logger.log("每日观看视频模块开始运行"),this.config.enabled){const e=C();if(D(this.config._lastCompleteTime))I(0,0,0,5)?this.logger.log("昨天的每日观看视频任务已经完成过了,等到今天的00:05再执行"):(this.logger.log("今天已经完成过每日观看视频任务了"),this.status="done");else if(this.status="running",e.dailyRewardInfo&&!e.dailyRewardInfo.watch){const e=this.getAid();await this.watch(e)}else this.config._lastCompleteTime=E(),this.status="done",this.logger.log("每日观看视频任务已完成")}const e=M();setTimeout((()=>this.run()),e.ms),this.logger.log("距离每日观看视频模块下次运行时间:",e.str)}},DailyTask_OtherTask_CoinToSilverTask:class extends H{constructor(){super(...arguments),h(this,"config",this.moduleStore.moduleConfig.DailyTasks.OtherTasks.coinToSilver)}set status(e){this.moduleStore.moduleStatus.DailyTasks.OtherTasks.coinToSilver=e}async exchange(){try{const e=await A.coin2silver(this.config.num);this.logger.log(`BAPI.live.coin2silver{${this.config.num}} response`,e),0===e.code?(this.logger.log("硬币换银瓜子已完成,获得银瓜子:",e.data.silver),this.config._lastCompleteTime=E(),this.status="done"):(this.logger.error("硬币换银瓜子失败",e.message),this.status="error")}catch(e){this.logger.error("硬币换银瓜子出错",e),this.status="error"}}async run(){this.logger.log("硬币换银瓜子模块开始运行"),this.config.enabled&&(D(this.config._lastCompleteTime)?I(0,0,0,5)?this.logger.log("昨天的硬币换银瓜子任务已经完成过了,等到今天的00:05再执行"):(this.logger.log("今天已经完成过硬币换银瓜子任务了"),this.status="done"):(this.status="running",await this.exchange()));const e=M();setTimeout((()=>this.run()),e.ms),this.logger.log("硬币换银瓜子模块下次运行时间:",e.str)}},DailyTask_OtherTask_GetYearVipPrivilegeTask:class extends H{constructor(){super(...arguments),h(this,"config",this.moduleStore.moduleConfig.DailyTasks.OtherTasks.getYearVipPrivilege)}set status(e){this.moduleStore.moduleStatus.DailyTasks.OtherTasks.getYearVipPrivilege=e}async myPrivilege(){try{const e=await $.vip.myPrivilege();if(this.logger.log("BAPI.main.vip.myPrivilege response",e),0===e.code)return e.data.list;this.logger.error("获取年度大会员权益信息失败",e.message),this.status="error"}catch(e){this.logger.error("获取年度大会员权益信息出错",e),this.status="error"}}async receivePrivilege(e){try{const t=await $.vip.receivePrivilege(e);this.logger.log(`BAPI.main.vip.receivePrivilege(${e}) response`,t),0===t.code?this.logger.log(`领取年度大会员权益(type = ${e})成功`):this.logger.error(`领取年度大会员权益(type = ${e})失败`,t.message)}catch(t){this.logger.error(`领取年度大会员权益(type = ${e})出错`,t)}}isYearVip(){const e=C().userInfo;return!(!e||1!==e.vip.status||2!==e.vip.type)||(this.logger.log("当前账号不是年度大会员,不领取权益"),!1)}async run(){if(this.logger.log("领取年度大会员权益模块开始运行"),this.config.enabled){if(this.isYearVip())if(L()>=this.config._nextReceiveTime){this.status="running";const e=await this.myPrivilege();if(e){for(const t of e)2===t.vip_type?0===t.state?await this.receivePrivilege(t.type):this.logger.log(`该权益(type = ${t.type})已经领取过了`):this.logger.warn("发现不属于年度大会员的权益",t);this.status="done",this.config._nextReceiveTime=Math.max(...e.map((e=>e.period_end_unix)))}}else{const e=this.config._nextReceiveTime-L();e<86400?(this.logger.log("领取年度大会员权益模块下次运行时间:",s.DateTime.fromSeconds(this.config._nextReceiveTime).toString()),setTimeout((()=>this.run()),e)):this.logger.log("距离下次领取年度大会员权益的时间超过一天,不计划下次运行")}}else{const e=M(0,0);setTimeout((()=>this.run()),e.ms),this.logger.log("领取年度大会员权益模块下次运行时间:",e.str)}}},DailyTask_OtherTask_GroupSignTask:class extends H{constructor(){super(...arguments),h(this,"config",this.moduleStore.moduleConfig.DailyTasks.OtherTasks.groupSign)}set status(e){this.moduleStore.moduleStatus.DailyTasks.OtherTasks.groupSign=e}async getGroupidOwneruidList(){try{const e=await U.myGroups();if(this.logger.log("BAPI.vc.myGroups response",e),0===e.code)return e.data.list.map((e=>[e.group_id,e.owner_uid]));this.logger.error("获取应援团信息失败",e.message),this.status="error"}catch(e){this.logger.error("获取应援团信息出错",e),this.status="error"}}async sign(e,t){try{const i=await U.signIn(e,t);this.logger.log(`BAPI.vc.signIn(${e}, ${t}) response`,i),0===i.code?this.logger.log(`应援团签到 应援团ID = ${e} 拥有者UID = ${t} 成功, 粉丝勋章亲密度+${i.data.add_num}`):this.logger.error(`应援团签到 应援团ID = ${e} 拥有者UID = ${t} 失败`,i.message)}catch(i){this.logger.error(`应援团签到 应援团ID = ${e} 拥有者UID = ${t} 出错`,i)}}async run(){if(this.logger.log("应援团签到模块开始运行"),this.config.enabled)if(D(this.config._lastCompleteTime,8,5))I(0,0,8,5)?this.logger.log("昨天的应援团签到任务已经完成过了,等到今天早上八点零五分再次执行"):(this.logger.log("今天已经完成过应援团签到任务了"),this.status="done");else{this.status="running";const e=await this.getGroupidOwneruidList();if(e){for(const[t,i]of e)await this.sign(t,i),await S(2e3);this.config._lastCompleteTime=E(),this.logger.log("应援团签到任务已完成"),this.status="done"}}const e=M(8,5);setTimeout((()=>this.run()),e.ms),this.logger.log("距离应援团签到模块下次运行时间:",e.str)}},DailyTask_OtherTask_SilverToCoinTask:class extends H{constructor(){super(...arguments),h(this,"config",this.moduleStore.moduleConfig.DailyTasks.OtherTasks.silverToCoin)}set status(e){this.moduleStore.moduleStatus.DailyTasks.OtherTasks.silverToCoin=e}async exchange(){try{const e=await A.silver2coin();this.logger.log("BAPI.live.silver2coin response",e),0===e.code?(this.logger.log("银瓜子换硬币已完成,获得硬币:",e.data.coin),this.config._lastCompleteTime=E(),this.status="done"):403===e.code?(this.logger.log("每天最多只能用银瓜子兑换1个硬币"),this.config._lastCompleteTime=E(),this.status="done"):(this.logger.error("银瓜子换硬币失败",e.message),this.status="error")}catch(e){this.logger.error("银瓜子换硬币出错",e),this.status="error"}}async run(){this.logger.log("银瓜子换硬币模块开始运行"),this.config.enabled&&(D(this.config._lastCompleteTime)?I(0,0,0,5)?this.logger.log("昨天的银瓜子换硬币任务已经完成过了,等到今天的00:05再执行"):(this.logger.log("今天已经完成过银瓜子换硬币任务了"),this.status="done"):(this.status="running",await this.exchange()));const e=M();setTimeout((()=>this.run()),e.ms),this.logger.log("银瓜子换硬币模块下次运行时间:",e.str)}},EnhanceExperience_BanP2P:Q,EnhanceExperience_NoReport:be,EnhanceExperience_NoSleep:Ce,EnhanceExperience_SwitchLiveStreamQuality:J,RemoveElement_RemoveGameParty:Ne,RemoveElement_RemoveLiveWaterMark:Se,RemoveElement_RemovePKBox:Ve,RemoveElement_RemoveShopPopover:Pe},Symbol.toStringTag,{value:"Module"}));function De(e){const t={all:i=(i=e)||new Map,on:function(e,t){var o=i.get(e);o?o.push(t):i.set(e,[t])},off:function(e,t){var o=i.get(e);o&&(t?o.splice(o.indexOf(t)>>>0,1):i.set(e,[]))},emit:function(e,t){var o=i.get(e);o&&o.slice().map((function(e){e(t)})),(o=i.get("*"))&&o.slice().map((function(i){i(e,t)}))}};var i;return{...t,once(e,i){t.on(e,(function o(s){t.off(e,o),i(s)}))}}}const Me=t.defineStore("cache",(()=>{const t=e.reactive(w.getCache()),i=e.ref(!1);return e.watch(t,(e=>w.setCache(e))),{cache:t,isMainBLTHRunning:i,startAliveHeartBeat:function(){t.lastAliveHeartBeatTime=Date.now();const e=setInterval((()=>t.lastAliveHeartBeatTime=Date.now()),5e3);window.addEventListener("unload",(function(){clearInterval(e),t.lastAliveHeartBeatTime=0}))},checkIfMainBLTHRunning:function(){0!==t.lastAliveHeartBeatTime&&Date.now()-t.lastAliveHeartBeatTime<8e3?i.value=!0:i.value=!1}}})),Ie={DailyTasks:{MainSiteTasks:{login:"",watch:"",coin:"",share:""},LiveTasks:{sign:"",appUser:"",medalTasks:{danmu:"",like:"",watch:""}},OtherTasks:{groupSign:"",silverToCoin:"",coinToSilver:"",getYearVipPrivilege:""}}},Le=[],Ee=t.defineStore("module",(()=>{const t=e.reactive(w.getModuleConfig()),o=De(),s=e.reactive(Ie);return e.watch(t,i.debounce((e=>w.setModuleConfig(e)),250,{leading:!0,trailing:!0})),function e(){setTimeout((()=>{N(s,((e,t)=>{i.set(s,t,"")})),e()}),M(0,0).ms)}(),{moduleConfig:t,emitter:o,moduleStatus:s,loadModules:function(e){const t=Me(),i=new j("ModuleStore_LoadModules");if("unknown"===e)for(const[e,i]of Object.entries(Be))"all"===i.onFrame&&(!i.runMultiple&&t.isMainBLTHRunning||i.runAfterDefault||(B(i.runAt).then((()=>new i(e).run())),Le.push(e)));else{const e=function(){const e=Me(),t=[];for(const[i,o]of Object.entries(q))!o.runMultiple&&e.isMainBLTHRunning||t.push(new o(i).run());return Promise.all(t)}();for(const[o,s]of Object.entries(Be))Le.includes(o)||!s.runMultiple&&t.isMainBLTHRunning||B(s.runAt).then((async()=>{try{s.runAfterDefault&&await e,new s(o).run()}catch(e){i.error(`运行默认模块时出错,模块${o}不运行`,e)}}))}}}})),Re=e.defineComponent({__name:"MainSiteTasks",setup(t){const i=Ee(),o=i.moduleConfig.DailyTasks.MainSiteTasks,s=i.moduleStatus.DailyTasks.MainSiteTasks;return(t,i)=>{const a=e.resolveComponent("el-switch"),n=e.resolveComponent("Info"),r=e.resolveComponent("TaskStatus"),l=e.resolveComponent("el-space"),c=e.resolveComponent("el-row"),d=e.resolveComponent("el-option"),u=e.resolveComponent("el-select"),h=e.resolveComponent("el-text"),m=e.resolveComponent("el-divider"),g=e.resolveComponent("el-link");return e.openBlock(),e.createElementBlock("div",null,[e.createVNode(c,null,{default:e.withCtx((()=>[e.createVNode(l,{wrap:""},{default:e.withCtx((()=>[e.createVNode(a,{modelValue:e.unref(o).login.enabled,"onUpdate:modelValue":i[0]||(i[0]=t=>e.unref(o).login.enabled=t),"active-text":"每日登录"},null,8,["modelValue"]),e.createVNode(n,{id:"DailyTasks.MainSiteTasks.login"}),e.createVNode(r,{status:e.unref(s).login},null,8,["status"])])),_:1})])),_:1}),e.createVNode(c,null,{default:e.withCtx((()=>[e.createVNode(l,{wrap:""},{default:e.withCtx((()=>[e.createVNode(a,{modelValue:e.unref(o).watch.enabled,"onUpdate:modelValue":i[1]||(i[1]=t=>e.unref(o).watch.enabled=t),"active-text":"每日观看视频"},null,8,["modelValue"]),e.createVNode(n,{id:"DailyTasks.MainSiteTasks.watch"}),e.createVNode(r,{status:e.unref(s).watch},null,8,["status"])])),_:1})])),_:1}),e.createVNode(c,null,{default:e.withCtx((()=>[e.createVNode(l,{wrap:""},{default:e.withCtx((()=>[e.createVNode(a,{modelValue:e.unref(o).coin.enabled,"onUpdate:modelValue":i[2]||(i[2]=t=>e.unref(o).coin.enabled=t),"active-text":"每日投币"},null,8,["modelValue"]),e.createVNode(u,{modelValue:e.unref(o).coin.num,"onUpdate:modelValue":i[3]||(i[3]=t=>e.unref(o).coin.num=t),placeholder:"Select",style:{width:"64px"}},{default:e.withCtx((()=>[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(5,(t=>e.createVNode(d,{key:t,label:t,value:t},null,8,["label","value"]))),64))])),_:1},8,["modelValue"]),e.createVNode(h,null,{default:e.withCtx((()=>[e.createTextVNode("个")])),_:1}),e.createVNode(n,{id:"DailyTasks.MainSiteTasks.coin"}),e.createVNode(r,{status:e.unref(s).coin},null,8,["status"])])),_:1})])),_:1}),e.createVNode(c,null,{default:e.withCtx((()=>[e.createVNode(l,{wrap:""},{default:e.withCtx((()=>[e.createVNode(a,{modelValue:e.unref(o).share.enabled,"onUpdate:modelValue":i[4]||(i[4]=t=>e.unref(o).share.enabled=t),"active-text":"每日分享视频"},null,8,["modelValue"]),e.createVNode(n,{id:"DailyTasks.MainSiteTasks.share"}),e.createVNode(r,{status:e.unref(s).share},null,8,["status"])])),_:1})])),_:1}),e.createVNode(m),e.createVNode(h,null,{default:e.withCtx((()=>[e.createTextVNode("  主站每日任务的完成情况可在")])),_:1}),e.createVNode(g,{class:"el-link-va-baseline",rel:"noreferrer",type:"primary",href:"https://account.bilibili.com/account/home",target:"_blank"},{default:e.withCtx((()=>[e.createTextVNode("个人中心")])),_:1}),e.createVNode(h,null,{default:e.withCtx((()=>[e.createTextVNode("查看。数据更新可能有一定的延时。")])),_:1})])}}}),Ae=(t=>(e.pushScopeId("data-v-d7ecdd75"),t=t(),e.popScopeId(),t))((()=>e.createElementVNode("br",null,null,-1))),Oe={class:"avatar-wrap"},$e={components:{MainSiteTasks:Re,LiveTasks:k(e.defineComponent({__name:"LiveTasks",setup(t){const i=Ee(),s=C(),a=i.moduleConfig.DailyTasks.LiveTasks,r=i.moduleStatus.DailyTasks.LiveTasks,l=e.ref(!1),c=e.computed((()=>a.medalTasks.danmu.list.map((e=>({content:e}))))),d=()=>{n.ElMessageBox.prompt("请输入新增的弹幕内容","新增弹幕",{confirmButtonText:"确认",cancelButtonText:"取消",inputPattern:/^.{1,30}$/,inputErrorMessage:"弹幕内容不得为空且长度不能超过30",lockScroll:!1}).then((({value:e})=>{a.medalTasks.danmu.list.push(e)})).catch((()=>{}))},u=e.ref(!1),h=e.computed((()=>{var e;return null==(e=s.filteredFansMedals)?void 0:e.map((e=>({avatar:e.anchor_info.avatar,nick_name:e.anchor_info.nick_name,medal_name:e.medal.medal_name,medal_level:e.medal.level,roomid:e.room_info.room_id})))})),m=e.ref(!1);let g=!0;const f=()=>{if(u.value=!u.value,g)if(s.fansMedals)y(h.value);else{m.value=!0;const t=e.watch(h,(e=>{e&&(t(),g=!1,y(h.value),m.value=!1)}));i.emitter.emit("Default_FansMedals",{module:"LiveTasks"})}},p=e.ref();let v=!1;const y=t=>{if(v=!0,t){const i=e.watch((()=>p.value),(e=>{setTimeout((()=>i()),0),e&&a.medalTasks.roomidList.forEach((i=>e.toggleRowSelection(t.find((e=>e.roomid===i)),!0)))}),{immediate:!0})}v=!1};function w(e){v||(a.medalTasks.roomidList=e.map((e=>e.roomid)))}return(t,i)=>{const s=e.resolveComponent("el-switch"),g=e.resolveComponent("Info"),v=e.resolveComponent("TaskStatus"),y=e.resolveComponent("el-space"),_=e.resolveComponent("el-row"),T=e.resolveComponent("el-divider"),k=e.resolveComponent("SemiSelect"),x=e.resolveComponent("el-icon"),b=e.resolveComponent("el-button"),C=e.resolveComponent("el-option"),V=e.resolveComponent("el-select"),S=e.resolveComponent("el-text"),P=e.resolveComponent("el-link"),N=e.resolveComponent("el-table-column"),B=e.resolveComponent("el-dialog"),D=e.resolveComponent("el-image"),M=e.resolveDirective("loading");return e.openBlock(),e.createElementBlock("div",null,[e.createVNode(_,null,{default:e.withCtx((()=>[e.createVNode(y,{wrap:""},{default:e.withCtx((()=>[e.createVNode(s,{modelValue:e.unref(a).sign.enabled,"onUpdate:modelValue":i[0]||(i[0]=t=>e.unref(a).sign.enabled=t),"active-text":"直播签到"},null,8,["modelValue"]),e.createVNode(g,{id:"DailyTasks.LiveTasks.sign"}),e.createVNode(v,{status:e.unref(r).sign},null,8,["status"])])),_:1})])),_:1}),e.createVNode(_,null,{default:e.withCtx((()=>[e.createVNode(y,{wrap:""},{default:e.withCtx((()=>[e.createVNode(s,{modelValue:e.unref(a).appUser.enabled,"onUpdate:modelValue":i[1]||(i[1]=t=>e.unref(a).appUser.enabled=t),disabled:"","active-text":"APP用户任务"},null,8,["modelValue"]),e.createVNode(g,{id:"DailyTasks.LiveTasks.appUser"}),e.createVNode(v,{status:e.unref(r).appUser},null,8,["status"])])),_:1})])),_:1}),e.createVNode(T),e.createVNode(_,null,{default:e.withCtx((()=>[e.createVNode(y,{wrap:""},{default:e.withCtx((()=>[e.createVNode(s,{modelValue:e.unref(a).medalTasks.like.enabled,"onUpdate:modelValue":i[2]||(i[2]=t=>e.unref(a).medalTasks.like.enabled=t),"active-text":"给主播点赞"},null,8,["modelValue"]),e.createVNode(g,{id:"DailyTasks.LiveTasks.medalTasks.like"}),e.createVNode(v,{status:e.unref(r).medalTasks.like},null,8,["status"])])),_:1})])),_:1}),e.createVNode(_,null,{default:e.withCtx((()=>[e.createVNode(y,{wrap:""},{default:e.withCtx((()=>[e.createVNode(x,null,{default:e.withCtx((()=>[e.createVNode(k)])),_:1}),e.createVNode(s,{modelValue:e.unref(a).medalTasks.like.includeHighLevelMedals,"onUpdate:modelValue":i[3]||(i[3]=t=>e.unref(a).medalTasks.like.includeHighLevelMedals=t),"active-text":"包含等级≥20的粉丝勋章"},null,8,["modelValue"])])),_:1})])),_:1}),e.createVNode(_,null,{default:e.withCtx((()=>[e.createVNode(y,{wrap:""},{default:e.withCtx((()=>[e.createVNode(s,{modelValue:e.unref(a).medalTasks.danmu.enabled,"onUpdate:modelValue":i[4]||(i[4]=t=>e.unref(a).medalTasks.danmu.enabled=t),"active-text":"发送弹幕"},null,8,["modelValue"]),e.createVNode(b,{type:"primary",size:"small",icon:e.unref(o.Edit),onClick:i[5]||(i[5]=e=>l.value=!l.value)},{default:e.withCtx((()=>[e.createTextVNode("编辑弹幕")])),_:1},8,["icon"]),e.createVNode(g,{id:"DailyTasks.LiveTasks.medalTasks.danmu"}),e.createVNode(v,{status:e.unref(r).medalTasks.danmu},null,8,["status"])])),_:1})])),_:1}),e.createVNode(_,null,{default:e.withCtx((()=>[e.createVNode(y,{wrap:""},{default:e.withCtx((()=>[e.createVNode(s,{modelValue:e.unref(a).medalTasks.watch.enabled,"onUpdate:modelValue":i[6]||(i[6]=t=>e.unref(a).medalTasks.watch.enabled=t),"active-text":"观看直播"},null,8,["modelValue"]),e.createVNode(V,{modelValue:e.unref(a).medalTasks.watch.time,"onUpdate:modelValue":i[7]||(i[7]=t=>e.unref(a).medalTasks.watch.time=t),placeholder:"Select",style:{width:"64px"}},{default:e.withCtx((()=>[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(24,(t=>e.createVNode(C,{key:t,label:5*t,value:5*t},null,8,["label","value"]))),64))])),_:1},8,["modelValue"]),e.createVNode(S,null,{default:e.withCtx((()=>[e.createTextVNode("分钟")])),_:1}),e.createVNode(g,{id:"DailyTasks.LiveTasks.medalTasks.watch"}),e.createVNode(v,{status:e.unref(r).medalTasks.watch},null,8,["status"])])),_:1})])),_:1}),e.createVNode(_,null,{default:e.withCtx((()=>[e.createVNode(y,{wrap:""},{default:e.withCtx((()=>[e.createVNode(s,{modelValue:e.unref(a).medalTasks.isWhiteList,"onUpdate:modelValue":i[8]||(i[8]=t=>e.unref(a).medalTasks.isWhiteList=t),"active-text":"白名单","inactive-text":"黑名单"},null,8,["modelValue"]),e.createVNode(b,{type:"primary",size:"small",icon:e.unref(o.Edit),onClick:f},{default:e.withCtx((()=>[e.createTextVNode("编辑名单")])),_:1},8,["icon"]),e.createVNode(g,{id:"DailyTasks.LiveTasks.medalTasks.list"})])),_:1})])),_:1}),e.createVNode(T),e.createVNode(_,null,{default:e.withCtx((()=>[e.createVNode(S,null,{default:e.withCtx((()=>[e.createTextVNode("直播任务相关信息可在")])),_:1}),e.createVNode(P,{class:"el-link-va-baseline",rel:"noreferrer",type:"primary",href:"https://link.bilibili.com/p/help/index#/audience-fans-medal",target:"_blank"},{default:e.withCtx((()=>[e.createTextVNode("帮助中心")])),_:1}),e.createVNode(S,null,{default:e.withCtx((()=>[e.createTextVNode("查看。")])),_:1})])),_:1}),Ae,e.createVNode(_,null,{default:e.withCtx((()=>[e.createVNode(S,{tag:"b"},{default:e.withCtx((()=>[e.createTextVNode("注意:")])),_:1})])),_:1}),e.createVNode(_,null,{default:e.withCtx((()=>[e.createVNode(S,null,{default:e.withCtx((()=>[e.createTextVNode("  由于每天能通过完成任务获得亲密度的粉丝勋章数量有限,脚本默认仅为最多100个等级小于20的粉丝勋章完成给主播点赞,发送弹幕,观看直播任务。")])),_:1})])),_:1}),e.createVNode(B,{modelValue:l.value,"onUpdate:modelValue":i[9]||(i[9]=e=>l.value=e),title:"编辑弹幕内容","lock-scroll":!1,width:"40%"},{footer:e.withCtx((()=>[e.createVNode(b,{type:"primary",onClick:d},{default:e.withCtx((()=>[e.createTextVNode("新增弹幕")])),_:1})])),default:e.withCtx((()=>[e.createVNode(e.unref(n.ElTable),{data:c.value,"max-height":"500"},{default:e.withCtx((()=>[e.createVNode(N,{type:"index",width:"50"}),e.createVNode(N,{prop:"content",label:"弹幕内容"}),e.createVNode(N,{label:"操作",width:"220",align:"center"},{default:e.withCtx((t=>[e.createVNode(b,{text:"",icon:e.unref(o.Edit),onClick:e=>{return i=t.$index,o=t.row,void n.ElMessageBox.prompt("请输入新的弹幕内容","修改弹幕",{confirmButtonText:"确认",cancelButtonText:"取消",inputPattern:/^.{1,30}$/,inputErrorMessage:"弹幕内容不得为空且长度不能超过30",inputValue:o.content,lockScroll:!1}).then((({value:e})=>{a.medalTasks.danmu.list[i]=e})).catch((()=>{}));var i,o}},{default:e.withCtx((()=>[e.createTextVNode(" 修改 ")])),_:2},1032,["icon","onClick"]),e.createVNode(b,{text:"",icon:e.unref(o.Delete),type:"danger",onClick:e=>{return i=t.$index,void(1!==a.medalTasks.danmu.list.length?a.medalTasks.danmu.list.splice(i,1):n.ElMessage.warning({message:"至少要有一条弹幕",appendTo:".el-dialog"}));var i}},{default:e.withCtx((()=>[e.createTextVNode(" 删除 ")])),_:2},1032,["icon","onClick"])])),_:1})])),_:1},8,["data"])])),_:1},8,["modelValue"]),e.createVNode(B,{modelValue:u.value,"onUpdate:modelValue":i[10]||(i[10]=e=>u.value=e),title:"编辑粉丝勋章名单","lock-scroll":!1,width:"40%"},{default:e.withCtx((()=>[e.withDirectives((e.openBlock(),e.createBlock(e.unref(n.ElTable),{ref_key:"medalInfoTableRef",ref:p,data:h.value,"max-height":"500","empty-text":"没有粉丝勋章",onSelectionChange:w},{default:e.withCtx((()=>[e.createVNode(N,{type:"selection",align:"center",width:"55"}),e.createVNode(N,{prop:"avatar",label:"头像",width:"100"},{default:e.withCtx((t=>[e.createElementVNode("div",Oe,[e.createVNode(D,{src:t.row.avatar,loading:"lazy",referrerpolicy:"origin",class:"avatar"},{error:e.withCtx((()=>[e.createVNode(D,{src:"//i0.hdslb.com/bfs/face/member/noface.jpg",referrerpolicy:"origin",class:"avatar"})])),_:2},1032,["src"])])])),_:1}),e.createVNode(N,{prop:"nick_name",label:"昵称"}),e.createVNode(N,{prop:"medal_name",label:"粉丝勋章"}),e.createVNode(N,{prop:"medal_level",label:"等级",width:"80",sortable:""}),e.createVNode(N,{prop:"roomid",label:"房间号"},{default:e.withCtx((t=>[e.createVNode(P,{href:"https://live.bilibili.com/"+t.row.roomid+"?visit_id=",rel:"noreferrer",type:"primary",target:"_blank"},{default:e.withCtx((()=>[e.createTextVNode(e.toDisplayString(t.row.roomid),1)])),_:2},1032,["href"])])),_:1})])),_:1},8,["data"])),[[M,m.value]])])),_:1},8,["modelValue"])])}}}),[["__scopeId","data-v-d7ecdd75"]]),OtherTasks:e.defineComponent({__name:"OtherTasks",setup(t){const i=Ee(),o=i.moduleConfig.DailyTasks.OtherTasks,s=i.moduleStatus.DailyTasks.OtherTasks;return(t,i)=>{const a=e.resolveComponent("el-switch"),n=e.resolveComponent("Info"),r=e.resolveComponent("TaskStatus"),l=e.resolveComponent("el-space"),c=e.resolveComponent("el-row"),d=e.resolveComponent("el-text"),u=e.resolveComponent("el-option"),h=e.resolveComponent("el-select"),m=e.resolveComponent("el-divider");return e.openBlock(),e.createElementBlock("div",null,[e.createVNode(c,null,{default:e.withCtx((()=>[e.createVNode(l,{wrap:""},{default:e.withCtx((()=>[e.createVNode(a,{modelValue:e.unref(o).groupSign.enabled,"onUpdate:modelValue":i[0]||(i[0]=t=>e.unref(o).groupSign.enabled=t),"active-text":"应援团签到"},null,8,["modelValue"]),e.createVNode(n,{id:"DailyTasks.OtherTasks.groupSign"}),e.createVNode(r,{status:e.unref(s).groupSign},null,8,["status"])])),_:1})])),_:1}),e.createVNode(c,null,{default:e.withCtx((()=>[e.createVNode(l,{wrap:""},{default:e.withCtx((()=>[e.createVNode(a,{modelValue:e.unref(o).silverToCoin.enabled,"onUpdate:modelValue":i[1]||(i[1]=t=>e.unref(o).silverToCoin.enabled=t),"active-text":"银瓜子换硬币"},null,8,["modelValue"]),e.createVNode(n,{id:"DailyTasks.OtherTasks.silverToCoin"}),e.createVNode(r,{status:e.unref(s).silverToCoin},null,8,["status"])])),_:1})])),_:1}),e.createVNode(c,null,{default:e.withCtx((()=>[e.createVNode(l,{wrap:""},{default:e.withCtx((()=>[e.createVNode(a,{modelValue:e.unref(o).coinToSilver.enabled,"onUpdate:modelValue":i[2]||(i[2]=t=>e.unref(o).coinToSilver.enabled=t),"active-text":"硬币换银瓜子"},null,8,["modelValue"]),e.createVNode(d,null,{default:e.withCtx((()=>[e.createTextVNode("花费硬币")])),_:1}),e.createVNode(h,{modelValue:e.unref(o).coinToSilver.num,"onUpdate:modelValue":i[3]||(i[3]=t=>e.unref(o).coinToSilver.num=t),placeholder:"Select",style:{width:"64px"}},{default:e.withCtx((()=>[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(50,(t=>e.createVNode(u,{key:t,label:t,value:t},null,8,["label","value"]))),64))])),_:1},8,["modelValue"]),e.createVNode(d,null,{default:e.withCtx((()=>[e.createTextVNode("个")])),_:1}),e.createVNode(n,{id:"DailyTasks.OtherTasks.coinToSilver"}),e.createVNode(r,{status:e.unref(s).coinToSilver},null,8,["status"])])),_:1})])),_:1}),e.createVNode(c,null,{default:e.withCtx((()=>[e.createVNode(l,{wrap:""},{default:e.withCtx((()=>[e.createVNode(a,{modelValue:e.unref(o).getYearVipPrivilege.enabled,"onUpdate:modelValue":i[4]||(i[4]=t=>e.unref(o).getYearVipPrivilege.enabled=t),"active-text":"领取年度大会员权益"},null,8,["modelValue"]),e.createVNode(n,{id:"DailyTasks.OtherTasks.getYearVipPrivilege"}),e.createVNode(r,{status:e.unref(s).getYearVipPrivilege},null,8,["status"])])),_:1})])),_:1}),e.createVNode(m)])}}}),EnhanceExperience:e.defineComponent({__name:"EnhanceExperience",setup(t){const i=Ee().moduleConfig.EnhanceExperience,o=["原画","蓝光PRO","蓝光","超清PRO","超清","高清"];return(t,s)=>{const a=e.resolveComponent("el-switch"),n=e.resolveComponent("el-option"),r=e.resolveComponent("el-select"),l=e.resolveComponent("Info"),c=e.resolveComponent("el-space"),d=e.resolveComponent("el-row"),u=e.resolveComponent("el-divider");return e.openBlock(),e.createElementBlock("div",null,[e.createVNode(d,null,{default:e.withCtx((()=>[e.createVNode(c,{wrap:""},{default:e.withCtx((()=>[e.createVNode(a,{modelValue:e.unref(i).switchLiveStreamQuality.enabled,"onUpdate:modelValue":s[0]||(s[0]=t=>e.unref(i).switchLiveStreamQuality.enabled=t),"active-text":"自动切换画质"},null,8,["modelValue"]),e.createVNode(r,{modelValue:e.unref(i).switchLiveStreamQuality.qualityDesc,"onUpdate:modelValue":s[1]||(s[1]=t=>e.unref(i).switchLiveStreamQuality.qualityDesc=t),placeholder:"Select",style:{width:"110px"}},{default:e.withCtx((()=>[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(o,(t=>e.createVNode(n,{key:t,label:t,value:t},null,8,["label","value"]))),64))])),_:1},8,["modelValue"]),e.createVNode(l,{id:"EnhanceExperience.switchLiveStreamQuality"})])),_:1})])),_:1}),e.createVNode(d,null,{default:e.withCtx((()=>[e.createVNode(c,{wrap:""},{default:e.withCtx((()=>[e.createVNode(a,{modelValue:e.unref(i).banp2p.enabled,"onUpdate:modelValue":s[2]||(s[2]=t=>e.unref(i).banp2p.enabled=t),"active-text":"禁用P2P"},null,8,["modelValue"]),e.createVNode(l,{id:"EnhanceExperience.banp2p"})])),_:1})])),_:1}),e.createVNode(d,null,{default:e.withCtx((()=>[e.createVNode(c,{wrap:""},{default:e.withCtx((()=>[e.createVNode(a,{modelValue:e.unref(i).noReport.enabled,"onUpdate:modelValue":s[3]||(s[3]=t=>e.unref(i).noReport.enabled=t),"active-text":"拦截日志数据上报"},null,8,["modelValue"]),e.createVNode(l,{id:"EnhanceExperience.noReport"})])),_:1})])),_:1}),e.createVNode(d,null,{default:e.withCtx((()=>[e.createVNode(c,{wrap:""},{default:e.withCtx((()=>[e.createVNode(a,{modelValue:e.unref(i).noSleep.enabled,"onUpdate:modelValue":s[4]||(s[4]=t=>e.unref(i).noSleep.enabled=t),"active-text":"屏蔽挂机检测"},null,8,["modelValue"]),e.createVNode(l,{id:"EnhanceExperience.noSleep"})])),_:1})])),_:1}),e.createVNode(u)])}}}),RemoveElement:e.defineComponent({__name:"RemoveElement",setup(t){const i=Ee().moduleConfig.RemoveElement;return(t,o)=>{const s=e.resolveComponent("el-switch"),a=e.resolveComponent("Info"),n=e.resolveComponent("el-space"),r=e.resolveComponent("el-row"),l=e.resolveComponent("el-divider");return e.openBlock(),e.createElementBlock("div",null,[e.createVNode(r,null,{default:e.withCtx((()=>[e.createVNode(n,{wrap:""},{default:e.withCtx((()=>[e.createVNode(s,{modelValue:e.unref(i).removePKBox.enabled,"onUpdate:modelValue":o[0]||(o[0]=t=>e.unref(i).removePKBox.enabled=t),"active-text":"移除大乱斗元素"},null,8,["modelValue"]),e.createVNode(a,{id:"RemoveElement.removePKBox"})])),_:1})])),_:1}),e.createVNode(r,null,{default:e.withCtx((()=>[e.createVNode(n,{wrap:""},{default:e.withCtx((()=>[e.createVNode(s,{modelValue:e.unref(i).removeLiveWaterMark.enabled,"onUpdate:modelValue":o[1]||(o[1]=t=>e.unref(i).removeLiveWaterMark.enabled=t),"active-text":"移除直播间水印"},null,8,["modelValue"]),e.createVNode(a,{id:"RemoveElement.removeLiveWaterMark"})])),_:1})])),_:1}),e.createVNode(r,null,{default:e.withCtx((()=>[e.createVNode(n,{wrap:""},{default:e.withCtx((()=>[e.createVNode(s,{modelValue:e.unref(i).removeShopPopover.enabled,"onUpdate:modelValue":o[2]||(o[2]=t=>e.unref(i).removeShopPopover.enabled=t),"active-text":"移除直播间小黄车弹窗"},null,8,["modelValue"]),e.createVNode(a,{id:"RemoveElement.removeShopPopover"})])),_:1})])),_:1}),e.createVNode(r,null,{default:e.withCtx((()=>[e.createVNode(n,{wrap:""},{default:e.withCtx((()=>[e.createVNode(s,{modelValue:e.unref(i).removeGameParty.enabled,"onUpdate:modelValue":o[3]||(o[3]=t=>e.unref(i).removeGameParty.enabled=t),"active-text":"移除直播间幻星派对标志"},null,8,["modelValue"]),e.createVNode(a,{id:"RemoveElement.removeGameParty"})])),_:1})])),_:1}),e.createVNode(l)])}}})}},Ue=e.defineComponent({...$e,__name:"PanelMain",setup(t){const i=_();return(t,o)=>(e.openBlock(),e.createBlock(e.resolveDynamicComponent(e.unref(i).uiConfig.activeMenuIndex)))}}),je=k(e.defineComponent({__name:"App",setup(t){const o=_(),s=new j("App.vue");let a,n,l=o.uiConfig.isShowPanel;function c(){const e=a.getBoundingClientRect();o.baseStyleValue.top=e.top+window.scrollY,o.baseStyleValue.left=e.left+window.scrollX,o.baseStyleValue.height=e.height,o.baseStyleValue.width=.4*e.width}o.uiConfig.isShowPanel=!1;const d=i.throttle((function(){o.changeShowPanel(),n.innerText=o.isShowPanelButtonText}),300);if(a=F("#live-player-ctnr"),a){c(),((e,t,i,o,s=!0)=>new Promise(((a,n)=>{if(s){const i=e.querySelector(t);if(i)return void a(i)}const r=setInterval((()=>{const i=e.querySelector(t);i&&(clearTimeout(r),a(i))}),i),l=setTimeout((()=>{clearTimeout(r),clearTimeout(l),n()}),o)})))(document,".left-ctnr.left-header-area",300,3e3,!0).then((e=>{var t,i;n=G("button"),n.setAttribute("class","blth_btn"),n.onclick=d,n.innerText=o.isShowPanelButtonText,e.append(n),K()||r("alt+b",{element:null==(i=null==(t=v.top)?void 0:t.document)?void 0:i.documentElement},d),r("alt+b",d)})).catch((()=>s.error("Can't find playerHeaderLeft in time"))),window.addEventListener("resize",(()=>c()));const e=new MutationObserver((()=>c()));e.observe(document.documentElement,{attributes:!0}),e.observe(document.body,{attributes:!0}),l&&(o.uiConfig.isShowPanel=!0)}else s.error("livePlayer not found");return(t,i)=>{const s=e.resolveComponent("el-header"),a=e.resolveComponent("el-aside"),n=e.resolveComponent("el-main"),r=e.resolveComponent("el-container"),l=e.resolveComponent("el-scrollbar"),c=e.resolveComponent("el-collapse-transition");return e.openBlock(),e.createBlock(c,null,{default:e.withCtx((()=>[e.withDirectives(e.createElementVNode("div",{style:e.normalizeStyle(e.unref(o).baseStyle),class:"base"},[e.createVNode(r,null,{default:e.withCtx((()=>[e.createVNode(s,{class:"header"},{default:e.withCtx((()=>[e.createVNode(x)])),_:1}),e.createVNode(l,{height:e.unref(o).scrollBarHeight},{default:e.withCtx((()=>[e.createVNode(r,null,{default:e.withCtx((()=>[e.createVNode(a,{class:"aside"},{default:e.withCtx((()=>[e.createVNode(b)])),_:1}),e.createVNode(n,{class:"main"},{default:e.withCtx((()=>[(e.openBlock(),e.createBlock(e.KeepAlive,null,[e.createVNode(e.Transition,{name:"fade",mode:"out-in"},{default:e.withCtx((()=>[e.createVNode(Ue)])),_:1})],1024))])),_:1})])),_:1})])),_:1},8,["height"])])),_:1})],4),[[e.vShow,e.unref(o).uiConfig.isShowPanel]])])),_:1})}}}),[["__scopeId","data-v-0fb8057a"]]);(e=>{const t=GM_getResourceText(e);GM_addStyle(t)})("element-plus/dist/index.css");const He={},ze={xmlns:"http://www.w3.org/2000/svg",width:"128",height:"128",class:"icon",viewBox:"0 0 1024 1024"},qe=[e.createElementVNode("path",{d:"M831.825 63.94H191.94c-70.692 0-128 57.308-128 128v639.885c0 70.692 57.308 128 128 128h639.885c70.692 0 128-57.308 128-128V191.94c0-70.692-57.308-128-128-128zM895.885 832a63.835 63.835 0 0 1-63.973 63.886H192.088c-17.112 0-33.27-6.575-45.372-18.676S127.88 849.112 127.88 832V192a64.236 64.236 0 0 1 64.208-64.12h639.824A64.038 64.038 0 0 1 895.885 192v640z"},null,-1),e.createElementVNode("path",{d:"M791.998 351.852H536a31.97 31.97 0 0 0 0 63.94h256a31.97 31.97 0 0 0 0-63.94zm0 256.121H536a31.97 31.97 0 0 0 0 63.94h256a31.97 31.97 0 0 0 0-63.94zm-447.996-79.975c-61.856 0-111.986 50.144-111.986 111.985S282.16 751.97 344.002 751.97s111.985-50.144 111.985-111.986-50.13-111.985-111.985-111.985zm33.982 145.982a48.045 48.045 0 1 1 14.088-33.982 47.746 47.746 0 0 1-14.088 33.986zm39.412-376.586L311.999 402.787l-41.391-41.395a31.97 31.97 0 1 0-45.213 45.213l63.997 64.002a31.97 31.97 0 0 0 45.214 0l128-128a31.97 31.97 0 0 0-45.21-45.213z"},null,-1)];const Fe=k(He,[["render",function(t,i){return e.openBlock(),e.createElementBlock("svg",ze,qe)}]]),Ge={DailyTasks:{MainSiteTasks:{login:{title:"每日登录",message:"完成主站的每日登录任务。"},watch:{title:"每日观看视频",message:e.h("p",[e.h("div","完成主站的每日观看视频任务。"),e.h("div","从动态中选取视频观看,会产生观看历史记录。")])},coin:{title:"每日投币",message:e.h("p",[e.h("div","完成主站的每日投币任务。"),e.h("div","从动态中选取视频投币,会根据你今天已经投过的币的数量计算还要投几个币。")])},share:{title:"每日分享视频",message:e.h("p",[e.h("div","完成主站的每日分享视频任务。"),e.h("div","不会真的分享到某处。")])}},LiveTasks:{sign:{title:"直播签到",message:e.h("p",[e.h("div","完成直播签到任务。"),e.h("div","完成后会移除当前直播间右上角签到窗口中的签到按钮。")])},appUser:{title:"APP用户任务",message:e.h("p",[e.h("div","完成APP用户任务并领取奖励。"),e.h("div",[e.h("strong","由于曾经的APP用户任务下架已久,目前的新任务(观看新主播直播并发弹幕)又没有对全部用户开放,故该功能暂时被禁用。"),e.h("div",[e.h("span","在APP中观看直播时右下角可能会有个电池图标,点击即可查看APP用户任务内容。并非所有账号都可以参加该任务。 如果开启了发送弹幕功能,该功能会在发送弹幕功能运行完毕后再运行。如果之前发送的弹幕数量不够,会先在直播间"),e.h("a",{class:"el-link el-link--primary is-underline el-link-va-baseline",href:"https://live.bilibili.com/22474988",rel:"noreferrer",target:"_blank"},"22474988"),e.h("span","发送弹幕再领取奖励。")])])])},medalTasks:{list:{title:"黑白名单",message:e.h("p",[e.h("div","为更精细地控制为哪些粉丝勋章执行任务,你可以使用黑名单或白名单模式。"),e.h("div",[e.h("li",[e.h("span","黑名单:仅为"),e.h("strong","不在"),e.h("span","名单中的粉丝勋章执行任务。")]),e.h("li",[e.h("span","白名单:仅为"),e.h("strong","在"),e.h("span","名单中的粉丝勋章执行任务。")])]),e.h("div","点击编辑名单按钮,然后使用第一列的多选框即可编辑名单中的粉丝勋章。")])},like:{title:"给主播点赞",message:e.h("p",[e.h("div","在你的每个粉丝勋章对应的直播间给主播点赞。"),e.h("div",[e.h("span","如果你不希望等级≥20的粉丝勋章熄灭,可以勾选下面的“包含等级≥20的粉丝勋章”"),e.h("strong","(虽然B站的帮助中心说点赞可以点亮粉丝勋章但现在似乎不行了,所以该选项以后可能会被删除)"),e.h("span","。")]),e.h("div","部分直播间无法完成该任务,原因未知。")])},danmu:{title:"发送弹幕",message:e.h("p",[e.h("div","在你的每个粉丝勋章对应的直播间发送一条弹幕。"),e.h("div",[e.h("span","点击编辑弹幕按钮编辑发送的弹幕,脚本会从中按顺序循环抽取弹幕发送。"),e.h("span","部分直播间无法完成该任务,可能的原因有:,"),e.h("li","你被禁言了"),e.h("li","发言有粉丝勋章等级要求"),e.h("li",[e.h("span","特殊直播间(比如"),e.h("a",{href:"https://live.bilibili.com/54",rel:"noreferrer",target:"_blank"},"54"),e.h("span",")")])])])},watch:{title:"观看直播",message:e.h("p",[e.h("div","完成观看持有粉丝勋章对应主播直播的任务。"),e.h("div","部分直播间因为没有设置直播分区导致任务无法完成。主播当前是否开播不会影响该任务的完成。")])}}},OtherTasks:{groupSign:{title:"应援团签到",message:"完成应援团签到任务。"},silverToCoin:{title:"银瓜子换硬币",message:e.h("p",[e.h("div","把银瓜子兑换为硬币。"),e.h("div","具体兑换规则请点击直播间页面的“立即充值→银瓜子商店”查看。")])},coinToSilver:{title:"硬币换银瓜子",message:e.h("p",[e.h("div","把硬币兑换为银瓜子。"),e.h("div","具体兑换规则请点击直播间页面的“立即充值→银瓜子商店”查看。")])},getYearVipPrivilege:{title:"领取年度大会员权益",message:e.h("p",[e.h("div","自动领取年度大会员权益。"),e.h("div",[e.h("span","具体权益请前往"),e.h("a",{href:"https://account.bilibili.com/account/big/myPackage",rel:"noreferrer",target:"_blank"},"卡券包"),e.h("span","查看。")])])}}},EnhanceExperience:{switchLiveStreamQuality:{title:"自动切换画质",message:e.h("p",[e.h("div","打开直播间后自动把播放器切换到指定画质。"),e.h("div","如果指定画质不存在,则还是使用B站的默认画质。")])},banp2p:{title:"禁用P2P",message:e.h("p",[e.h("div","禁用直播流的P2P上传/下载"),e.h("div","B站使用WebRTC技术把许多浏览器点对点(P2P)地连接起来,实现视频流和音频流的传输。这样做是为了减轻B站服务器的压力,但是会占用你一定的上行带宽(大约几百kb每秒)。如果你不想被占用上行带宽,可以开启该功能。若开启后发现观看直播时有明显卡顿,请关闭。")])},noReport:{title:"拦截日志数据上报",message:e.h("p",[e.h("div","禁止B站上报日志数据。"),e.h("div",[e.h("span","B站会实时地上报大量日志信息,比如直播观看情况、代码报错等等。开启本功能后绝大多数日志上报都会被拦截并返回一个成功的响应。如果追求更好的效果和性能表现建议使用带有广告拦截功能的浏览器拓展,比如"),e.h("a",{href:"https://github.com/gorhill/uBlock",rel:"noreferrer",target:"_blank"},"uBlock Origin"),e.h("span","。")])])},noSleep:{title:"屏蔽挂机检测",message:e.h("p",[e.h("div","屏蔽B站直播间的挂机检测。"),e.h("div","如果长时间没有操作,会提示“检测到您已离开当前屏幕,倒计时后即将暂停播放”。开启本功能后即可避免这种情况。")])}},RemoveElement:{removePKBox:{title:"移除大乱斗元素",message:"移除直播间的大乱斗元素(进度条,弹出的提示等)。"},removeLiveWaterMark:{title:"移除直播间水印",message:"移除直播画面左上角的水印。"},removeShopPopover:{title:"移除直播间小黄车弹窗",message:"移除直播间左上角的小黄车弹窗。"},removeGameParty:{title:"移除直播间幻星派对标志",message:"移除直播间右下角的幻星派对标志。"}}},Ke=(t=>(e.pushScopeId("data-v-c1d8df5e"),t=t(),e.popScopeId(),t))((()=>e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"128",height:"128",class:"icon",viewBox:"0 0 1024 1024"},[e.createElementVNode("path",{fill:"#276BC0",d:"M512.67 959.47c-246.343 0-446.76-200.632-446.76-447.24S266.326 64.98 512.67 64.98s446.76 200.642 446.76 447.25-200.416 447.24-446.76 447.24zm0-829.04c-210.291 0-381.38 171.283-381.38 381.8s171.089 381.79 381.38 381.79 381.381-171.273 381.381-381.79-171.09-381.8-381.38-381.8z"}),e.createElementVNode("path",{fill:"#276BC0",d:"M447.29 317.172a63.891 63.959 0 1 0 130.76 0 63.891 63.959 0 1 0-130.76 0Zm64.907 503.047c-30.093 0-54.235-24.416-54.235-54.541V482.062c0-30.126 24.142-54.541 54.235-54.541 30.094 0 54.236 24.416 54.236 54.541v283.616c0 30.125-24.142 54.54-54.236 54.54z"})],-1))),We=k(e.defineComponent({__name:"InfoIcon",props:{id:{}},setup(t){const o=t,s=()=>{const{title:e,message:t}=i.get(Ge,o.id,{title:"无",message:"无"});n.ElMessageBox({title:e,message:t,lockScroll:!1,autofocus:!0,confirmButtonText:"OK"})};return(t,i)=>{const o=e.resolveComponent("el-icon");return e.openBlock(),e.createBlock(o,{class:"info-icon",onClick:s},{default:e.withCtx((()=>[Ke])),_:1})}}}),[["__scopeId","data-v-c1d8df5e"]]),Xe=k(e.defineComponent({__name:"TaskStatusIcon",props:{status:{}},setup:t=>(t,i)=>{const o=e.resolveComponent("Loading"),s=e.resolveComponent("el-icon"),a=e.resolveComponent("Select"),n=e.resolveComponent("CloseBold");return"running"===t.status?(e.openBlock(),e.createBlock(s,{key:0,class:"status-icon is-loading"},{default:e.withCtx((()=>[e.createVNode(o)])),_:1})):"done"===t.status?(e.openBlock(),e.createBlock(s,{key:1,class:"status-icon",style:{color:"#1ab059"}},{default:e.withCtx((()=>[e.createVNode(a)])),_:1})):"error"===t.status?(e.openBlock(),e.createBlock(s,{key:2,class:"status-icon",style:{color:"#ff6464"}},{default:e.withCtx((()=>[e.createVNode(n)])),_:1})):e.createCommentVNode("",!0)}}),[["__scopeId","data-v-72d53133"]]),Je=Object.freeze(Object.defineProperty({__proto__:null,Info:We,TaskStatus:Xe,Tasks:Fe},Symbol.toStringTag,{value:"Module"})),Qe=new j("Main");Qe.log("document.readyState",document.readyState);const Ye=t.createPinia(),Ze=Me(Ye),et=Ee(Ye);if(Ze.checkIfMainBLTHRunning(),Ze.isMainBLTHRunning?Qe.log("其它页面上存在正在运行的Main BLTH"):(Qe.log("当前脚本是Main BLTH,开始存活心跳"),Ze.startAliveHeartBeat()),et.loadModules("unknown"),await B("document-body"),document.head.innerHTML.includes("BilibiliLive")){const t=e.createApp(je);t.use(n),t.use(Ye);for(const[e,i]of Object.entries(c))t.component(e,i);for(const[e,i]of Object.entries(Je))t.component(e,i);et.loadModules("yes"),await B("document-end");const i=G("div");i.id="BLTH",document.body.append(i),t.mount(i)}}(Vue,Pinia,_,ElementPlusIconsVue,luxon,CryptoJS,ElementPlus,hotkeys); \ No newline at end of file +(e=>{if("function"==typeof GM_addStyle)return void GM_addStyle(e);const t=document.createElement("style");t.textContent=e,document.head.append(t)})(" .title[data-v-b935cab6]{padding-left:20px;align-items:center;display:flex}.header-big-text[data-v-b935cab6]{font-size:var(--big-text-size)}.header-small-text[data-v-b935cab6]{font-size:var(--small-text-size);padding-top:calc(var(--big-text-size) - var(--small-text-size));margin-left:10px;--small-text-size: 18px}.collapse-btn[data-v-b935cab6]{display:flex;justify-content:center;align-items:center;height:100%;float:left;cursor:pointer}.avatar-wrap[data-v-45a03c87]{width:80px;height:80px}.avatar[data-v-45a03c87]{display:flex;justify-content:center;align-items:center;border-radius:50%}.base[data-v-0fb8057a]{z-index:1003;position:absolute;background-color:#fff;border-bottom:1px solid #e3e5e7;border-left:1px solid #e3e5e7;border-right:1px solid #e3e5e7}.header[data-v-0fb8057a]{position:relative;box-sizing:border-box;width:100%;font-size:var(--big-text-size);align-items:center;display:flex;border-bottom:1px solid #e3e5e7;height:60px;--big-text-size: 25px}.aside[data-v-0fb8057a]{width:auto}.aside #aside-el-menu[data-v-0fb8057a]:not(.el-menu--collapse){width:150px}.main[data-v-0fb8057a]{--main-top-botton-padding: calc(var(--el-main-padding) * .625);padding-top:var(--main-top-botton-padding);padding-bottom:var(--main-top-botton-padding)}.fade-enter-active[data-v-0fb8057a],.fade-leave-active[data-v-0fb8057a]{transition:opacity .1s ease}.fade-enter-from[data-v-0fb8057a],.fade-leave-to[data-v-0fb8057a]{opacity:0}.info-icon[data-v-67653089]{font-size:var(--el-font-size-base);cursor:pointer}.status-icon[data-v-72d53133]{font-size:var(--el-font-size-base)}.blth_btn{background-color:#23ade5;font-size:small;margin-inline-start:5px;color:#fff;border-radius:4px;border:none;padding:5px;cursor:pointer;box-shadow:0 0 2px #00000075;line-height:10px;margin-left:15px}.blth_btn:hover{background-color:#1097cc}.blth_btn:hover:active{background-color:#0e86b6;position:relative;top:1px} "),async function(e,t,i,o,s,a,n,r){"use strict";function l(e){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e)for(const i in e)if("default"!==i){const o=Object.getOwnPropertyDescriptor(e,i);Object.defineProperty(t,i,o.get?o:{enumerable:!0,get:()=>e[i]})}return t.default=e,Object.freeze(t)}const c=l(o);var d,u=Object.defineProperty,h=(e,t,i)=>(((e,t,i)=>{t in e?u(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i})(e,"symbol"!=typeof t?t+"":t,i),i),m=(()=>"undefined"!=typeof GM_addStyle?GM_addStyle:void 0)(),g=(()=>"undefined"!=typeof GM_getValue?GM_getValue:void 0)(),p=(()=>"undefined"!=typeof GM_setValue?GM_setValue:void 0)(),f=(()=>"undefined"!=typeof GM_xmlhttpRequest?GM_xmlhttpRequest:void 0)(),v=(()=>"undefined"!=typeof unsafeWindow?unsafeWindow:void 0)();const y={ui:{isCollapse:!1,isShowPanel:!0,activeMenuIndex:"MainSiteTasks"},modules:{DailyTasks:{MainSiteTasks:{login:{enabled:!1,_lastCompleteTime:0},watch:{enabled:!1,_lastCompleteTime:0},coin:{enabled:!1,num:1,_lastCompleteTime:0},share:{enabled:!1,_lastCompleteTime:0}},LiveTasks:{sign:{enabled:!1,_lastCompleteTime:0},appUser:{enabled:!1,_lastCompleteTime:0},medalTasks:{danmu:{enabled:!1,list:["(⌒▽⌒)","( ̄▽ ̄)","(=・ω・=)","(`・ω・´)","(〜 ̄△ ̄)〜","(・∀・)","(°∀°)ノ","╮( ̄▽ ̄)╭","_(:3」∠)_","(^・ω・^ )","(● ̄(エ) ̄●)","ε=ε=(ノ≧∇≦)ノ","⁄(⁄ ⁄•⁄ω⁄•⁄ ⁄)⁄","←◡←","(●'◡'●)ノ♥"],_lastCompleteTime:0},like:{enabled:!1,includeHighLevelMedals:!1,_lastCompleteTime:0},watch:{enabled:!1,time:70,_watchedSecondsToday:0,_lastWatchTime:0,_lastCompleteTime:0},isWhiteList:!1,roomidList:[]}},OtherTasks:{groupSign:{enabled:!1,_lastCompleteTime:0},silverToCoin:{enabled:!1,_lastCompleteTime:0},coinToSilver:{enabled:!1,num:1,_lastCompleteTime:0},getYearVipPrivilege:{enabled:!1,_nextReceiveTime:0}}},EnhanceExperience:{switchLiveStreamQuality:{enabled:!1,qualityDesc:"原画"},banp2p:{enabled:!1},noReport:{enabled:!1},noSleep:{enabled:!1}},RemoveElement:{removePKBox:{enabled:!1},removeLiveWaterMark:{enabled:!1},removeShopPopover:{enabled:!1},removeGameParty:{enabled:!1}}},cache:{lastAliveHeartBeatTime:0}};class w{static mergeConfigs(e,t){const o=i.difference(i.keys(e),i.keys(t));e=i.omit(e,o);const s=i.difference(i.keys(t),i.keys(e));i.assign(e,i.pick(t,s));for(const[o,a]of Object.entries(e).filter((e=>!s.includes(e[0]))))i.isPlainObject(a)&&(e[o]=this.mergeConfigs(a,t[o]));return e}static setUiConfig(e){p("ui",e)}static getUiConfig(){return this.mergeConfigs(g("ui",{}),y.ui)}static setModuleConfig(e){p("modules",e)}static getModuleConfig(){return this.mergeConfigs(g("modules",{}),y.modules)}static setCache(e){p("cache",e)}static getCache(){return this.mergeConfigs(g("cache",{}),y.cache)}}const _=t.defineStore("ui",(()=>{const t=e.reactive(w.getUiConfig()),o=e.computed((()=>({MainSiteTasks:"主站任务",LiveTasks:"直播任务",OtherTasks:"其它任务",EnhanceExperience:"体验优化",RemoveElement:"移除元素"}[t.activeMenuIndex]))),s=e.reactive({top:0,left:0,height:0,width:0}),a=e.computed((()=>({top:s.top.toString()+"px",left:s.left.toString()+"px",height:s.height.toString()+"px",width:s.width.toString()+"px"}))),n=e.computed((()=>t.isShowPanel?"隐藏控制面板":"显示控制面板")),r=e.computed((()=>(s.height-60).toString()+"px"));return e.watch(t,i.debounce((e=>w.setUiConfig(e)),350)),{isShowPanelButtonText:n,activeMenuName:o,baseStyleValue:s,baseStyle:a,scrollBarHeight:r,uiConfig:t,changeCollapse:function(){t.isCollapse=!t.isCollapse},changeShowPanel:function(){t.isShowPanel=!t.isShowPanel},setActiveMenuIndex:function(e){t.activeMenuIndex=e}}})),T={class:"title"},k=(e,t)=>{const i=e.__vccOpts||e;for(const[e,o]of t)i[e]=o;return i},x=k(e.defineComponent({__name:"PanelHeader",setup(t){const i=_();return(t,s)=>{const a=e.resolveComponent("el-icon"),n=e.resolveComponent("el-text");return e.openBlock(),e.createElementBlock(e.Fragment,null,[e.createElementVNode("div",{class:"collapse-btn",onClick:s[0]||(s[0]=(...t)=>e.unref(i).changeCollapse&&e.unref(i).changeCollapse(...t))},[e.unref(i).uiConfig.isCollapse?(e.openBlock(),e.createBlock(a,{key:0},{default:e.withCtx((()=>[e.createVNode(e.unref(o.Expand))])),_:1})):(e.openBlock(),e.createBlock(a,{key:1},{default:e.withCtx((()=>[e.createVNode(e.unref(o.Fold))])),_:1}))]),e.createElementVNode("div",T,[e.createVNode(n,{tag:"b",class:"header-big-text"},{default:e.withCtx((()=>[e.createTextVNode("控制面板")])),_:1}),e.createVNode(n,{class:"header-small-text"},{default:e.withCtx((()=>[e.createTextVNode(e.toDisplayString(e.unref(i).activeMenuName),1)])),_:1})])],64)}}}),[["__scopeId","data-v-b935cab6"]]),b=e.defineComponent({__name:"PanelAside",setup(t){const i=_(),o=[{icon:"Tasks",title:"每日任务",index:"DailyTasks",subs:[{title:"主站任务",index:"MainSiteTasks"},{title:"直播任务",index:"LiveTasks"},{title:"其它任务",index:"OtherTasks"}]},{icon:"Monitor",title:"体验优化",index:"EnhanceExperience"},{icon:"Scissor",title:"移除元素",index:"RemoveElement"}];return(t,s)=>{const a=e.resolveComponent("el-icon"),n=e.resolveComponent("el-menu-item"),r=e.resolveComponent("el-sub-menu"),l=e.resolveComponent("el-menu");return e.openBlock(),e.createBlock(l,{"default-active":e.unref(i).uiConfig.activeMenuIndex,style:e.normalizeStyle({"min-height":e.unref(i).scrollBarHeight}),collapse:e.unref(i).uiConfig.isCollapse,"unique-opened":"",onSelect:e.unref(i).setActiveMenuIndex,id:"aside-el-menu"},{default:e.withCtx((()=>[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(o,(t=>(e.openBlock(),e.createElementBlock(e.Fragment,null,[t.subs?(e.openBlock(),e.createBlock(r,{index:t.index,key:t.index},{title:e.withCtx((()=>[e.createVNode(a,null,{default:e.withCtx((()=>[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(t.icon)))])),_:2},1024),e.createElementVNode("span",null,e.toDisplayString(t.title),1)])),default:e.withCtx((()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.subs,(t=>(e.openBlock(),e.createBlock(n,{key:t.index,index:t.index},{default:e.withCtx((()=>[e.createTextVNode(e.toDisplayString(t.title),1)])),_:2},1032,["index"])))),128))])),_:2},1032,["index"])):(e.openBlock(),e.createBlock(n,{index:t.index,key:t.index},{title:e.withCtx((()=>[e.createTextVNode(e.toDisplayString(t.title),1)])),default:e.withCtx((()=>[e.createVNode(a,null,{default:e.withCtx((()=>[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(t.icon)))])),_:2},1024)])),_:2},1032,["index"]))],64)))),64))])),_:1},8,["default-active","style","collapse","onSelect"])}}}),C=t.defineStore("bili",(()=>{const t=e.ref(null),i=e.ref(null),o=e.ref(null),s=e.ref(null),a=e.ref(null),n=e.ref(null),r=e.ref(null),l=e.computed((()=>{var e;return(null==(e=r.value)?void 0:e.filter((e=>0!==e.room_info.room_id)))??null}));return{BilibiliLive:t,userInfo:o,giftConfig:s,cookies:i,dailyRewardInfo:a,dynamicVideos:n,fansMedals:r,filteredFansMedals:l}}));let V=class{constructor(e,t){h(this,"url_prefix"),h(this,"origin"),this.url_prefix=e??"",this.origin=t??"https://bilibili.com"}get(e,t,o){return new Promise(((s,a)=>{const n={method:"GET",url:this.url_prefix+e+(t?"?"+new URLSearchParams(t).toString():""),responseType:"json",headers:{Accept:"application/json, text/plain, */*",Referer:this.origin,Origin:this.origin,"Sec-Fetch-Site":"same-site"},onload:function(e){s(e.response)},onerror:function(e){a(e)}},r=i.defaultsDeep(o,n);f(r)}))}post(e,t,o){return new Promise(((s,a)=>{const n={method:"POST",url:this.url_prefix.concat(e),data:new URLSearchParams(t).toString(),responseType:"json",headers:{Accept:"application/json, text/plain, */*",Referer:this.origin,Origin:this.origin,"Sec-Fetch-Site":"same-site","Content-Type":"application/x-www-form-urlencoded"},onload:function(e){s(e.response)},onerror:function(e){a(e)}},r=i.defaultsDeep(o,n);"multipart/form-data"===r.headers["Content-Type"]&&delete r.headers["Content-Type"],f(r)}))}};function S(e){return new Promise((t=>setTimeout(t,e)))}function P(e){const t=new FormData;return i.forEach(e,((e,i)=>t.append(i,e.toString()))),t}function N(e,t,o){i.forOwn(e,(function(e,s){const a=o?o+"."+s:s;i.isPlainObject(e)&&!i.isEmpty(e)?N(e,t,a):t(e,a)}))}function D(e){switch(e){case"document-start":return Promise.resolve();case"document-head":return new Promise((e=>{if(document.head)e();else{const t=new MutationObserver((()=>{document.head&&(t.disconnect(),e())}));t.observe(document.documentElement,{childList:!0})}}));case"document-body":return new Promise((e=>{if(document.body)e();else{const t=new MutationObserver((()=>{document.body&&(t.disconnect(),e())}));t.observe(document.documentElement,{childList:!0})}}));case"document-end":return new Promise((e=>{"loading"!==document.readyState?e():document.addEventListener("DOMContentLoaded",(()=>e()))}));case"window-load":return new Promise((e=>{"complete"===document.readyState?e():window.addEventListener("load",(()=>e()))}));default:return Promise.reject("Illegal moment")}}function B(e,t=0,i=5){const o=s.DateTime.fromMillis(e),a=s.DateTime.now().set({hour:t,minute:i,second:0,millisecond:0}),n=a.plus({days:1}),r=a.minus({days:1});return s.DateTime.now()>=a?o>=a&&o=r&&oo&&(o=o.plus({days:1}));const a=o.diff(i);return{ms:a.toMillis(),str:a.toFormat("h小时m分钟s秒").replace(/^0小时/,"").replace(/^0分钟/,"")}}function I(e,t,i,o){const a=s.DateTime.now(),n=s.DateTime.local(a.year,a.month,a.day,e,t),r=s.DateTime.local(a.year,a.month,a.day,i,o);return a>=n&&aR.live.get("/xlive/web-room/v1/giftPanel/roomGiftConfig",{platform:o,room_id:e,area_parent_id:t,area_id:i}),doSign:()=>R.live.get("/xlive/web-ucenter/v1/sign/DoSign"),getSignInfo:()=>R.live.get("/xlive/web-ucenter/v1/sign/WebGetSignInfo"),fansMedalPanel:(e,t=10)=>R.live.get("/xlive/app-ucenter/v1/fansMedal/panel",{page:e,page_size:t},{Origin:"https://link.bilibili.com",Referer:"https://link.bilibili.com/p/center/index"}),sendMsg:(e,t,i=0,o=1,s=0,a=25,n=16777215,r=0)=>{const l=C().cookies.bili_jct;return R.live.post("/msg/send",void 0,{data:P({roomid:t,room_type:i,rnd:E(),msg:e,mode:o,jumpfrom:s,fontsize:a,csrf:l,csrf_token:l,color:n,bubble:r}),headers:{"Content-Type":"multipart/form-data"}})},likeReport:(e,t,i=1)=>{const o=C().cookies.bili_jct;return R.live.post("/xlive/app-ucenter/v1/like_info_v3/like/likeReportV3",{click_time:i,room_id:e,anchor_id:t,uid:t,ts:E(),csrf:o})},getInfoByRoom:e=>R.live.get("/xlive/web-room/v1/index/getInfoByRoom",{room_id:e}),getUserTaskProgress:(e=11153765)=>{const t=C().cookies.bili_jct;return R.live.get("/xlive/app-ucenter/v1/userTask/GetUserTaskProgress",{target_id:e,csrf:t,ts:E()})},userTaskReceiveRewards:(e=11153765)=>{const t=C().cookies.bili_jct;return R.live.post("/xlive/app-ucenter/v1/userTask/UserTaskReceiveRewards",{actionKey:"csrf",target_id:e,csrf:t,ts:E()})},silver2coin:(e="")=>{const t=C().cookies.bili_jct;return R.live.post("/xlive/revenue/v1/wallet/silver2coin",{csrf:t,csrf_token:t,visit_id:e})},coin2silver:(e,t="pc",i="")=>{const o=C().cookies.bili_jct;return R.live.post("/xlive/revenue/v1/wallet/coin2silver",{num:e,csrf:o,csrf_token:o,platform:t,visit_id:i})}},A={E:(e,t,i,o=0,s=[],a="")=>{const n=C().cookies.bili_jct;return R.liveTrace.post("/xlive/data-interface/v1/x25Kn/E",{id:JSON.stringify(e),device:JSON.stringify(t),ruid:i,ts:L(),is_patch:o,heart_beat:JSON.stringify(s),ua:navigator.userAgent,csrf_token:n,csrf:n,visit_id:a})},X:(e,t,i,o,s,a,n,r,l="")=>{const c=C().cookies.bili_jct;return R.liveTrace.post("/xlive/data-interface/v1/x25Kn/X",{s:e,id:JSON.stringify(t),device:JSON.stringify(i),ruid:o,ets:s,benchmark:a,time:n,ts:r,ua:navigator.userAgent,csrf_token:c,csrf:c,visit_id:l})}},$={nav:()=>R.main.get("/x/web-interface/nav"),reward:()=>R.main.get("/x/member/web/exp/reward"),dynamicAll:(e,t=1,i=-480,o="itemOpusStyle")=>R.main.get("/x/polymer/web-dynamic/v1/feed/all",{timezone_offset:i,type:e,page:t,features:o}),videoHeartbeat:(e,t="",i=0,o=0,s=0,a="https://t.bilibili.com/?spm_id_from=444.3.0.0",n=116,r=100,l=3,c=0,d=0,u=2,h=0,m=0,g="333.488.0.0",p="333.31.list.card_archive.click",f='{"player_version":"4.1.21-rc.1727.0"}')=>{var v;const y=C();return R.main.post("/x/click-interface/web/heartbeat",{start_ts:E(),mid:null==(v=C().userInfo)?void 0:v.mid,aid:e,cid:t,type:l,sub_type:c,dt:u,play_type:d,realtime:i,played_time:o,real_played_time:s,refer_url:a,quality:n,video_duration:r,last_play_progress_time:h,max_play_progress_time:m,spmid:g,from_spmid:p,extra:f,csrf:y.cookies.bili_jct})},share:(e,t="pc_client_normal",i=2,o=0,s=1)=>{const a=C().cookies.bili_jct;return R.main.post("/x/web-interface/share/add",{aid:e,eab_x:i,ramval:o,source:t,ga:s,csrf:a})},coinAdd:(e,t,i=0,o=!0,s=2,a=6,n="web_normal",r=1)=>{const l=C().cookies.bili_jct;return R.main.post("/x/web-interface/coin/add ",{aid:e,multiply:t,select_like:i,cross_domain:o,eab_x:s,ramval:a,source:n,ga:r,csrf:l})},videoRelation:(e,t="")=>R.main.get("/x/web-interface/archive/relation",{aid:e,bvid:t}),vip:{myPrivilege:()=>{const e=C().cookies.bili_jct;return R.main.get("/x/vip/privilege/my",{csrf:e},{headers:{Referer:"https://account.bilibili.com/account/big/myPackage",Origin:"https://account.bilibili.com/account/big/myPackage"}})},receivePrivilege:(e,t="web")=>{const i=C().cookies.bili_jct;return R.main.post("/x/vip/privilege/receive",{type:e,platform:t,csrf:i},{headers:{Referer:"https://account.bilibili.com/account/big/myPackage",Origin:"https://account.bilibili.com/account/big/myPackage"}})}}},U={myGroups:(e=0,t="web")=>R.vc.get("/link_group/v1/member/my_groups",{build:e,mobi_app:t}),signIn:(e,t)=>R.vc.get("/link_setting/v1/link_setting/sign_in",{group_id:e,owner_id:t})};class j{constructor(e){h(this,"NAME","BLTH"),h(this,"prefix_title_str"),h(this,"title"),this.title=e,this.prefix_title_str=e.split("_").join("][")}get prefix(){return[`%c${this.NAME}%c[${(new Date).toLocaleString()}]%c[${this.prefix_title_str}]%c:`,"font-weight: bold; color: white; background-color: #23ade5; padding: 1px 4px; border-radius: 4px;","font-weight: bold; color: #0920e6;","font-weight: bold;",""]}log(...e){console.log(...this.prefix,...e)}error(...e){console.error(...this.prefix,...e)}warn(...e){console.warn(...this.prefix,...e)}}class H{constructor(e){h(this,"moduleName"),h(this,"logger"),h(this,"moduleStore",Le()),h(this,"config"),this.moduleName=e,this.logger=new j(this.moduleName)}set status(e){throw new Error("Method not implemented.")}run(){throw new Error("Method not implemented.")}}h(H,"runOnMultiplePages",!1),h(H,"runAt","document-body"),h(H,"onFrame","target"),h(H,"runAfterDefault",!0);function z(e,t=200,i=1e4){return new Promise(((o,s)=>{const a=Date.now(),n=new Set(e),r={},l=setInterval((()=>{Object.assign(r,function(e){const t={},i=new Set(e);for(const e of i)t[e]=null;for(const e of document.cookie.split("; ")){const[o,...s]=e.split("="),a=s.join("=");if(i.has(o)&&(t[o]=decodeURIComponent(a),i.delete(o),0===i.size))break}return t}(n));for(const e in r)null!==r[e]&&n.delete(e);0===n.size?(clearInterval(l),o(r)):-1!==i&&Date.now()-a>i&&(clearInterval(l),s("获取以下Cookies超时: "+[...n]))}),t)}))}const F=Object.freeze(Object.defineProperty({__proto__:null,Default_BilibiliLive:class extends H{getBilibiliLive(){return this.logger.log("unsafeWindow.BilibiliLive",v.BilibiliLive),new Promise((e=>{0===v.BilibiliLive.UID?v.BilibiliLive=new Proxy(v.BilibiliLive,{set:(t,i,o)=>(t[i]=o,"UID"===i&&(v.BilibiliLive=t,e(v.BilibiliLive)),!0)}):e(v.BilibiliLive)}))}async run(){C().BilibiliLive=await this.getBilibiliLive()}},Default_Cookies:class extends H{getCookies(){return z(["bili_jct","LIVE_BUVID"])}async run(){C().cookies=await this.getCookies()}},Default_DailyRewardInfo:class extends H{async getDailyRewardInfo(){const e=this.moduleStore.moduleConfig.DailyTasks.MainSiteTasks;if(!Object.values(e).some((e=>e.enabled&&!B(e._lastCompleteTime))))return Promise.resolve(null);try{const e=await $.reward();return this.logger.log("BAPI.main.reward response",e),0===e.code?Promise.resolve(e.data):(this.logger.error("获取主站每日任务完成情况失败",e.message),Promise.reject(e.message))}catch(e){return this.logger.error("获取主站每日任务完成情况出错",e),Promise.reject(e)}}async run(){const e=C();e.dailyRewardInfo=await this.getDailyRewardInfo(),setTimeout((async()=>{e.dailyRewardInfo=await this.getDailyRewardInfo()}),M(0,4).ms)}},Default_DynamicVideos:class extends H{async getDynamicVideos(){const e=this.moduleStore.moduleConfig.DailyTasks.MainSiteTasks;if(!Object.entries(e).filter((([e])=>["watch","share","coin"].includes(e))).some((e=>e[1].enabled&&!B(e[1]._lastCompleteTime))))return Promise.resolve(null);try{const e=await $.dynamicAll("video");return this.logger.log("BAPI.main.dynamicAll response",e),0===e.code?Promise.resolve(e.data.items):(this.logger.error("获取主站每日任务完成情况失败",e.message),Promise.reject(e.message))}catch(e){return this.logger.error("获取主站每日任务完成情况出错",e),Promise.reject(e)}}async run(){const e=C();e.dynamicVideos=await this.getDynamicVideos(),setTimeout((async()=>{e.dynamicVideos=await this.getDynamicVideos()}),M(0,4).ms)}},Default_FansMetals:class extends H{async getFansMetals(e=1/0,t=!1){const i=this.moduleStore.moduleConfig.DailyTasks.LiveTasks.medalTasks;if(!t&&!Object.entries(i).filter((([e])=>["danmu","like","watch"].includes(e))).some((e=>e[1].enabled&&!B(e[1]._lastCompleteTime))))return Promise.resolve(null);{const t=[];let i=1;try{const o=await O.fansMedalPanel(1);if(this.logger.log("BAPI.live.fansMedalPanel(1) response",o),0!==o.code)return this.logger.error("获取粉丝勋章列表第1页失败",o.message),Promise.reject(o.message);i=o.data.page_info.total_page,t.push(...o.data.special_list,...o.data.list);for(let s=2;s<=Math.min(i,e);s++){const e=await O.fansMedalPanel(s);if(this.logger.log(`BAPI.live.fansMedalPanel(${s}) response`,e),0!==o.code)return this.logger.error(`获取粉丝勋章列表第${s}页失败`,o.message),t;t.push(...e.data.list),await S(250)}return Promise.resolve(t)}catch(e){return this.logger.error("获取粉丝勋章列表出错",e),Promise.reject(e)}}}async run(){const e=C();e.fansMedals=await this.getFansMetals(),setTimeout((async()=>{const t=await this.getFansMetals(1,!0);null==t||t.forEach((t=>{var i;(null==(i=e.fansMedals)?void 0:i.every((e=>e.medal.target_id!==t.medal.target_id)))&&e.fansMedals.push(t)}))}),M(0,4).ms),Le().emitter.on("Default_FansMedals",(async()=>{e.fansMedals=await this.getFansMetals(1/0,!0)}))}},Default_UserInfo:class extends H{async getUserInfo(){try{const e=await $.nav();return this.logger.log("BAPI.main.nav response",e),0===e.code?Promise.resolve(e.data):(this.logger.error("获取用户信息失败",e.message),Promise.reject(e.message))}catch(e){return this.logger.error("获取用户信息出错",e),Promise.reject(e)}}async run(){const e=C();e.userInfo=await this.getUserInfo(),setTimeout((async()=>{e.userInfo=await this.getUserInfo()}),M(0,4).ms)}}},Symbol.toStringTag,{value:"Module"}));const q=document.querySelector.bind(document);document.querySelectorAll.bind(document);const G=document.createElement.bind(document),K=()=>v.self===v.top;class W{constructor(e,t,i,o,s,a=!1){h(this,"logger",new j("RoomHeart")),h(this,"config"),h(this,"isLast"),h(this,"watchedSeconds"),h(this,"timer"),h(this,"stop",!1),h(this,"areaID"),h(this,"parentID"),h(this,"roomID"),h(this,"ruid"),h(this,"seq",0),h(this,"buvid",(null==(d=C().cookies)?void 0:d.LIVE_BUVID)??function(e){const t=`; ${document.cookie}`.split(`; ${e}=`);return 2===t.length?t.pop().split(";").shift():null}("LIVE_BUVID")),h(this,"uuid","xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,(function(e){const t=16*Math.random()|0;return("x"===e?t:3&t|8).toString(16)}))),h(this,"device",[this.buvid,this.uuid]),h(this,"ua",navigator.userAgent),h(this,"heartBeatInterval"),h(this,"secretKey"),h(this,"secretRule"),h(this,"timestamp"),this.roomID=e,this.areaID=t,this.parentID=i,this.ruid=o,this.watchedSeconds=s,this.isLast=a,this.config=Le().moduleConfig.DailyTasks.LiveTasks.medalTasks.watch}set status(e){Le().moduleStatus.DailyTasks.LiveTasks.medalTasks.watch=e}get id(){return[this.parentID,this.areaID,this.seq,this.roomID]}start(){if(this.buvid)return this.timer=setTimeout((()=>this.stop=!0),M(0,0).ms),this.E();this.logger.error(`缺少buvid,无法为直播间 ${this.roomID} 执行观看直播任务,请尝试刷新页面`)}async E(){if(this.stop)this.status="";else try{const e=await A.E(this.id,this.device,this.ruid);this.logger.log(`BAPI.liveTrace.E(${this.id}, ${this.device}, ${this.ruid}) response`,e),0===e.code?(this.seq+=1,({heartbeat_interval:this.heartBeatInterval,secret_key:this.secretKey,secret_rule:this.secretRule,timestamp:this.timestamp}=e.data),setTimeout((()=>this.X()),1e3*this.heartBeatInterval)):this.logger.error(`BAPI.liveTrace.E(${this.id}, ${this.device}, ${this.ruid}) 失败`,e.message)}catch(e){this.logger.error(`BAPI.liveTrace.E(${this.id}, ${this.device}, ${this.ruid}) 出错`,e)}}async X(){if(this.stop)this.status="";else try{const e={id:JSON.stringify(this.id),device:JSON.stringify(this.device),ets:this.timestamp,benchmark:this.secretKey,time:this.heartBeatInterval,ts:L(),ua:this.ua},t=this.sypder(JSON.stringify(e),this.secretRule),i=await A.X(t,this.id,this.device,this.ruid,this.timestamp,this.secretKey,this.heartBeatInterval,e.ts);if(this.logger.log(`BAPI.liveTrace.X(${t}, ${this.id}, ${this.device}, ${this.ruid}, ${this.timestamp}, ${this.secretKey}, ${this.heartBeatInterval}, ${e.ts}) response`,i),0===i.code){if(this.seq+=1,this.watchedSeconds+=this.heartBeatInterval,this.isLast&&(this.config._watchedSecondsToday=this.watchedSeconds),this.watchedSeconds>=60*this.config.time)return this.isLast&&(this.config._lastCompleteTime=L(),this.logger.log("观看直播任务已完成"),this.status="done"),void clearTimeout(this.timer);({heartbeat_interval:this.heartBeatInterval,secret_key:this.secretKey,secret_rule:this.secretRule,timestamp:this.timestamp}=i.data),setTimeout((()=>this.X()),1e3*this.heartBeatInterval)}else this.logger.error(`BAPI.liveTrace.X(${t}, ${this.id}, ${this.device}, ${this.ruid}, ${this.timestamp}, ${this.secretKey}, ${this.heartBeatInterval}) 失败`,i.message)}catch(e){this.logger.error(`BAPI.liveTrace.X(s, ${this.id}, ${this.device}, ${this.ruid}, ${this.timestamp}, ${this.secretKey}, ${this.heartBeatInterval}) 出错`,e)}}sypder(e,t){const i=JSON.parse(e),[o,s,n,r]=JSON.parse(i.id),[l,c]=JSON.parse(i.device),d=i.benchmark,u={platform:"web",parent_id:o,area_id:s,seq_id:n,room_id:r,buvid:l,uuid:c,ets:i.ets,time:i.time,ts:i.ts};let h=JSON.stringify(u);for(const e of t)switch(e){case 0:default:h=a.HmacMD5(h,d).toString(a.enc.Hex);break;case 1:h=a.HmacSHA1(h,d).toString(a.enc.Hex);break;case 2:h=a.HmacSHA256(h,d).toString(a.enc.Hex);break;case 3:h=a.HmacSHA224(h,d).toString(a.enc.Hex);break;case 4:h=a.HmacSHA512(h,d).toString(a.enc.Hex);break;case 5:h=a.HmacSHA384(h,d).toString(a.enc.Hex)}return h}}class X extends H{constructor(){super(...arguments),h(this,"medalTasksConfig",this.moduleStore.moduleConfig.DailyTasks.LiveTasks.medalTasks),h(this,"config",this.medalTasksConfig.watch)}set status(e){this.moduleStore.moduleStatus.DailyTasks.LiveTasks.medalTasks.watch=e}getRoomidUidList(){const e=C();return e.filteredFansMedals?e.filteredFansMedals.filter((e=>e.medal.level<20&&(this.medalTasksConfig.isWhiteList?this.medalTasksConfig.roomidList.includes(e.room_info.room_id):!this.medalTasksConfig.roomidList.includes(e.room_info.room_id)))).map((e=>[e.room_info.room_id,e.medal.target_id])).slice(0,199):null}async getAreaInfo(e){try{const t=await O.getInfoByRoom(e);if(this.logger.log(`BAPI.live.getInfoByRoom(${e}) response`,t),0===t.code){const e=t.data.room_info;return[e.area_id,e.parent_area_id]}return[-1,-1]}catch(t){return this.logger.error(`获取指定直播间的 area_id 和 parent_area_id(roomid = ${e}) 出错`,t),[-1,-1]}}async run(){if(this.logger.log("观看直播模块开始运行"),this.config.enabled)if(B(this.config._lastCompleteTime))I(0,0,0,5)?this.logger.log("昨天的观看直播任务已经完成过了,等到今天的00:05再执行"):(this.logger.log("今天已经完成过观看直播任务了"),this.status="done");else{this.status="running",B(this.config._lastWatchTime,0,0)?this.config._watchedSecondsToday-=this.config._watchedSecondsToday%300:this.config._watchedSecondsToday=0,this.config._lastWatchTime=L();const e=this.getRoomidUidList();if(e)if(0===e.length)this.status="done",this.config._lastCompleteTime=L();else for(let t=0;t0&&a>0&&new W(i,s,a,o,this.config._watchedSecondsToday,t===e.length-1).start(),await S(3e3)}}const e=M();setTimeout((()=>this.run()),e.ms),this.logger.log("距离观看直播模块下次运行时间:",e.str)}}h(X,"runAt","window-load");class J extends H{constructor(){super(...arguments),h(this,"config",this.moduleStore.moduleConfig.EnhanceExperience.switchLiveStreamQuality)}async waitForPlayer(){return new Promise(((e,t)=>{const i=v.top?v.top:v,o=setInterval((()=>{i.livePlayer&&Object.prototype.hasOwnProperty.call(i.livePlayer,"switchQuality")&&Object.prototype.hasOwnProperty.call(i.livePlayer,"getPlayerInfo")&&(clearInterval(o),clearTimeout(s),e(i.livePlayer))}),200),s=setTimeout((()=>{clearInterval(o),clearTimeout(s),t("等待播放器超时")}),1e4)}))}async switchQuality(e){const t=e.getPlayerInfo();0===t.liveStatus?this.logger.log("当前直播间未开播,无需切换画质"):setTimeout((()=>{const i=t.qualityCandidates.find((({desc:e})=>e===this.config.qualityDesc));i?t.quality!==i.qn?(e.switchQuality(i.qn),this.logger.log(`已将画质切换为${this.config.qualityDesc}`,i)):this.logger.log("当前画质已经是目标画质了,无需切换画质"):this.logger.log("当前直播不支持目标画质,保持默认画质")}),K()?2500:5e3)}async run(){if(this.logger.log("自动切换画质模块开始运行"),this.config.enabled)try{const e=await this.waitForPlayer();this.switchQuality(e)}catch(e){this.logger.error("自动切换画质模块出错",e)}}}h(J,"runOnMultiplePages",!0),h(J,"runAt","window-load"),h(J,"runAfterDefault",!1);class Q extends H{constructor(){super(...arguments),h(this,"config",this.moduleStore.moduleConfig.EnhanceExperience.banp2p)}banP2P(){const e=["RTCPeerConnection","mozRTCPeerConnection","webkitRTCPeerConnection"];for(const t of e)Object.prototype.hasOwnProperty.call(v,t)&&Object.defineProperty(v,t,{value:class{constructor(){}addEventListener(){}removeEventListener(){}createDataChannel(){return{close:function(){}}}createOffer(){return Promise.resolve()}setLocalDescription(){return Promise.resolve()}close(){}setRemoteDescription(){return Promise.resolve()}createAnswer(){}},enumerable:!1,writable:!1,configurable:!1})}run(){if(this.logger.log("禁用P2P模块开始运行"),this.config.enabled)try{this.banP2P()}catch(e){this.logger.error("禁用P2P失败",e)}}}h(Q,"runOnMultiplePages",!0),h(Q,"runAt","document-start"),h(Q,"onFrame","all"),h(Q,"runAfterDefault",!1);var Y=["load","loadend","timeout","error","readystatechange","abort"],Z="__origin_xhr";function ee(e,t){var i={};for(var o in e)i[o]=e[o];return i.target=i.currentTarget=t,i}var te=Y[0],ie=Y[1],oe=Y[2],se=Y[3],ae=Y[4],ne=Y[5],re="prototype";function le(e,t){return function(e,t){var i=e.onRequest,o=e.onResponse,s=e.onError;function a(e,t){var i,s=new ge(e),a=function(){var e=t.responseType;return e&&"text"!==e?"json"===e&&"object"==typeof JSON&&-1!==((navigator||0).userAgent||"").indexOf("Trident")?JSON.parse(t.responseText):t.response:t.responseText},n={get response(){return a&&(i=a(),a=null),i},set response(e){return a=null,i=e,!0},status:t.status,statusText:t.statusText,config:e.config,headers:e.resHeader||e.getAllResponseHeaders().split("\r\n").reduce((function(e,t){if(""===t)return e;var i=t.split(":");return e[i.shift()]=function(e){return e.replace(/^\s+|\s+$/g,"")}(i.join(":")),e}),{})};if(!o)return s.resolve(n);o(n,s)}function n(e,t,i,o){var a=new pe(e);i={config:e.config,error:i,type:o},s?s(i,a):a.next(i)}function r(){return!0}function l(e){return function(t,i){return n(t,this,i,e),!0}}function c(e,t){return 4===e.readyState&&0!==e.status?a(e,t):4!==e.readyState&&de(e,ae),!0}var{originXhr:d,unHook:u}=function(e,t){var i=(t=t||window).XMLHttpRequest,o=function(){for(var e=new i,t=0;t(e.onRequest&&_e.push(e.onRequest),e.onResponse&&Te.push(e.onResponse),we||((e=>{e.fetch=async(e,t)=>{for(const i of _e){const o=new ve;if(i.apply(v,[{input:e,init:t},o]),o._resolve)return o._resolve;if(o._error)throw o._error;if(!o._next)break;e=o._input,t=o._init}let i=await fe.apply(v,[e,t]);for(const e of Te){const t=new ye;if(e.apply(v,[i,t]),t._resolve)return t._resolve;if(t._error)throw t._error;if(!t._next)break;i=t._response}return i}})(t),we=!0),{unProxy:()=>{e.onRequest&&_e.splice(_e.findIndex((t=>t===e.onRequest)),1),e.onResponse&&Te.splice(Te.findIndex((t=>t===e.onResponse)),1)},unHook:()=>{t.fetch=fe,_e=[],Te=[]},originFetch:fe}),xe=class e extends H{constructor(){super(...arguments),h(this,"config",this.moduleStore.moduleConfig.EnhanceExperience.noReport)}static isTargetURL(e){return!(!e.includes("//data.bilibili.com")&&!e.includes("//data.bilivideo.com"))}hookProperties(e){Object.defineProperty(e.navigator,"sendBeacon",{value:()=>!0}),Object.defineProperties(e,{reportObserver:{get:()=>({reportCustomData:function(){}}),set(){}},reportConfig:{get:()=>({}),set(){}}})}async ajaxHook(){const t={onRequest:(t,i)=>{e.isTargetURL(t.url)?i.resolve({config:t,status:200,headers:{"Content-Type":"text/plain; charset=utf-8"},response:"ok"}):i.next(t)}},i={onRequest(t,i){const o="string"==typeof(s=t.input)?s:s instanceof URL?s.toString():s instanceof Request?s.url:"Incorrect input";var s;e.isTargetURL(o)?i.resolve(new Response("ok")):i.next(t)},onResponse(e,t){t.next(e)}};this.hookProperties(v),le(t,v),ke(i,v)}run(){if(this.logger.log("拦截日志数据上报模块开始运行"),this.config.enabled)try{this.ajaxHook()}catch(e){this.logger.error("拦截日志数据上报失败",e)}}};h(xe,"runOnMultiplePages",!0),h(xe,"runAt","document-start"),h(xe,"onFrame","all"),h(xe,"runAfterDefault",!1);let be=xe;class Ce extends H{constructor(){super(...arguments),h(this,"config",this.moduleStore.moduleConfig.EnhanceExperience.noSleep)}run(){this.logger.log("屏蔽挂机检测模块开始运行"),this.config.enabled&&setInterval((()=>{document.dispatchEvent(new MouseEvent("mousemove"))}),3e5)}}h(Ce,"runOnMultiplePages",!0),h(Ce,"runAt","window-load"),h(Ce,"runAfterDefault",!1);class Ve extends H{constructor(){super(...arguments),h(this,"config",this.moduleStore.moduleConfig.RemoveElement.removePKBox)}removePKNode(){m("#awesome-pk-vm { display: none !important }")}removePKToast(){const e=["主播即将结束PK","连线断开中"];new MutationObserver((t=>{for(const i of t)i.addedNodes.forEach((t=>{t instanceof HTMLElement&&t.classList.contains("link-toast")&&e.some((e=>{var i;return null==(i=t.textContent)?void 0:i.includes(e)}))&&(t.style.display="none")}))})).observe(document.body,{childList:!0})}async run(){this.logger.log("移除大乱斗元素模块开始运行"),this.config.enabled&&(this.removePKNode(),this.removePKToast())}}h(Ve,"runOnMultiplePages",!0);class Se extends H{constructor(){super(...arguments),h(this,"config",this.moduleStore.moduleConfig.RemoveElement.removeLiveWaterMark)}async run(){this.logger.log("移除直播间水印模块开始运行"),this.config.enabled&&m(".web-player-icon-roomStatus { display: none !important }")}}h(Se,"runOnMultiplePages",!0);class Pe extends H{constructor(){super(...arguments),h(this,"config",this.moduleStore.moduleConfig.RemoveElement.removeShopPopover)}async run(){this.logger.log("移除直播间小黄车弹窗模块开始运行"),this.config.enabled&&m(".shop-popover { display: none !important }")}}h(Pe,"runOnMultiplePages",!0);class Ne extends H{constructor(){super(...arguments),h(this,"config",this.moduleStore.moduleConfig.RemoveElement.removeGameParty)}async run(){this.logger.log("移除直播间幻星派对标志模块开始运行"),this.config.enabled&&m("#game-id { display: none !important }")}}h(Ne,"runOnMultiplePages",!0);const De=Object.freeze(Object.defineProperty({__proto__:null,DailyTask_LiveTask_AppUserTask:class extends H{constructor(){super(...arguments),h(this,"config",this.moduleStore.moduleConfig.DailyTasks.LiveTasks.appUser)}set status(e){this.moduleStore.moduleStatus.DailyTasks.LiveTasks.appUser=e}async getUserTaskProgress(){try{const e=await O.getUserTaskProgress();return this.logger.log("BAPI.live.getUserTaskProgress response",e),0===e.code?e.data:(this.logger.error("获取APP用户任务进度失败",e.message),this.status="error",null)}catch(e){return this.logger.error("获取APP用户任务进度出错",e),this.status="error",null}}async userTaskReceiveRewards(){try{const e=await O.userTaskReceiveRewards();return this.logger.log("BAPI.live.userTaskReceiveRewards response",e),0===e.code?e.data:(this.logger.error("获取APP用户任务进度失败",e.message),this.status="error",null)}catch(e){return this.logger.error("获取APP用户任务进度出错",e),this.status="error",null}}async sendDanmu(e,t){try{const i=await O.sendMsg(e,t);this.logger.log(`BAPI.live.sendMsg(${e}, ${t})`,i),0===i.code?this.logger.log(`在直播间 ${t} 发送弹幕 ${e} 成功`):this.logger.error(`在直播间 ${t} 发送弹幕 ${e} 失败`,i.message)}catch(i){this.logger.error(`在直播间 ${t} 发送弹幕 ${e} 出错`,i)}}async run(){if(this.logger.log("APP用户任务模块开始运行"),this.logger.warn("APP用户任务暂时没有,该模块不运行"),this.config.enabled=!1,this.config.enabled)if(B(this.config._lastCompleteTime))I(0,0,0,5)?this.logger.log("昨天的APP用户任务已经完成过了,等到今天的00:05再执行"):(this.logger.log("今天已经完成过APP用户任务了"),this.status="done");else{this.status="running";const e=this.moduleStore.moduleConfig.DailyTasks.LiveTasks.medalTasks.danmu;e.enabled&&!B(e._lastCompleteTime)&&await function(e,t=-1){return new Promise((i=>{Le().emitter.once(e,(e=>i(e))),-1!==t&&setTimeout(i,t)}))}("DailyTask_LiveTask_AppUserTask",3e5);const t=await this.getUserTaskProgress();if(t)if(-1!==t.is_surplus)if(3===t.day_task.status)this.config._lastCompleteTime=L(),this.status="done";else if(2===t.day_task.status){const e=await this.userTaskReceiveRewards();if(e){const t=e.num;t?this.logger.log(`领取奖励成功:${t}个电池`):this.logger.warn("领取奖励失败:未领取到电池"),this.config._lastCompleteTime=L(),this.status="done"}}else{let e=t.day_task.target-t.day_task.progress;for(;e>0;)await this.sendDanmu(`打卡${e}`,22474988),await S(2e3),e--;const i=await this.userTaskReceiveRewards();if(i){const e=i.num;e?this.logger.log(`领取奖励成功:${e}个电池`):this.logger.warn("领取奖励失败:未领取到电池"),this.config._lastCompleteTime=L(),this.status="done"}}else this.logger.log("今天APP用户任务的奖励已经没有了,明天早点来吧"),this.config._lastCompleteTime=L(),this.status="done"}const e=M();setTimeout((()=>this.run()),e.ms),this.logger.log("距离APP用户任务模块下次运行时间:",e.str)}},DailyTask_LiveTask_DanmuTask:class extends H{constructor(){super(...arguments),h(this,"medalTasksConfig",this.moduleStore.moduleConfig.DailyTasks.LiveTasks.medalTasks),h(this,"config",this.medalTasksConfig.danmu)}set status(e){this.moduleStore.moduleStatus.DailyTasks.LiveTasks.medalTasks.danmu=e}getRoomidList(){const e=C();return e.filteredFansMedals?e.filteredFansMedals.filter((e=>e.medal.level<20&&910884!=e.room_info.room_id&&(this.medalTasksConfig.isWhiteList?this.medalTasksConfig.roomidList.includes(e.room_info.room_id):!this.medalTasksConfig.roomidList.includes(e.room_info.room_id)))).map((e=>e.room_info.room_id)).slice(0,199):(this.status="error",null)}async sendDanmu(e,t){try{const i=await O.sendMsg(e,t);this.logger.log(`BAPI.live.sendMsg(${e}, ${t})`,i),0===i.code?this.logger.log(`在直播间 ${t} 发送弹幕 ${e} 成功`):this.logger.error(`在直播间 ${t} 发送弹幕 ${e} 失败`,i.message)}catch(i){this.logger.error(`在直播间 ${t} 发送弹幕 ${e} 出错`,i)}}async run(){if(this.logger.log("发送弹幕模块开始运行"),this.config.enabled)if(B(this.config._lastCompleteTime))I(0,0,0,5)?this.logger.log("昨天的发送弹幕任务已经完成过了,等到今天的00:05再执行"):(this.logger.log("今天已经完成过发送弹幕任务了"),this.status="done");else{this.status="running";const e=this.getRoomidList();if(e){const t=this.config.list;for(let i=0;ithis.run()),e.ms),this.logger.log("距离发送弹幕模块下次运行时间:",e.str)}},DailyTask_LiveTask_LikeTask:class extends H{constructor(){super(...arguments),h(this,"medalTasksConfig",this.moduleStore.moduleConfig.DailyTasks.LiveTasks.medalTasks),h(this,"config",this.medalTasksConfig.like)}set status(e){this.moduleStore.moduleStatus.DailyTasks.LiveTasks.medalTasks.like=e}getRoomidUidList(){const e=C();return e.filteredFansMedals?e.filteredFansMedals.filter((e=>(!!this.config.includeHighLevelMedals||e.medal.level<20)&&(this.medalTasksConfig.isWhiteList?this.medalTasksConfig.roomidList.includes(e.room_info.room_id):!this.medalTasksConfig.roomidList.includes(e.room_info.room_id)))).map((e=>[e.room_info.room_id,e.medal.target_id])).slice(0,199):(this.status="error",null)}async like(e,t){try{const i=await O.likeReport(e,t);this.logger.log(`BAPI.live.likeReport(${e}, ${t})`,i),0===i.code?this.logger.log(`给主播点赞 房间号 = ${e} 主播UID = ${t} 成功`):this.logger.error(`给主播点赞 房间号 = ${e} 主播UID = ${t} 失败`,i.message)}catch(i){this.logger.error(`给主播点赞 房间号 = ${e} 主播UID = ${t} 出错`,i)}}async run(){if(this.logger.log("给主播点赞模块开始运行"),this.config.enabled)if(B(this.config._lastCompleteTime))I(0,0,0,5)?this.logger.log("昨天的给主播点赞任务已经完成过了,等到今天的00:05再执行"):(this.logger.log("今天已经完成过给主播点赞任务了"),this.status="done");else{this.status="running";const e=this.getRoomidUidList();if(e){for(const[t,i]of e)await this.like(t,i),await S(2e3);this.config._lastCompleteTime=L(),this.status="done",this.logger.log("给主播点赞任务已完成")}}const e=M();setTimeout((()=>this.run()),e.ms),this.logger.log("距离给主播点赞模块下次运行时间:",e.str)}},DailyTask_LiveTask_SignTask:class extends H{constructor(){super(...arguments),h(this,"config",this.moduleStore.moduleConfig.DailyTasks.LiveTasks.sign)}set status(e){this.moduleStore.moduleStatus.DailyTasks.LiveTasks.sign=e}async getSignInfo(){try{const e=await O.getSignInfo();return this.logger.log("BAPI.live.getSignInfo response",e),0===e.code?e.data:(this.logger.error("获取直播签到信息失败",e.message),null)}catch(e){return this.logger.error("获取直播签到信息出错",e),null}}async sign(){try{const e=await O.doSign();if(this.logger.log("BAPI.live.doSign response",e),0===e.code){this.logger.log("直播签到成功,获得奖励:",e.data.text),this.config._lastCompleteTime=L(),this.status="done",this.logger.log("直播签到任务已完成");const t=q(".checkin-btn");t&&t.remove()}else this.logger.error("直播签到失败",e.message),this.status="error"}catch(e){this.logger.error("执行直播签到任务出错",e),this.status="error"}}async run(){if(this.logger.log("直播签到模块开始运行"),this.config.enabled)if(B(this.config._lastCompleteTime))I(0,0,0,5)?this.logger.log("昨天的直播签到任务已经完成过了,等到今天的00:05再执行"):(this.logger.log("今天已经完成过直播签到任务了"),this.status="done");else{this.status="running";const e=await this.getSignInfo();e?0===e.status?await this.sign():(this.config._lastCompleteTime=L(),this.status="done"):await this.sign()}const e=M();setTimeout((()=>this.run()),e.ms),this.logger.log("距离直播签到模块下次运行时间:",e.str)}},DailyTask_LiveTask_WatchTask:X,DailyTask_MainSiteTask_CoinTask:class extends H{constructor(){super(...arguments),h(this,"config",this.moduleStore.moduleConfig.DailyTasks.MainSiteTasks.coin),h(this,"MAX_COIN",1)}set status(e){this.moduleStore.moduleStatus.DailyTasks.MainSiteTasks.coin=e}getDynamicVideoIds(){const e=C();return e.dynamicVideos?e.dynamicVideos.map((e=>{const t=e.modules.module_dynamic.major.archive;return{aid:t.aid,bvid:t.bvid}})):(this.status="error",null)}async getVideoCoinInfo(e,t){try{const i=await $.videoRelation(e,t);return this.logger.log(`BAPI.main.videoRelation(${e}, ${t}) response`,i),0===i.code?i.data.coin:(this.logger.error(`获取视频投币信息失败 aid = ${e} bvid = ${t}`,i.message),0)}catch(i){return this.logger.error(`获取视频投币信息出错 aid = ${e} bvid = ${t}`,i),0}}async coinDynamicVideos(e){const t=this.getDynamicVideoIds();if(t)for(const{aid:i,bvid:o}of t){const t=await this.getVideoCoinInfo(i,o),s=this.MAX_COIN-t;if(s>0){const t=Math.min(s,e),o=await this.coin(i,t);if(0===o){if(0===(e-=t)){this.logger.log("每日投币任务已完成"),this.config._lastCompleteTime=L(),this.status="done";break}}else if(1===o){this.status="error";break}}}}async coin(e,t){try{const i=await $.coinAdd(e,t);return this.logger.log(`BAPI.main.coinAdd(${e}) response`,i),0===i.code?(this.logger.log(`投币成功 视频aid = ${e} 投币数量num = ${t}`),0):-104===i.code?(this.logger.warn("硬币余额不足,每日投币任务终止"),1):(this.logger.error(`投币失败 视频aid = ${e} 投币数量num = ${t}`,i.message),2)}catch(i){return this.logger.error(`投币出错 视频aid = ${e} 投币数量num = ${t}`,i),3}}async run(){if(this.logger.log("每日投币模块开始运行"),this.config.enabled){const e=C();if(B(this.config._lastCompleteTime))I(0,0,0,5)?this.logger.log("昨天的每日投币任务已经完成过了,等到今天的00:05再执行"):(this.logger.log("今天已经完成过每日投币任务了"),this.status="done");else if(this.status="running",e.dailyRewardInfo){const t=e.dailyRewardInfo.coins/10;if(t(C().userInfo.money??5)?(this.logger.log("硬币余额不足,不执行每日投币任务"),this.status="done"):await this.coinDynamicVideos(e)}else this.config._lastCompleteTime=L(),this.status="done",this.logger.log("每日投币任务已完成")}}const e=M();setTimeout((()=>this.run()),e.ms),this.logger.log("距离每日投币模块下次运行时间:",e.str)}},DailyTask_MainSiteTask_LoginTask:class extends H{constructor(){super(...arguments),h(this,"config",this.moduleStore.moduleConfig.DailyTasks.MainSiteTasks.login)}set status(e){this.moduleStore.moduleStatus.DailyTasks.MainSiteTasks.login=e}async login(){return this.logger.log("每日登录任务已完成"),this.config._lastCompleteTime=L(),this.status="done",Promise.resolve()}async run(){if(this.logger.log("每日登录模块开始运行"),this.config.enabled){const e=C();B(this.config._lastCompleteTime)?I(0,0,0,5)?this.logger.log("昨天的每日登录任务已经完成过了,等到今天的00:05再执行"):(this.logger.log("今天已经完成过每日登录任务了"),this.status="done"):(this.status="running",e.dailyRewardInfo&&!e.dailyRewardInfo.login?await this.login():(this.config._lastCompleteTime=L(),this.status="done"))}const e=M();setTimeout((()=>this.run()),e.ms),this.logger.log("距离每日登录模块下次运行时间:",e.str)}},DailyTask_MainSiteTask_ShareTask:class extends H{constructor(){super(...arguments),h(this,"config",this.moduleStore.moduleConfig.DailyTasks.MainSiteTasks.share)}set status(e){this.moduleStore.moduleStatus.DailyTasks.MainSiteTasks.share=e}getAid(){const e=C();return e.dynamicVideos?e.dynamicVideos[0].modules.module_dynamic.major.archive.aid:"2"}async share(e){try{const t=await $.share(e);this.logger.log(`BAPI.main.share(${e}) response`,t),0===t.code||71e3===t.code?(this.logger.log("每日分享视频任务已完成"),this.config._lastCompleteTime=L(),this.status="done"):(this.logger.error("分享视频失败",t.message),this.status="error")}catch(e){this.logger.error("执行每日分享视频任务出错",e),this.status="error"}}async run(){if(this.logger.log("每日分享视频模块开始运行"),this.config.enabled){const e=C();if(B(this.config._lastCompleteTime))I(0,0,0,5)?this.logger.log("昨天的每日分享任务已经完成过了,等到今天的00:05再执行"):(this.logger.log("今天已经完成过每日分享任务了"),this.status="done");else if(this.status="running",e.dailyRewardInfo&&!e.dailyRewardInfo.share){const e=this.getAid();await this.share(e)}else this.config._lastCompleteTime=L(),this.status="done",this.logger.log("每日分享视频任务已完成")}const e=M();setTimeout((()=>this.run()),e.ms),this.logger.log("距离每日分享视频模块下次运行时间:",e.str)}},DailyTask_MainSiteTask_WatchTask:class extends H{constructor(){super(...arguments),h(this,"config",this.moduleStore.moduleConfig.DailyTasks.MainSiteTasks.watch)}set status(e){this.moduleStore.moduleStatus.DailyTasks.MainSiteTasks.watch=e}getAid(){const e=C();return i.isEmpty(e.dynamicVideos)?"2":e.dynamicVideos[0].modules.module_dynamic.major.archive.aid}async watch(e){try{const t=await $.videoHeartbeat(e);this.logger.log(`BAPI.main.videoHeartbeat(${e}) response`,t),0===t.code?(this.logger.log("每日观看视频任务已完成"),this.config._lastCompleteTime=L(),this.status="done"):(this.logger.error("发送观看视频心跳失败",t.message),this.status="error")}catch(e){this.logger.error("执行每日观看视频任务出错",e),this.status="error"}}async run(){if(this.logger.log("每日观看视频模块开始运行"),this.config.enabled){const e=C();if(B(this.config._lastCompleteTime))I(0,0,0,5)?this.logger.log("昨天的每日观看视频任务已经完成过了,等到今天的00:05再执行"):(this.logger.log("今天已经完成过每日观看视频任务了"),this.status="done");else if(this.status="running",e.dailyRewardInfo&&!e.dailyRewardInfo.watch){const e=this.getAid();await this.watch(e)}else this.config._lastCompleteTime=L(),this.status="done",this.logger.log("每日观看视频任务已完成")}const e=M();setTimeout((()=>this.run()),e.ms),this.logger.log("距离每日观看视频模块下次运行时间:",e.str)}},DailyTask_OtherTask_CoinToSilverTask:class extends H{constructor(){super(...arguments),h(this,"config",this.moduleStore.moduleConfig.DailyTasks.OtherTasks.coinToSilver)}set status(e){this.moduleStore.moduleStatus.DailyTasks.OtherTasks.coinToSilver=e}async exchange(){try{const e=await O.coin2silver(this.config.num);this.logger.log(`BAPI.live.coin2silver{${this.config.num}} response`,e),0===e.code?(this.logger.log("硬币换银瓜子已完成,获得银瓜子:",e.data.silver),this.config._lastCompleteTime=L(),this.status="done"):(this.logger.error("硬币换银瓜子失败",e.message),this.status="error")}catch(e){this.logger.error("硬币换银瓜子出错",e),this.status="error"}}async run(){this.logger.log("硬币换银瓜子模块开始运行"),this.config.enabled&&(B(this.config._lastCompleteTime)?I(0,0,0,5)?this.logger.log("昨天的硬币换银瓜子任务已经完成过了,等到今天的00:05再执行"):(this.logger.log("今天已经完成过硬币换银瓜子任务了"),this.status="done"):(this.status="running",await this.exchange()));const e=M();setTimeout((()=>this.run()),e.ms),this.logger.log("硬币换银瓜子模块下次运行时间:",e.str)}},DailyTask_OtherTask_GetYearVipPrivilegeTask:class extends H{constructor(){super(...arguments),h(this,"config",this.moduleStore.moduleConfig.DailyTasks.OtherTasks.getYearVipPrivilege)}set status(e){this.moduleStore.moduleStatus.DailyTasks.OtherTasks.getYearVipPrivilege=e}async myPrivilege(){try{const e=await $.vip.myPrivilege();if(this.logger.log("BAPI.main.vip.myPrivilege response",e),0===e.code)return e.data.list;this.logger.error("获取年度大会员权益信息失败",e.message),this.status="error"}catch(e){this.logger.error("获取年度大会员权益信息出错",e),this.status="error"}}async receivePrivilege(e){try{const t=await $.vip.receivePrivilege(e);this.logger.log(`BAPI.main.vip.receivePrivilege(${e}) response`,t),0===t.code?this.logger.log(`领取年度大会员权益(type = ${e})成功`):this.logger.error(`领取年度大会员权益(type = ${e})失败`,t.message)}catch(t){this.logger.error(`领取年度大会员权益(type = ${e})出错`,t)}}isYearVip(){const e=C().userInfo;return!(!e||1!==e.vip.status||2!==e.vip.type)||(this.logger.log("当前账号不是年度大会员,不领取权益"),!1)}async run(){if(this.logger.log("领取年度大会员权益模块开始运行"),this.config.enabled){if(this.isYearVip())if(E()>=this.config._nextReceiveTime){this.status="running";const e=await this.myPrivilege();if(e){for(const t of e)2===t.vip_type?0===t.state?await this.receivePrivilege(t.type):this.logger.log(`该权益(type = ${t.type})已经领取过了`):this.logger.warn("发现不属于年度大会员的权益",t);this.status="done",this.config._nextReceiveTime=Math.max(...e.map((e=>e.period_end_unix)))}}else{const e=this.config._nextReceiveTime-E();e<86400?(this.logger.log("领取年度大会员权益模块下次运行时间:",s.DateTime.fromSeconds(this.config._nextReceiveTime).toJSDate()),setTimeout((()=>this.run()),1e3*e)):this.logger.log("距离下次领取年度大会员权益的时间超过一天,不计划下次运行")}}else{const e=M(0,0);setTimeout((()=>this.run()),e.ms),this.logger.log("领取年度大会员权益模块下次运行时间:",e.str)}}},DailyTask_OtherTask_GroupSignTask:class extends H{constructor(){super(...arguments),h(this,"config",this.moduleStore.moduleConfig.DailyTasks.OtherTasks.groupSign)}set status(e){this.moduleStore.moduleStatus.DailyTasks.OtherTasks.groupSign=e}async getGroupidOwneruidList(){try{const e=await U.myGroups();if(this.logger.log("BAPI.vc.myGroups response",e),0===e.code)return e.data.list.map((e=>[e.group_id,e.owner_uid]));this.logger.error("获取应援团信息失败",e.message),this.status="error"}catch(e){this.logger.error("获取应援团信息出错",e),this.status="error"}}async sign(e,t){try{const i=await U.signIn(e,t);this.logger.log(`BAPI.vc.signIn(${e}, ${t}) response`,i),0===i.code?this.logger.log(`应援团签到 应援团ID = ${e} 拥有者UID = ${t} 成功, 粉丝勋章亲密度+${i.data.add_num}`):this.logger.error(`应援团签到 应援团ID = ${e} 拥有者UID = ${t} 失败`,i.message)}catch(i){this.logger.error(`应援团签到 应援团ID = ${e} 拥有者UID = ${t} 出错`,i)}}async run(){if(this.logger.log("应援团签到模块开始运行"),this.config.enabled)if(B(this.config._lastCompleteTime,8,5))I(0,0,8,5)?this.logger.log("昨天的应援团签到任务已经完成过了,等到今天早上八点零五分再次执行"):(this.logger.log("今天已经完成过应援团签到任务了"),this.status="done");else{this.status="running";const e=await this.getGroupidOwneruidList();if(e){for(const[t,i]of e)await this.sign(t,i),await S(2e3);this.config._lastCompleteTime=L(),this.logger.log("应援团签到任务已完成"),this.status="done"}}const e=M(8,5);setTimeout((()=>this.run()),e.ms),this.logger.log("距离应援团签到模块下次运行时间:",e.str)}},DailyTask_OtherTask_SilverToCoinTask:class extends H{constructor(){super(...arguments),h(this,"config",this.moduleStore.moduleConfig.DailyTasks.OtherTasks.silverToCoin)}set status(e){this.moduleStore.moduleStatus.DailyTasks.OtherTasks.silverToCoin=e}async exchange(){try{const e=await O.silver2coin();this.logger.log("BAPI.live.silver2coin response",e),0===e.code?(this.logger.log("银瓜子换硬币已完成,获得硬币:",e.data.coin),this.config._lastCompleteTime=L(),this.status="done"):403===e.code?(this.logger.log("每天最多只能用银瓜子兑换1个硬币"),this.config._lastCompleteTime=L(),this.status="done"):(this.logger.error("银瓜子换硬币失败",e.message),this.status="error")}catch(e){this.logger.error("银瓜子换硬币出错",e),this.status="error"}}run(){this.logger.log("银瓜子换硬币模块开始运行"),this.config.enabled&&(B(this.config._lastCompleteTime)?I(0,0,0,5)?this.logger.log("昨天的银瓜子换硬币任务已经完成过了,等到今天的00:05再执行"):(this.logger.log("今天已经完成过银瓜子换硬币任务了"),this.status="done"):(this.status="running",this.exchange()));const e=M();setTimeout((()=>this.run()),e.ms),this.logger.log("银瓜子换硬币模块下次运行时间:",e.str)}},EnhanceExperience_BanP2P:Q,EnhanceExperience_NoReport:be,EnhanceExperience_NoSleep:Ce,EnhanceExperience_SwitchLiveStreamQuality:J,RemoveElement_RemoveGameParty:Ne,RemoveElement_RemoveLiveWaterMark:Se,RemoveElement_RemovePKBox:Ve,RemoveElement_RemoveShopPopover:Pe},Symbol.toStringTag,{value:"Module"}));function Be(e){const t={all:i=(i=e)||new Map,on:function(e,t){var o=i.get(e);o?o.push(t):i.set(e,[t])},off:function(e,t){var o=i.get(e);o&&(t?o.splice(o.indexOf(t)>>>0,1):i.set(e,[]))},emit:function(e,t){var o=i.get(e);o&&o.slice().map((function(e){e(t)})),(o=i.get("*"))&&o.slice().map((function(i){i(e,t)}))}};var i;return{...t,once(e,i){t.on(e,(function o(s){t.off(e,o),i(s)}))}}}const Me=t.defineStore("cache",(()=>{const t=e.reactive(w.getCache()),i=e.ref("Main");return e.watch(t,(e=>w.setCache(e))),{cache:t,currentScriptType:i,startMainBLTHAliveHeartBeat:function(){t.lastAliveHeartBeatTime=Date.now();const e=setInterval((()=>t.lastAliveHeartBeatTime=Date.now()),5e3);window.addEventListener("unload",(()=>{clearInterval(e),t.lastAliveHeartBeatTime=0}))},checkCurrentScriptType:function(){0!==t.lastAliveHeartBeatTime&&Date.now()-t.lastAliveHeartBeatTime<8e3?null===sessionStorage.getItem("main_blth_flag")?i.value="Other":i.value="SubMain":(i.value="Main",sessionStorage.setItem("main_blth_flag","🚩"))}}})),Ie={DailyTasks:{MainSiteTasks:{login:"",watch:"",coin:"",share:""},LiveTasks:{sign:"",appUser:"",medalTasks:{danmu:"",like:"",watch:""}},OtherTasks:{groupSign:"",silverToCoin:"",coinToSilver:"",getYearVipPrivilege:""}}},Ee=[],Le=t.defineStore("module",(()=>{const t=e.reactive(w.getModuleConfig()),o=Be(),s=e.reactive(Ie);return e.watch(t,i.debounce((e=>w.setModuleConfig(e)),250,{leading:!0,trailing:!0})),function e(){setTimeout((()=>{N(s,((e,t)=>{i.set(s,t,"")})),e()}),M(0,0).ms)}(),{moduleConfig:t,emitter:o,moduleStatus:s,loadModules:function(e){const t=Me(),i=new j("ModuleStore_LoadModules");if("unknown"===e)for(const[e,i]of Object.entries(De))("all"===i.onFrame||"top"===i.onFrame&&K())&&(i.runOnMultiplePages||"Other"!==t.currentScriptType)&&(i.runAfterDefault||(D(i.runAt).then((()=>new i(e).run())),Ee.push(e)));else{const e=function(){const e=Me(),t=[];for(const[i,o]of Object.entries(F))(o.runOnMultiplePages||"Other"!==e.currentScriptType)&&t.push(new o(i).run());return Promise.all(t)}();for(const[o,s]of Object.entries(De))("target"===s.onFrame||"top"===s.onFrame&&K()&&!Ee.includes(o)||"all"===s.onFrame&&!Ee.includes(o))&&(s.runOnMultiplePages||"Other"!==t.currentScriptType)&&D(s.runAt).then((async()=>{try{s.runAfterDefault&&await e,new s(o).run()}catch(e){i.error(`运行默认模块时出错,模块 ${o} 不运行:`,e)}}))}}}})),Re=e.defineComponent({__name:"MainSiteTasks",setup(t){const i=Le(),o=i.moduleConfig.DailyTasks.MainSiteTasks,s=i.moduleStatus.DailyTasks.MainSiteTasks;return(t,i)=>{const a=e.resolveComponent("el-switch"),n=e.resolveComponent("Info"),r=e.resolveComponent("TaskStatus"),l=e.resolveComponent("el-space"),c=e.resolveComponent("el-row"),d=e.resolveComponent("el-option"),u=e.resolveComponent("el-select"),h=e.resolveComponent("el-text"),m=e.resolveComponent("el-divider"),g=e.resolveComponent("el-link");return e.openBlock(),e.createElementBlock("div",null,[e.createVNode(c,null,{default:e.withCtx((()=>[e.createVNode(l,{wrap:""},{default:e.withCtx((()=>[e.createVNode(a,{modelValue:e.unref(o).login.enabled,"onUpdate:modelValue":i[0]||(i[0]=t=>e.unref(o).login.enabled=t),"active-text":"每日登录"},null,8,["modelValue"]),e.createVNode(n,{id:"DailyTasks.MainSiteTasks.login"}),e.createVNode(r,{status:e.unref(s).login},null,8,["status"])])),_:1})])),_:1}),e.createVNode(c,null,{default:e.withCtx((()=>[e.createVNode(l,{wrap:""},{default:e.withCtx((()=>[e.createVNode(a,{modelValue:e.unref(o).watch.enabled,"onUpdate:modelValue":i[1]||(i[1]=t=>e.unref(o).watch.enabled=t),"active-text":"每日观看视频"},null,8,["modelValue"]),e.createVNode(n,{id:"DailyTasks.MainSiteTasks.watch"}),e.createVNode(r,{status:e.unref(s).watch},null,8,["status"])])),_:1})])),_:1}),e.createVNode(c,null,{default:e.withCtx((()=>[e.createVNode(l,{wrap:""},{default:e.withCtx((()=>[e.createVNode(a,{modelValue:e.unref(o).coin.enabled,"onUpdate:modelValue":i[2]||(i[2]=t=>e.unref(o).coin.enabled=t),"active-text":"每日投币"},null,8,["modelValue"]),e.createVNode(u,{modelValue:e.unref(o).coin.num,"onUpdate:modelValue":i[3]||(i[3]=t=>e.unref(o).coin.num=t),placeholder:"Select",style:{width:"64px"}},{default:e.withCtx((()=>[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(5,(t=>e.createVNode(d,{key:t,label:t,value:t},null,8,["label","value"]))),64))])),_:1},8,["modelValue"]),e.createVNode(h,null,{default:e.withCtx((()=>[e.createTextVNode("个")])),_:1}),e.createVNode(n,{id:"DailyTasks.MainSiteTasks.coin"}),e.createVNode(r,{status:e.unref(s).coin},null,8,["status"])])),_:1})])),_:1}),e.createVNode(c,null,{default:e.withCtx((()=>[e.createVNode(l,{wrap:""},{default:e.withCtx((()=>[e.createVNode(a,{modelValue:e.unref(o).share.enabled,"onUpdate:modelValue":i[4]||(i[4]=t=>e.unref(o).share.enabled=t),"active-text":"每日分享视频"},null,8,["modelValue"]),e.createVNode(n,{id:"DailyTasks.MainSiteTasks.share"}),e.createVNode(r,{status:e.unref(s).share},null,8,["status"])])),_:1})])),_:1}),e.createVNode(m),e.createVNode(c,null,{default:e.withCtx((()=>[e.createVNode(h,null,{default:e.withCtx((()=>[e.createTextVNode("  主站每日任务的完成情况可在")])),_:1}),e.createVNode(g,{class:"el-link-va-baseline",rel:"noreferrer",type:"primary",href:"https://account.bilibili.com/account/home",target:"_blank"},{default:e.withCtx((()=>[e.createTextVNode("个人中心")])),_:1}),e.createVNode(h,null,{default:e.withCtx((()=>[e.createTextVNode("查看。数据更新可能有一定的延时。")])),_:1})])),_:1})])}}}),Oe=(t=>(e.pushScopeId("data-v-45a03c87"),t=t(),e.popScopeId(),t))((()=>e.createElementVNode("br",null,null,-1))),Ae={class:"avatar-wrap"},$e=k(e.defineComponent({__name:"LiveTasks",setup(t){const i=Le(),s=C(),a=i.moduleConfig.DailyTasks.LiveTasks,r=i.moduleStatus.DailyTasks.LiveTasks,l=e.ref(!1),c=e.computed((()=>a.medalTasks.danmu.list.map((e=>({content:e}))))),d=()=>{n.ElMessageBox.prompt("请输入新增的弹幕内容","新增弹幕",{confirmButtonText:"确认",cancelButtonText:"取消",inputPattern:/^.{1,30}$/,inputErrorMessage:"弹幕内容不得为空且长度不能超过30",lockScroll:!1}).then((({value:e})=>{a.medalTasks.danmu.list.push(e)})).catch((()=>{}))},u=e.ref(!1),h=e.computed((()=>{var e;return null==(e=s.filteredFansMedals)?void 0:e.map((e=>({avatar:e.anchor_info.avatar,nick_name:e.anchor_info.nick_name,medal_name:e.medal.medal_name,medal_level:e.medal.level,roomid:e.room_info.room_id})))})),m=e.ref(!1);let g=!0;const p=()=>{if(u.value=!u.value,g)if(s.fansMedals)y(h.value);else{m.value=!0;const t=e.watch(h,(e=>{e&&(t(),g=!1,y(h.value),m.value=!1)}));i.emitter.emit("Default_FansMedals",{module:"LiveTasks"})}},f=e.ref();let v=!1;const y=t=>{if(v=!0,t){const i=e.watch((()=>f.value),(e=>{setTimeout((()=>i()),0),e&&a.medalTasks.roomidList.forEach((i=>e.toggleRowSelection(t.find((e=>e.roomid===i)),!0)))}),{immediate:!0})}v=!1};function w(e){v||(a.medalTasks.roomidList=e.map((e=>e.roomid)))}return(t,i)=>{const s=e.resolveComponent("el-switch"),g=e.resolveComponent("Info"),v=e.resolveComponent("TaskStatus"),y=e.resolveComponent("el-space"),_=e.resolveComponent("el-row"),T=e.resolveComponent("el-divider"),k=e.resolveComponent("SemiSelect"),x=e.resolveComponent("el-icon"),b=e.resolveComponent("el-button"),C=e.resolveComponent("el-option"),V=e.resolveComponent("el-select"),S=e.resolveComponent("el-text"),P=e.resolveComponent("el-link"),N=e.resolveComponent("el-table-column"),D=e.resolveComponent("el-dialog"),B=e.resolveComponent("el-image"),M=e.resolveDirective("loading");return e.openBlock(),e.createElementBlock("div",null,[e.createVNode(_,null,{default:e.withCtx((()=>[e.createVNode(y,{wrap:""},{default:e.withCtx((()=>[e.createVNode(s,{modelValue:e.unref(a).sign.enabled,"onUpdate:modelValue":i[0]||(i[0]=t=>e.unref(a).sign.enabled=t),"active-text":"直播签到"},null,8,["modelValue"]),e.createVNode(g,{id:"DailyTasks.LiveTasks.sign"}),e.createVNode(v,{status:e.unref(r).sign},null,8,["status"])])),_:1})])),_:1}),e.createVNode(_,null,{default:e.withCtx((()=>[e.createVNode(y,{wrap:""},{default:e.withCtx((()=>[e.createVNode(s,{modelValue:e.unref(a).appUser.enabled,"onUpdate:modelValue":i[1]||(i[1]=t=>e.unref(a).appUser.enabled=t),disabled:"","active-text":"APP用户任务"},null,8,["modelValue"]),e.createVNode(g,{id:"DailyTasks.LiveTasks.appUser"}),e.createVNode(v,{status:e.unref(r).appUser},null,8,["status"])])),_:1})])),_:1}),e.createVNode(T),e.createVNode(_,null,{default:e.withCtx((()=>[e.createVNode(y,{wrap:""},{default:e.withCtx((()=>[e.createVNode(s,{modelValue:e.unref(a).medalTasks.like.enabled,"onUpdate:modelValue":i[2]||(i[2]=t=>e.unref(a).medalTasks.like.enabled=t),"active-text":"给主播点赞"},null,8,["modelValue"]),e.createVNode(g,{id:"DailyTasks.LiveTasks.medalTasks.like"}),e.createVNode(v,{status:e.unref(r).medalTasks.like},null,8,["status"])])),_:1})])),_:1}),e.createVNode(_,null,{default:e.withCtx((()=>[e.createVNode(y,{wrap:""},{default:e.withCtx((()=>[e.createVNode(x,null,{default:e.withCtx((()=>[e.createVNode(k)])),_:1}),e.createVNode(s,{modelValue:e.unref(a).medalTasks.like.includeHighLevelMedals,"onUpdate:modelValue":i[3]||(i[3]=t=>e.unref(a).medalTasks.like.includeHighLevelMedals=t),"active-text":"包含等级≥20的粉丝勋章"},null,8,["modelValue"])])),_:1})])),_:1}),e.createVNode(_,null,{default:e.withCtx((()=>[e.createVNode(y,{wrap:""},{default:e.withCtx((()=>[e.createVNode(s,{modelValue:e.unref(a).medalTasks.danmu.enabled,"onUpdate:modelValue":i[4]||(i[4]=t=>e.unref(a).medalTasks.danmu.enabled=t),"active-text":"发送弹幕"},null,8,["modelValue"]),e.createVNode(b,{type:"primary",size:"small",icon:e.unref(o.Edit),onClick:i[5]||(i[5]=e=>l.value=!l.value)},{default:e.withCtx((()=>[e.createTextVNode("编辑弹幕")])),_:1},8,["icon"]),e.createVNode(g,{id:"DailyTasks.LiveTasks.medalTasks.danmu"}),e.createVNode(v,{status:e.unref(r).medalTasks.danmu},null,8,["status"])])),_:1})])),_:1}),e.createVNode(_,null,{default:e.withCtx((()=>[e.createVNode(y,{wrap:""},{default:e.withCtx((()=>[e.createVNode(s,{modelValue:e.unref(a).medalTasks.watch.enabled,"onUpdate:modelValue":i[6]||(i[6]=t=>e.unref(a).medalTasks.watch.enabled=t),"active-text":"观看直播"},null,8,["modelValue"]),e.createVNode(V,{modelValue:e.unref(a).medalTasks.watch.time,"onUpdate:modelValue":i[7]||(i[7]=t=>e.unref(a).medalTasks.watch.time=t),placeholder:"Select",style:{width:"70px"}},{default:e.withCtx((()=>[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(24,(t=>e.createVNode(C,{key:t,label:5*t,value:5*t},null,8,["label","value"]))),64))])),_:1},8,["modelValue"]),e.createVNode(S,null,{default:e.withCtx((()=>[e.createTextVNode("分钟")])),_:1}),e.createVNode(g,{id:"DailyTasks.LiveTasks.medalTasks.watch"}),e.createVNode(v,{status:e.unref(r).medalTasks.watch},null,8,["status"])])),_:1})])),_:1}),e.createVNode(_,null,{default:e.withCtx((()=>[e.createVNode(y,{wrap:""},{default:e.withCtx((()=>[e.createVNode(s,{modelValue:e.unref(a).medalTasks.isWhiteList,"onUpdate:modelValue":i[8]||(i[8]=t=>e.unref(a).medalTasks.isWhiteList=t),"active-text":"白名单","inactive-text":"黑名单"},null,8,["modelValue"]),e.createVNode(b,{type:"primary",size:"small",icon:e.unref(o.Edit),onClick:p},{default:e.withCtx((()=>[e.createTextVNode("编辑名单")])),_:1},8,["icon"]),e.createVNode(g,{id:"DailyTasks.LiveTasks.medalTasks.list"})])),_:1})])),_:1}),e.createVNode(T),e.createVNode(_,null,{default:e.withCtx((()=>[e.createVNode(S,null,{default:e.withCtx((()=>[e.createTextVNode("直播任务相关信息可在")])),_:1}),e.createVNode(P,{class:"el-link-va-baseline",rel:"noreferrer",type:"primary",href:"https://link.bilibili.com/p/help/index#/audience-fans-medal",target:"_blank"},{default:e.withCtx((()=>[e.createTextVNode("帮助中心")])),_:1}),e.createVNode(S,null,{default:e.withCtx((()=>[e.createTextVNode("查看。")])),_:1})])),_:1}),Oe,e.createVNode(_,null,{default:e.withCtx((()=>[e.createVNode(S,{tag:"b"},{default:e.withCtx((()=>[e.createTextVNode("注意:")])),_:1})])),_:1}),e.createVNode(_,null,{default:e.withCtx((()=>[e.createVNode(S,null,{default:e.withCtx((()=>[e.createTextVNode("  由于每天能通过完成任务获得亲密度的粉丝勋章数量有限,脚本默认仅为最多199个等级小于20的粉丝勋章完成给主播点赞,发送弹幕,观看直播任务。在脚本执行任务期间观看未执行任务的粉丝勋章对应直播间直播可能导致今天无法获取任何亲密度。")])),_:1})])),_:1}),e.createVNode(D,{modelValue:l.value,"onUpdate:modelValue":i[9]||(i[9]=e=>l.value=e),title:"编辑弹幕内容","lock-scroll":!1,width:"40%"},{footer:e.withCtx((()=>[e.createVNode(b,{type:"primary",onClick:d},{default:e.withCtx((()=>[e.createTextVNode("新增弹幕")])),_:1})])),default:e.withCtx((()=>[e.createVNode(e.unref(n.ElTable),{data:c.value,"max-height":"500"},{default:e.withCtx((()=>[e.createVNode(N,{type:"index",width:"50"}),e.createVNode(N,{prop:"content",label:"弹幕内容"}),e.createVNode(N,{label:"操作",width:"220",align:"center"},{default:e.withCtx((t=>[e.createVNode(b,{text:"",icon:e.unref(o.Edit),onClick:e=>{return i=t.$index,o=t.row,void n.ElMessageBox.prompt("请输入新的弹幕内容","修改弹幕",{confirmButtonText:"确认",cancelButtonText:"取消",inputPattern:/^.{1,30}$/,inputErrorMessage:"弹幕内容不得为空且长度不能超过30",inputValue:o.content,lockScroll:!1}).then((({value:e})=>{a.medalTasks.danmu.list[i]=e})).catch((()=>{}));var i,o}},{default:e.withCtx((()=>[e.createTextVNode(" 修改 ")])),_:2},1032,["icon","onClick"]),e.createVNode(b,{text:"",icon:e.unref(o.Delete),type:"danger",onClick:e=>{return i=t.$index,void(1!==a.medalTasks.danmu.list.length?a.medalTasks.danmu.list.splice(i,1):n.ElMessage.warning({message:"至少要有一条弹幕",appendTo:".el-dialog"}));var i}},{default:e.withCtx((()=>[e.createTextVNode(" 删除 ")])),_:2},1032,["icon","onClick"])])),_:1})])),_:1},8,["data"])])),_:1},8,["modelValue"]),e.createVNode(D,{modelValue:u.value,"onUpdate:modelValue":i[10]||(i[10]=e=>u.value=e),title:"编辑粉丝勋章名单","lock-scroll":!1,width:"40%"},{default:e.withCtx((()=>[e.withDirectives((e.openBlock(),e.createBlock(e.unref(n.ElTable),{ref_key:"medalInfoTableRef",ref:f,data:h.value,"max-height":"500","empty-text":"没有粉丝勋章",onSelectionChange:w},{default:e.withCtx((()=>[e.createVNode(N,{type:"selection",align:"center",width:"55"}),e.createVNode(N,{prop:"avatar",label:"头像",width:"100"},{default:e.withCtx((t=>[e.createElementVNode("div",Ae,[e.createVNode(B,{src:t.row.avatar,loading:"lazy",referrerpolicy:"origin",class:"avatar"},{error:e.withCtx((()=>[e.createVNode(B,{src:"//i0.hdslb.com/bfs/face/member/noface.jpg",referrerpolicy:"origin",class:"avatar"})])),_:2},1032,["src"])])])),_:1}),e.createVNode(N,{prop:"nick_name",label:"昵称"}),e.createVNode(N,{prop:"medal_name",label:"粉丝勋章"}),e.createVNode(N,{prop:"medal_level",label:"等级",width:"80",sortable:""}),e.createVNode(N,{prop:"roomid",label:"房间号"},{default:e.withCtx((t=>[e.createVNode(P,{href:"https://live.bilibili.com/"+t.row.roomid+"?visit_id=",rel:"noreferrer",type:"primary",target:"_blank"},{default:e.withCtx((()=>[e.createTextVNode(e.toDisplayString(t.row.roomid),1)])),_:2},1032,["href"])])),_:1})])),_:1},8,["data"])),[[M,m.value]])])),_:1},8,["modelValue"])])}}}),[["__scopeId","data-v-45a03c87"]]),Ue=e.defineComponent({__name:"OtherTasks",setup(t){const i=Le(),o=i.moduleConfig.DailyTasks.OtherTasks,s=i.moduleStatus.DailyTasks.OtherTasks;return(t,i)=>{const a=e.resolveComponent("el-switch"),n=e.resolveComponent("Info"),r=e.resolveComponent("TaskStatus"),l=e.resolveComponent("el-space"),c=e.resolveComponent("el-row"),d=e.resolveComponent("el-text"),u=e.resolveComponent("el-option"),h=e.resolveComponent("el-select"),m=e.resolveComponent("el-divider");return e.openBlock(),e.createElementBlock("div",null,[e.createVNode(c,null,{default:e.withCtx((()=>[e.createVNode(l,{wrap:""},{default:e.withCtx((()=>[e.createVNode(a,{modelValue:e.unref(o).groupSign.enabled,"onUpdate:modelValue":i[0]||(i[0]=t=>e.unref(o).groupSign.enabled=t),"active-text":"应援团签到"},null,8,["modelValue"]),e.createVNode(n,{id:"DailyTasks.OtherTasks.groupSign"}),e.createVNode(r,{status:e.unref(s).groupSign},null,8,["status"])])),_:1})])),_:1}),e.createVNode(c,null,{default:e.withCtx((()=>[e.createVNode(l,{wrap:""},{default:e.withCtx((()=>[e.createVNode(a,{modelValue:e.unref(o).silverToCoin.enabled,"onUpdate:modelValue":i[1]||(i[1]=t=>e.unref(o).silverToCoin.enabled=t),"active-text":"银瓜子换硬币"},null,8,["modelValue"]),e.createVNode(n,{id:"DailyTasks.OtherTasks.silverToCoin"}),e.createVNode(r,{status:e.unref(s).silverToCoin},null,8,["status"])])),_:1})])),_:1}),e.createVNode(c,null,{default:e.withCtx((()=>[e.createVNode(l,{wrap:""},{default:e.withCtx((()=>[e.createVNode(a,{modelValue:e.unref(o).coinToSilver.enabled,"onUpdate:modelValue":i[2]||(i[2]=t=>e.unref(o).coinToSilver.enabled=t),"active-text":"硬币换银瓜子"},null,8,["modelValue"]),e.createVNode(d,null,{default:e.withCtx((()=>[e.createTextVNode("花费硬币")])),_:1}),e.createVNode(h,{modelValue:e.unref(o).coinToSilver.num,"onUpdate:modelValue":i[3]||(i[3]=t=>e.unref(o).coinToSilver.num=t),placeholder:"Select",style:{width:"64px"}},{default:e.withCtx((()=>[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(50,(t=>e.createVNode(u,{key:t,label:t,value:t},null,8,["label","value"]))),64))])),_:1},8,["modelValue"]),e.createVNode(d,null,{default:e.withCtx((()=>[e.createTextVNode("个")])),_:1}),e.createVNode(n,{id:"DailyTasks.OtherTasks.coinToSilver"}),e.createVNode(r,{status:e.unref(s).coinToSilver},null,8,["status"])])),_:1})])),_:1}),e.createVNode(c,null,{default:e.withCtx((()=>[e.createVNode(l,{wrap:""},{default:e.withCtx((()=>[e.createVNode(a,{modelValue:e.unref(o).getYearVipPrivilege.enabled,"onUpdate:modelValue":i[4]||(i[4]=t=>e.unref(o).getYearVipPrivilege.enabled=t),"active-text":"领取年度大会员权益"},null,8,["modelValue"]),e.createVNode(n,{id:"DailyTasks.OtherTasks.getYearVipPrivilege"}),e.createVNode(r,{status:e.unref(s).getYearVipPrivilege},null,8,["status"])])),_:1})])),_:1}),e.createVNode(m)])}}}),je=e.defineComponent({__name:"EnhanceExperience",setup(t){const i=Le().moduleConfig.EnhanceExperience,o=["原画","蓝光PRO","蓝光","超清PRO","超清","高清"];return(t,s)=>{const a=e.resolveComponent("el-switch"),n=e.resolveComponent("el-option"),r=e.resolveComponent("el-select"),l=e.resolveComponent("Info"),c=e.resolveComponent("el-space"),d=e.resolveComponent("el-row"),u=e.resolveComponent("el-divider");return e.openBlock(),e.createElementBlock("div",null,[e.createVNode(d,null,{default:e.withCtx((()=>[e.createVNode(c,{wrap:""},{default:e.withCtx((()=>[e.createVNode(a,{modelValue:e.unref(i).switchLiveStreamQuality.enabled,"onUpdate:modelValue":s[0]||(s[0]=t=>e.unref(i).switchLiveStreamQuality.enabled=t),"active-text":"自动切换画质"},null,8,["modelValue"]),e.createVNode(r,{modelValue:e.unref(i).switchLiveStreamQuality.qualityDesc,"onUpdate:modelValue":s[1]||(s[1]=t=>e.unref(i).switchLiveStreamQuality.qualityDesc=t),placeholder:"Select",style:{width:"110px"}},{default:e.withCtx((()=>[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(o,(t=>e.createVNode(n,{key:t,label:t,value:t},null,8,["label","value"]))),64))])),_:1},8,["modelValue"]),e.createVNode(l,{id:"EnhanceExperience.switchLiveStreamQuality"})])),_:1})])),_:1}),e.createVNode(d,null,{default:e.withCtx((()=>[e.createVNode(c,{wrap:""},{default:e.withCtx((()=>[e.createVNode(a,{modelValue:e.unref(i).banp2p.enabled,"onUpdate:modelValue":s[2]||(s[2]=t=>e.unref(i).banp2p.enabled=t),"active-text":"禁用P2P"},null,8,["modelValue"]),e.createVNode(l,{id:"EnhanceExperience.banp2p"})])),_:1})])),_:1}),e.createVNode(d,null,{default:e.withCtx((()=>[e.createVNode(c,{wrap:""},{default:e.withCtx((()=>[e.createVNode(a,{modelValue:e.unref(i).noReport.enabled,"onUpdate:modelValue":s[3]||(s[3]=t=>e.unref(i).noReport.enabled=t),"active-text":"拦截日志数据上报"},null,8,["modelValue"]),e.createVNode(l,{id:"EnhanceExperience.noReport"})])),_:1})])),_:1}),e.createVNode(d,null,{default:e.withCtx((()=>[e.createVNode(c,{wrap:""},{default:e.withCtx((()=>[e.createVNode(a,{modelValue:e.unref(i).noSleep.enabled,"onUpdate:modelValue":s[4]||(s[4]=t=>e.unref(i).noSleep.enabled=t),"active-text":"屏蔽挂机检测"},null,8,["modelValue"]),e.createVNode(l,{id:"EnhanceExperience.noSleep"})])),_:1})])),_:1}),e.createVNode(u)])}}}),He=e.defineComponent({__name:"RemoveElement",setup(t){const i=Le().moduleConfig.RemoveElement;return(t,o)=>{const s=e.resolveComponent("el-switch"),a=e.resolveComponent("Info"),n=e.resolveComponent("el-space"),r=e.resolveComponent("el-row"),l=e.resolveComponent("el-divider");return e.openBlock(),e.createElementBlock("div",null,[e.createVNode(r,null,{default:e.withCtx((()=>[e.createVNode(n,{wrap:""},{default:e.withCtx((()=>[e.createVNode(s,{modelValue:e.unref(i).removePKBox.enabled,"onUpdate:modelValue":o[0]||(o[0]=t=>e.unref(i).removePKBox.enabled=t),"active-text":"移除大乱斗元素"},null,8,["modelValue"]),e.createVNode(a,{id:"RemoveElement.removePKBox"})])),_:1})])),_:1}),e.createVNode(r,null,{default:e.withCtx((()=>[e.createVNode(n,{wrap:""},{default:e.withCtx((()=>[e.createVNode(s,{modelValue:e.unref(i).removeLiveWaterMark.enabled,"onUpdate:modelValue":o[1]||(o[1]=t=>e.unref(i).removeLiveWaterMark.enabled=t),"active-text":"移除直播间水印"},null,8,["modelValue"]),e.createVNode(a,{id:"RemoveElement.removeLiveWaterMark"})])),_:1})])),_:1}),e.createVNode(r,null,{default:e.withCtx((()=>[e.createVNode(n,{wrap:""},{default:e.withCtx((()=>[e.createVNode(s,{modelValue:e.unref(i).removeShopPopover.enabled,"onUpdate:modelValue":o[2]||(o[2]=t=>e.unref(i).removeShopPopover.enabled=t),"active-text":"移除直播间小黄车弹窗"},null,8,["modelValue"]),e.createVNode(a,{id:"RemoveElement.removeShopPopover"})])),_:1})])),_:1}),e.createVNode(r,null,{default:e.withCtx((()=>[e.createVNode(n,{wrap:""},{default:e.withCtx((()=>[e.createVNode(s,{modelValue:e.unref(i).removeGameParty.enabled,"onUpdate:modelValue":o[3]||(o[3]=t=>e.unref(i).removeGameParty.enabled=t),"active-text":"移除直播间幻星派对标志"},null,8,["modelValue"]),e.createVNode(a,{id:"RemoveElement.removeGameParty"})])),_:1})])),_:1}),e.createVNode(l)])}}}),ze=e.defineComponent({components:{MainSiteTasks:Re,LiveTasks:$e,OtherTasks:Ue,EnhanceExperience:je,RemoveElement:He}}),Fe=e.defineComponent({...ze,__name:"PanelMain",setup(t){const i=_();return(t,o)=>(e.openBlock(),e.createBlock(e.resolveDynamicComponent(e.unref(i).uiConfig.activeMenuIndex)))}}),qe=k(e.defineComponent({__name:"App",setup(t){const o=_(),s=new j("App.vue");let a,n,l=o.uiConfig.isShowPanel;function c(){const e=a.getBoundingClientRect();o.baseStyleValue.top=e.top+window.scrollY,o.baseStyleValue.left=e.left+window.scrollX,o.baseStyleValue.height=e.height,o.baseStyleValue.width=.4*e.width}o.uiConfig.isShowPanel=!1;const d=i.throttle((function(){o.changeShowPanel(),n.innerText=o.isShowPanelButtonText}),300);if(a=q("#live-player-ctnr"),a){c(),((e,t,i,o,s=!0)=>new Promise(((a,n)=>{if(s){const i=e.querySelector(t);if(i)return void a(i)}const r=setInterval((()=>{const i=e.querySelector(t);i&&(clearTimeout(r),a(i))}),i),l=setTimeout((()=>{clearTimeout(r),clearTimeout(l),n()}),o)})))(document,".left-ctnr.left-header-area",300,3e3,!0).then((e=>{var t,i;n=G("button"),n.setAttribute("class","blth_btn"),n.onclick=d,n.innerText=o.isShowPanelButtonText,e.append(n),K()||r("alt+b",{element:null==(i=null==(t=v.top)?void 0:t.document)?void 0:i.documentElement},d),r("alt+b",d)})).catch((()=>s.error("Can't find playerHeaderLeft in time"))),window.addEventListener("resize",(()=>c()));const e=new MutationObserver((()=>c()));e.observe(document.documentElement,{attributes:!0}),e.observe(document.body,{attributes:!0}),l&&(o.uiConfig.isShowPanel=!0)}else s.error("livePlayer not found");return(t,i)=>{const s=e.resolveComponent("el-header"),a=e.resolveComponent("el-aside"),n=e.resolveComponent("el-main"),r=e.resolveComponent("el-container"),l=e.resolveComponent("el-scrollbar"),c=e.resolveComponent("el-collapse-transition");return e.openBlock(),e.createBlock(c,null,{default:e.withCtx((()=>[e.withDirectives(e.createElementVNode("div",{style:e.normalizeStyle(e.unref(o).baseStyle),class:"base"},[e.createVNode(r,null,{default:e.withCtx((()=>[e.createVNode(s,{class:"header"},{default:e.withCtx((()=>[e.createVNode(x)])),_:1}),e.createVNode(l,{height:e.unref(o).scrollBarHeight},{default:e.withCtx((()=>[e.createVNode(r,null,{default:e.withCtx((()=>[e.createVNode(a,{class:"aside"},{default:e.withCtx((()=>[e.createVNode(b)])),_:1}),e.createVNode(n,{class:"main"},{default:e.withCtx((()=>[(e.openBlock(),e.createBlock(e.KeepAlive,null,[e.createVNode(e.Transition,{name:"fade",mode:"out-in"},{default:e.withCtx((()=>[e.createVNode(Fe)])),_:1})],1024))])),_:1})])),_:1})])),_:1},8,["height"])])),_:1})],4),[[e.vShow,e.unref(o).uiConfig.isShowPanel]])])),_:1})}}}),[["__scopeId","data-v-0fb8057a"]]);(e=>{const t=GM_getResourceText(e);GM_addStyle(t)})("element-plus/dist/index.css");const Ge={},Ke={xmlns:"http://www.w3.org/2000/svg",width:"128",height:"128",class:"icon",viewBox:"0 0 1024 1024"},We=[e.createElementVNode("path",{d:"M831.825 63.94H191.94c-70.692 0-128 57.308-128 128v639.885c0 70.692 57.308 128 128 128h639.885c70.692 0 128-57.308 128-128V191.94c0-70.692-57.308-128-128-128zM895.885 832a63.835 63.835 0 0 1-63.973 63.886H192.088c-17.112 0-33.27-6.575-45.372-18.676S127.88 849.112 127.88 832V192a64.236 64.236 0 0 1 64.208-64.12h639.824A64.038 64.038 0 0 1 895.885 192v640z"},null,-1),e.createElementVNode("path",{d:"M791.998 351.852H536a31.97 31.97 0 0 0 0 63.94h256a31.97 31.97 0 0 0 0-63.94zm0 256.121H536a31.97 31.97 0 0 0 0 63.94h256a31.97 31.97 0 0 0 0-63.94zm-447.996-79.975c-61.856 0-111.986 50.144-111.986 111.985S282.16 751.97 344.002 751.97s111.985-50.144 111.985-111.986-50.13-111.985-111.985-111.985zm33.982 145.982a48.045 48.045 0 1 1 14.088-33.982 47.746 47.746 0 0 1-14.088 33.986zm39.412-376.586L311.999 402.787l-41.391-41.395a31.97 31.97 0 1 0-45.213 45.213l63.997 64.002a31.97 31.97 0 0 0 45.214 0l128-128a31.97 31.97 0 0 0-45.21-45.213z"},null,-1)];const Xe=k(Ge,[["render",function(t,i){return e.openBlock(),e.createElementBlock("svg",Ke,We)}]]),Je={DailyTasks:{MainSiteTasks:{login:{title:"每日登录",message:"完成主站的每日登录任务。"},watch:{title:"每日观看视频",message:e.h("p",[e.h("div","完成主站的每日观看视频任务。"),e.h("div","从动态中选取视频观看,会产生观看历史记录。")])},coin:{title:"每日投币",message:e.h("p",[e.h("div","完成主站的每日投币任务。"),e.h("div","从动态中选取视频投币,会根据你今天已经投过的币的数量计算还要投几个币。")])},share:{title:"每日分享视频",message:e.h("p",[e.h("div","完成主站的每日分享视频任务。"),e.h("div","不会真的分享到某处。")])}},LiveTasks:{sign:{title:"直播签到",message:e.h("p",[e.h("div","完成直播签到任务。"),e.h("div","完成后会移除当前直播间右上角签到窗口中的签到按钮。")])},appUser:{title:"APP用户任务",message:e.h("p",[e.h("div","完成APP用户任务并领取奖励。"),e.h("div",[e.h("strong","由于曾经的APP用户任务下架已久,目前的新任务(观看新主播直播并发弹幕)又没有对全部用户开放,故该功能暂时被禁用。"),e.h("div",[e.h("span","在APP中观看直播时右下角可能会有个电池图标,点击即可查看APP用户任务内容。并非所有账号都可以参加该任务。 如果开启了发送弹幕功能,该功能会在发送弹幕功能运行完毕后再运行。如果之前发送的弹幕数量不够,会先在直播间"),e.h("a",{class:"el-link el-link--primary is-underline el-link-va-baseline",href:"https://live.bilibili.com/22474988",rel:"noreferrer",target:"_blank"},"22474988"),e.h("span","发送弹幕再领取奖励。")])])])},medalTasks:{list:{title:"黑白名单",message:e.h("p",[e.h("div","为更精细地控制为哪些粉丝勋章执行任务,你可以使用黑名单或白名单模式。"),e.h("div",[e.h("li",[e.h("span","黑名单:仅为"),e.h("strong","不在"),e.h("span","名单中的粉丝勋章执行任务。")]),e.h("li",[e.h("span","白名单:仅为"),e.h("strong","在"),e.h("span","名单中的粉丝勋章执行任务。")])]),e.h("div","点击编辑名单按钮,然后使用第一列的多选框即可编辑名单中的粉丝勋章。")])},like:{title:"给主播点赞",message:e.h("p",[e.h("div","在你的每个粉丝勋章对应的直播间给主播点赞。"),e.h("div",[e.h("span","如果你不希望等级≥20的粉丝勋章熄灭,可以勾选下面的“包含等级≥20的粉丝勋章”"),e.h("strong","(虽然B站的帮助中心说点赞可以点亮粉丝勋章但现在似乎不行了,所以该选项以后可能会被删除)"),e.h("span","。")]),e.h("div","部分直播间无法完成该任务,原因未知。")])},danmu:{title:"发送弹幕",message:e.h("p",[e.h("div","在你的每个粉丝勋章对应的直播间发送一条弹幕。"),e.h("div",[e.h("span","点击编辑弹幕按钮编辑发送的弹幕,脚本会从中按顺序循环抽取弹幕发送。"),e.h("span","部分直播间无法完成该任务,可能的原因有:,"),e.h("li","你被禁言了"),e.h("li","发言有粉丝勋章等级要求"),e.h("li",[e.h("span","特殊直播间(比如"),e.h("a",{href:"https://live.bilibili.com/54",rel:"noreferrer",target:"_blank"},"54"),e.h("span",")")])])])},watch:{title:"观看直播",message:e.h("p",[e.h("div","完成观看持有粉丝勋章对应主播直播的任务。"),e.h("div","部分直播间因为没有设置直播分区导致任务无法完成。主播当前是否开播不会影响该任务的完成。")])}}},OtherTasks:{groupSign:{title:"应援团签到",message:"完成应援团签到任务。"},silverToCoin:{title:"银瓜子换硬币",message:e.h("p",[e.h("div","把银瓜子兑换为硬币。"),e.h("div","具体兑换规则请点击直播间页面的“立即充值→银瓜子商店”查看。")])},coinToSilver:{title:"硬币换银瓜子",message:e.h("p",[e.h("div","把硬币兑换为银瓜子。"),e.h("div","具体兑换规则请点击直播间页面的“立即充值→银瓜子商店”查看。")])},getYearVipPrivilege:{title:"领取年度大会员权益",message:e.h("p",[e.h("div","自动领取年度大会员权益。"),e.h("div",[e.h("span","具体权益请前往"),e.h("a",{href:"https://account.bilibili.com/account/big/myPackage",rel:"noreferrer",target:"_blank"},"卡券包"),e.h("span","查看。")])])}}},EnhanceExperience:{switchLiveStreamQuality:{title:"自动切换画质",message:e.h("p",[e.h("div","打开直播间后自动把播放器切换到指定画质。"),e.h("div","如果指定画质不存在,则还是使用B站的默认画质。")])},banp2p:{title:"禁用P2P",message:e.h("p",[e.h("div","禁用直播流的P2P上传/下载"),e.h("div","B站使用WebRTC技术把许多浏览器点对点(P2P)地连接起来,实现视频流和音频流的传输。这样做是为了减轻B站服务器的压力,但是会占用你一定的上行带宽(大约几百kb每秒)。如果你不想被占用上行带宽,可以开启该功能。若开启后发现观看直播时有明显卡顿,请关闭。")])},noReport:{title:"拦截日志数据上报",message:e.h("p",[e.h("div","禁止B站上报日志数据。"),e.h("div",[e.h("span","B站会实时地上报大量日志信息,比如直播观看情况、代码报错等等。开启本功能后绝大多数日志上报都会被拦截并返回一个成功的响应。如果追求更好的效果和性能表现建议使用带有广告拦截功能的浏览器拓展,比如"),e.h("a",{href:"https://github.com/gorhill/uBlock",rel:"noreferrer",target:"_blank"},"uBlock Origin"),e.h("span","。")])])},noSleep:{title:"屏蔽挂机检测",message:e.h("p",[e.h("div","屏蔽B站直播间的挂机检测。"),e.h("div","如果长时间没有操作,会提示“检测到您已离开当前屏幕,倒计时后即将暂停播放”。开启本功能后即可避免这种情况。")])}},RemoveElement:{removePKBox:{title:"移除大乱斗元素",message:"移除直播间的大乱斗元素(进度条,弹出的提示等)。"},removeLiveWaterMark:{title:"移除直播间水印",message:"移除直播画面左上角的水印。"},removeShopPopover:{title:"移除直播间小黄车弹窗",message:"移除直播间左上角的小黄车弹窗。"},removeGameParty:{title:"移除直播间幻星派对标志",message:"移除直播间右下角的幻星派对标志。"}}},Qe=(t=>(e.pushScopeId("data-v-67653089"),t=t(),e.popScopeId(),t))((()=>e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"128",height:"128",class:"icon",viewBox:"0 0 1024 1024"},[e.createElementVNode("path",{fill:"#276BC0",d:"M512.67 959.47c-246.343 0-446.76-200.632-446.76-447.24S266.326 64.98 512.67 64.98s446.76 200.642 446.76 447.25-200.416 447.24-446.76 447.24zm0-829.04c-210.291 0-381.38 171.283-381.38 381.8s171.089 381.79 381.38 381.79 381.381-171.273 381.381-381.79-171.09-381.8-381.38-381.8z"}),e.createElementVNode("path",{fill:"#276BC0",d:"M447.29 317.172a63.891 63.959 0 1 0 130.76 0 63.891 63.959 0 1 0-130.76 0Zm64.907 503.047c-30.093 0-54.235-24.416-54.235-54.541V482.062c0-30.126 24.142-54.541 54.235-54.541 30.094 0 54.236 24.416 54.236 54.541v283.616c0 30.125-24.142 54.54-54.236 54.54z"})],-1))),Ye=k(e.defineComponent({__name:"InfoIcon",props:{id:{}},setup(t){const o=t,s=()=>{const{title:e,message:t}=i.get(Je,o.id,{title:"无",message:"无"});n.ElMessageBox({title:e,message:t,lockScroll:!1,autofocus:!0,confirmButtonText:"OK"})};return(t,i)=>{const o=e.resolveComponent("el-icon");return e.openBlock(),e.createBlock(o,{class:"info-icon",onClick:s},{default:e.withCtx((()=>[Qe])),_:1})}}}),[["__scopeId","data-v-67653089"]]),Ze=k(e.defineComponent({__name:"TaskStatusIcon",props:{status:{}},setup:t=>(t,i)=>{const o=e.resolveComponent("Loading"),s=e.resolveComponent("el-icon"),a=e.resolveComponent("Select"),n=e.resolveComponent("CloseBold");return"running"===t.status?(e.openBlock(),e.createBlock(s,{key:0,class:"status-icon is-loading"},{default:e.withCtx((()=>[e.createVNode(o)])),_:1})):"done"===t.status?(e.openBlock(),e.createBlock(s,{key:1,class:"status-icon",style:{color:"#1ab059"}},{default:e.withCtx((()=>[e.createVNode(a)])),_:1})):"error"===t.status?(e.openBlock(),e.createBlock(s,{key:2,class:"status-icon",style:{color:"#ff6464"}},{default:e.withCtx((()=>[e.createVNode(n)])),_:1})):e.createCommentVNode("",!0)}}),[["__scopeId","data-v-72d53133"]]),et=Object.freeze(Object.defineProperty({__proto__:null,Info:Ye,TaskStatus:Ze,Tasks:Xe},Symbol.toStringTag,{value:"Module"})),tt=new j("Main");tt.log("document.readyState",document.readyState);const it=t.createPinia(),ot=Me(it),st=Le(it);if(ot.checkCurrentScriptType(),tt.log("当前脚本的类型为",ot.currentScriptType),"Main"===ot.currentScriptType&&ot.startMainBLTHAliveHeartBeat(),st.loadModules("unknown"),await D("document-body"),document.head.innerHTML.includes("BilibiliLive")){const t=e.createApp(qe);t.use(n),t.use(it);for(const[e,i]of Object.entries(c))t.component(e,i);for(const[e,i]of Object.entries(et))t.component(e,i);st.loadModules("yes"),await D("document-end");const i=G("div");i.id="BLTH",document.body.append(i),t.mount(i)}}(Vue,Pinia,_,ElementPlusIconsVue,luxon,CryptoJS,ElementPlus,hotkeys); \ No newline at end of file diff --git a/dist/bilibili-live-tasks-helper.user.js b/dist/bilibili-live-tasks-helper.user.js index 1e3f11ad..481b36ca 100644 --- a/dist/bilibili-live-tasks-helper.user.js +++ b/dist/bilibili-live-tasks-helper.user.js @@ -3,7 +3,7 @@ // @name:en Bilibili Live Tasks Helper // @name:zh Bilibili Live Tasks Helper // @namespace https://github.com/andywang425 -// @version 7.1.1 +// @version 7.1.2 // @author andywang425 // @description Enhancing the experience of watching Bilibili live streaming. // @description:en Enhancing the experience of watching Bilibili live streaming. @@ -40,7 +40,7 @@ // @require https://unpkg.com/pinia@2.1.6/dist/pinia.iife.prod.js // @require https://unpkg.com/lodash@4.17.21/lodash.min.js // @require https://unpkg.com/hotkeys-js@3.12.0/dist/hotkeys.min.js -// @require https://unpkg.com/luxon@3.4.2/build/global/luxon.min.js +// @require https://unpkg.com/luxon@3.4.3/build/global/luxon.min.js // @require https://unpkg.com/crypto-js@4.1.1/crypto-js.js // @resource element-plus/dist/index.css https://unpkg.com/element-plus@2.3.12/dist/index.css // @connect api.bilibili.com @@ -58,7 +58,7 @@ // @run-at document-start // ==/UserScript== -(e=>{if(typeof GM_addStyle=="function"){GM_addStyle(e);return}const t=document.createElement("style");t.textContent=e,document.head.append(t)})(" .title[data-v-dda95e10]{padding-left:20px;align-items:center;display:flex}.header-big-text[data-v-dda95e10]{font-size:var(--big-text-size)}.header-small-text[data-v-dda95e10]{font-size:var(--small-text-size);padding-top:calc(var(--big-text-size) - var(--small-text-size));margin-left:10px;--small-text-size: 18px}.collapse-btn[data-v-dda95e10]{display:flex;justify-content:center;align-items:center;height:100%;float:left;cursor:pointer}.avatar-wrap[data-v-d7ecdd75]{width:80px;height:80px}.avatar[data-v-d7ecdd75]{display:flex;justify-content:center;align-items:center;border-radius:50%}.base[data-v-0fb8057a]{z-index:1003;position:absolute;background-color:#fff;border-bottom:1px solid #e3e5e7;border-left:1px solid #e3e5e7;border-right:1px solid #e3e5e7}.header[data-v-0fb8057a]{position:relative;box-sizing:border-box;width:100%;font-size:var(--big-text-size);align-items:center;display:flex;border-bottom:1px solid #e3e5e7;height:60px;--big-text-size: 25px}.aside[data-v-0fb8057a]{width:auto}.aside #aside-el-menu[data-v-0fb8057a]:not(.el-menu--collapse){width:150px}.main[data-v-0fb8057a]{--main-top-botton-padding: calc(var(--el-main-padding) * .625);padding-top:var(--main-top-botton-padding);padding-bottom:var(--main-top-botton-padding)}.fade-enter-active[data-v-0fb8057a],.fade-leave-active[data-v-0fb8057a]{transition:opacity .1s ease}.fade-enter-from[data-v-0fb8057a],.fade-leave-to[data-v-0fb8057a]{opacity:0}.info-icon[data-v-c1d8df5e]{font-size:var(--el-font-size-base);cursor:pointer}.status-icon[data-v-72d53133]{font-size:var(--el-font-size-base)}.blth_btn{background-color:#23ade5;font-size:small;margin-inline-start:5px;color:#fff;border-radius:4px;border:none;padding:5px;cursor:pointer;box-shadow:0 0 2px #00000075;line-height:10px;margin-left:15px}.blth_btn:hover{background-color:#1097cc}.blth_btn:hover:active{background-color:#0e86b6;position:relative;top:1px} "); +(e=>{if(typeof GM_addStyle=="function"){GM_addStyle(e);return}const t=document.createElement("style");t.textContent=e,document.head.append(t)})(" .title[data-v-b935cab6]{padding-left:20px;align-items:center;display:flex}.header-big-text[data-v-b935cab6]{font-size:var(--big-text-size)}.header-small-text[data-v-b935cab6]{font-size:var(--small-text-size);padding-top:calc(var(--big-text-size) - var(--small-text-size));margin-left:10px;--small-text-size: 18px}.collapse-btn[data-v-b935cab6]{display:flex;justify-content:center;align-items:center;height:100%;float:left;cursor:pointer}.avatar-wrap[data-v-45a03c87]{width:80px;height:80px}.avatar[data-v-45a03c87]{display:flex;justify-content:center;align-items:center;border-radius:50%}.base[data-v-0fb8057a]{z-index:1003;position:absolute;background-color:#fff;border-bottom:1px solid #e3e5e7;border-left:1px solid #e3e5e7;border-right:1px solid #e3e5e7}.header[data-v-0fb8057a]{position:relative;box-sizing:border-box;width:100%;font-size:var(--big-text-size);align-items:center;display:flex;border-bottom:1px solid #e3e5e7;height:60px;--big-text-size: 25px}.aside[data-v-0fb8057a]{width:auto}.aside #aside-el-menu[data-v-0fb8057a]:not(.el-menu--collapse){width:150px}.main[data-v-0fb8057a]{--main-top-botton-padding: calc(var(--el-main-padding) * .625);padding-top:var(--main-top-botton-padding);padding-bottom:var(--main-top-botton-padding)}.fade-enter-active[data-v-0fb8057a],.fade-leave-active[data-v-0fb8057a]{transition:opacity .1s ease}.fade-enter-from[data-v-0fb8057a],.fade-leave-to[data-v-0fb8057a]{opacity:0}.info-icon[data-v-67653089]{font-size:var(--el-font-size-base);cursor:pointer}.status-icon[data-v-72d53133]{font-size:var(--el-font-size-base)}.blth_btn{background-color:#23ade5;font-size:small;margin-inline-start:5px;color:#fff;border-radius:4px;border:none;padding:5px;cursor:pointer;box-shadow:0 0 2px #00000075;line-height:10px;margin-left:15px}.blth_btn:hover{background-color:#1097cc}.blth_btn:hover:active{background-color:#0e86b6;position:relative;top:1px} "); (async function (vue, pinia$1, _, ElementPlusIconsVue, luxon, CryptoJS, ElementPlus, hotkeys) { 'use strict'; @@ -284,7 +284,9 @@ const index2name = { MainSiteTasks: "主站任务", LiveTasks: "直播任务", - OtherTasks: "其它任务" + OtherTasks: "其它任务", + EnhanceExperience: "体验优化", + RemoveElement: "移除元素" }; return index2name[uiConfig.activeMenuIndex]; }); @@ -344,7 +346,8 @@ return vue.openBlock(), vue.createElementBlock(vue.Fragment, null, [ vue.createElementVNode("div", { class: "collapse-btn", - onClick: _cache[0] || (_cache[0] = ($event) => vue.unref(uiStore).changeCollapse()) + onClick: _cache[0] || (_cache[0] = //@ts-ignore + (...args) => vue.unref(uiStore).changeCollapse && vue.unref(uiStore).changeCollapse(...args)) }, [ vue.unref(uiStore).uiConfig.isCollapse ? (vue.openBlock(), vue.createBlock(_component_el_icon, { key: 0 }, { default: vue.withCtx(() => [ @@ -386,7 +389,7 @@ } return target; }; - const PanelHeader = /* @__PURE__ */ _export_sfc(_sfc_main$b, [["__scopeId", "data-v-dda95e10"]]); + const PanelHeader = /* @__PURE__ */ _export_sfc(_sfc_main$b, [["__scopeId", "data-v-b935cab6"]]); const _sfc_main$a = /* @__PURE__ */ vue.defineComponent({ __name: "PanelAside", setup(__props) { @@ -493,18 +496,19 @@ } }); const useBiliStore = pinia$1.defineStore("bili", () => { - const BilibiliLive2 = vue.ref(); - const cookies = vue.ref(); - const userInfo = vue.ref(); - const giftConfig = vue.ref(); - const dailyRewardInfo = vue.ref(); - const dynamicVideos = vue.ref(); - const fansMedals = vue.ref(); - const filteredFansMedals = vue.computed(() => { - if (!fansMedals.value) - return null; - return fansMedals.value.filter((m) => m.room_info.room_id !== 0); - }); + const BilibiliLive2 = vue.ref(null); + const cookies = vue.ref(null); + const userInfo = vue.ref(null); + const giftConfig = vue.ref(null); + const dailyRewardInfo = vue.ref(null); + const dynamicVideos = vue.ref(null); + const fansMedals = vue.ref(null); + const filteredFansMedals = vue.computed( + () => { + var _a2; + return ((_a2 = fansMedals.value) == null ? void 0 : _a2.filter((m) => m.room_info.room_id !== 0)) ?? null; + } + ); return { BilibiliLive: BilibiliLive2, userInfo, @@ -1057,7 +1061,7 @@ /** * 推荐添加一个 config 属性来表示当前模块的配置项 * - * @example this.moduleStore.moduleConfig.DailyTasks.MainSiteTasks.login + * @example config: this.moduleStore.moduleConfig.DailyTasks.MainSiteTasks.login */ __publicField(this, "config"); this.moduleName = moduleName; @@ -1067,13 +1071,19 @@ * 如果需要在控制面板上显示模块状态,推荐添加一个 status setter 用来设置模块状态 * * @example - * public set status(s: moduleStatus) { + * set status(s: moduleStatus) { * this.moduleStore.moduleStatus.DailyTasks.MainSiteTasks.login = s * } */ set status(_s) { throw new Error("Method not implemented."); } + /** + * 运行模块 + * + * 默认模块必须返回一个空的Promise, + * 其它模块若需要使用 await 可以返回一个空的Promise,否则无返回值 + */ run() { throw new Error("Method not implemented."); } @@ -1082,8 +1092,10 @@ * 当脚本在多个页面上运行的时候,该模块是否要在每个页面上运行 * * 默认false,即只在Main BLTH运行的页面上运行 + * + * 该选项为 false 时如果要确保模块不会重复运行,还需将 onFrame 设置为 target 或 top */ - __publicField(BaseModule, "runMultiple", false); + __publicField(BaseModule, "runOnMultiplePages", false); /** * 模块运行时机,默认 document-body * @@ -1096,6 +1108,8 @@ * `document-end`: `document`的`DOMContentLoaded`事件触发后 * * `window-load`: `window`的`load`事件触发后 + * + * 默认模块的模块运行时机总是为 document-body */ __publicField(BaseModule, "runAt", "document-body"); /** @@ -1104,6 +1118,12 @@ * `all`: 所有符合脚本`@match`规则的 frame * * `target`: window.BilibiliLive 存在的那个 frame + * + * `top`: 顶层 frame (`window.top`) + * + * 如果设置为 target,那么至少要等到`document-body`时刻才能运行 + * + * 默认模块运行的 frame 总是为 target */ __publicField(BaseModule, "onFrame", "target"); /** @@ -1114,23 +1134,7 @@ * 因为默认模块的运行时机总是 document-body,而且默认模块的运行时间是不确定的 */ __publicField(BaseModule, "runAfterDefault", true); - class DefaultBaseModule extends BaseModule { - /** - * 默认模块按顺序逐个运行,所以必须返回一个 Promise - */ - run() { - throw new Error("Method not implemented."); - } - } - /** - * 默认模块的运行时机总是 document-body - */ - __publicField(DefaultBaseModule, "runAt", "document-body"); - /** - * 默认模块只能在目标 frame 上运行 - */ - __publicField(DefaultBaseModule, "onFrame", "target"); - class UserInfo extends DefaultBaseModule { + class UserInfo extends BaseModule { /** * 通过 BAPI.main.nav 获取用户基本信息 */ @@ -1157,7 +1161,7 @@ }, delayToNextMoment(0, 4).ms); } } - class DailyRewardInfo extends DefaultBaseModule { + class DailyRewardInfo extends BaseModule { /** * 获取今日主站每日任务的完成情况 */ @@ -1189,7 +1193,7 @@ }, delayToNextMoment(0, 4).ms); } } - class DynamicVideos extends DefaultBaseModule { + class DynamicVideos extends BaseModule { /** * 从动态中获取一页视频的信息 * @@ -1223,14 +1227,14 @@ }, delayToNextMoment(0, 4).ms); } } - class FansMetals extends DefaultBaseModule { + class FansMetals extends BaseModule { /** * 获取粉丝勋章 * * @param pages 获取的页数 * @param force 是否无视配置强制获取,默认fasle */ - async getFansMetals(pages = 10, force = false) { + async getFansMetals(pages = Infinity, force = false) { const medalTasks = this.moduleStore.moduleConfig.DailyTasks.LiveTasks.medalTasks; if (force || Object.entries(medalTasks).filter(([key]) => ["danmu", "like", "watch"].includes(key)).some( (keyValue) => keyValue[1].enabled && !isTimestampToday(keyValue[1]._lastCompleteTime) @@ -1271,45 +1275,66 @@ const biliStore = useBiliStore(); biliStore.fansMedals = await this.getFansMetals(); setTimeout(async () => { - biliStore.fansMedals = await this.getFansMetals(); + const firstPageMedals = await this.getFansMetals(1, true); + firstPageMedals == null ? void 0 : firstPageMedals.forEach((firstPageMedal) => { + var _a2; + if ((_a2 = biliStore.fansMedals) == null ? void 0 : _a2.every((m) => m.medal.target_id !== firstPageMedal.medal.target_id)) { + biliStore.fansMedals.push(firstPageMedal); + } + }); }, delayToNextMoment(0, 4).ms); useModuleStore().emitter.on("Default_FansMedals", async () => { - biliStore.fansMedals = await this.getFansMetals(10, true); + biliStore.fansMedals = await this.getFansMetals(Infinity, true); }); } } function getCookie(name) { - const nameEqual = name + "="; - for (const cookie of document.cookie.split("; ")) { - if (cookie.startsWith(nameEqual)) { - const value = cookie.substring(nameEqual.length); - return decodeURIComponent(value); - } - } + const value = `; ${document.cookie}`; + const parts = value.split(`; ${name}=`); + if (parts.length === 2) + return parts.pop().split(";").shift(); return null; } function getCookies(names) { const cookies = {}; - for (const name of names) { + const namesSet = new Set(names); + for (const name of namesSet) { cookies[name] = null; } for (const cookie of document.cookie.split("; ")) { - for (let i = 0; i < names.length; i++) { - const name = names[i]; - const nameEqual = name + "="; - if (cookie.startsWith(nameEqual)) { - const value = cookie.substring(nameEqual.length); - cookies[name] = decodeURIComponent(value); - names.splice(i, 1); + const [cookieName, ...cookieValueParts] = cookie.split("="); + const cookieValue = cookieValueParts.join("="); + if (namesSet.has(cookieName)) { + cookies[cookieName] = decodeURIComponent(cookieValue); + namesSet.delete(cookieName); + if (namesSet.size === 0) break; - } } - if (names.length === 0) - break; } return cookies; } - class Cookies extends DefaultBaseModule { + function getCookiesAsync(names, interval = 200, timeout = 1e4) { + return new Promise((resolve2, reject2) => { + const startTime = Date.now(); + const remainNamesSet = new Set(names); + const cookies = {}; + const timer = setInterval(() => { + Object.assign(cookies, getCookies(remainNamesSet)); + for (const name in cookies) { + if (cookies[name] !== null) + remainNamesSet.delete(name); + } + if (remainNamesSet.size === 0) { + clearInterval(timer); + resolve2(cookies); + } else if (timeout !== -1 && Date.now() - startTime > timeout) { + clearInterval(timer); + reject2("获取以下Cookies超时: " + [...remainNamesSet]); + } + }, interval); + }); + } + class Cookies extends BaseModule { /** * 获取 Cookies * @@ -1318,16 +1343,15 @@ * LIVE_BUVID: 如果用户以前从来没看过直播,此时可能为 null */ getCookies() { - return getCookies(["bili_jct", "LIVE_BUVID"]); + return getCookiesAsync(["bili_jct", "LIVE_BUVID"]); } async run() { - useBiliStore().cookies = this.getCookies(); + useBiliStore().cookies = await this.getCookies(); } } - class BilibiliLive extends DefaultBaseModule { + class BilibiliLive extends BaseModule { /** * 获取 window.BilibiliLive - * @returns 一个 window.BilibiliLive 对象的引用 */ getBilibiliLive() { this.logger.log("unsafeWindow.BilibiliLive", _unsafeWindow.BilibiliLive); @@ -1339,9 +1363,9 @@ _unsafeWindow.BilibiliLive = new Proxy(_unsafeWindow.BilibiliLive, { set(target, prop, value) { target[prop] = value; - if (prop === "UID" && _unsafeWindow.BilibiliLive.UID !== 0) { - resolve2(_unsafeWindow.BilibiliLive); + if (prop === "UID") { _unsafeWindow.BilibiliLive = target; + resolve2(_unsafeWindow.BilibiliLive); } return true; } @@ -1388,11 +1412,11 @@ this.status = "done"; } } else { - if (!isNowIn(0, 0, 0, 5)) { + if (isNowIn(0, 0, 0, 5)) { + this.logger.log("昨天的每日登录任务已经完成过了,等到今天的00:05再执行"); + } else { this.logger.log("今天已经完成过每日登录任务了"); this.status = "done"; - } else { - this.logger.log("昨天的每日登录任务已经完成过了,等到今天的00:05再执行"); } } } @@ -1472,7 +1496,7 @@ } getAid() { const biliStore = useBiliStore(); - if (!_.isEmpty(biliStore.dynamicVideos)) { + if (biliStore.dynamicVideos) { return biliStore.dynamicVideos[0].modules.module_dynamic.major.archive.aid; } else { return "2"; @@ -1510,11 +1534,11 @@ this.logger.log("每日分享视频任务已完成"); } } else { - if (!isNowIn(0, 0, 0, 5)) { + if (isNowIn(0, 0, 0, 5)) { + this.logger.log("昨天的每日分享任务已经完成过了,等到今天的00:05再执行"); + } else { this.logger.log("今天已经完成过每日分享任务了"); this.status = "done"; - } else { - this.logger.log("昨天的每日分享任务已经完成过了,等到今天的00:05再执行"); } } } @@ -1538,9 +1562,12 @@ set status(s) { this.moduleStore.moduleStatus.DailyTasks.MainSiteTasks.coin = s; } + /** + * 获取动态视频的 aid 和 bvid + */ getDynamicVideoIds() { const biliStore = useBiliStore(); - if (!_.isEmpty(biliStore.dynamicVideos)) { + if (biliStore.dynamicVideos) { return biliStore.dynamicVideos.map((item) => { const archive = item.modules.module_dynamic.major.archive; return { @@ -1553,6 +1580,11 @@ return null; } } + /** + * 获取一个视频的你的已投硬币数量 + * + * @returns 你的已投硬币数 + */ async getVideoCoinInfo(aid, bvid) { try { const response = await BAPI.main.videoRelation(aid, bvid); @@ -1568,6 +1600,10 @@ return 0; } } + /** + * 给动态中的视频投币 + * @param left_coin_num 还需要投的硬币数 + */ async coinDynamicVideos(left_coin_num) { const ids = this.getDynamicVideoIds(); if (ids) { @@ -1593,6 +1629,9 @@ } } } + /** + * 投币 + */ async coin(aid, num) { try { const response = await BAPI.main.coinAdd(aid, num); @@ -1637,11 +1676,11 @@ } } } else { - if (!isNowIn(0, 0, 0, 5)) { + if (isNowIn(0, 0, 0, 5)) { + this.logger.log("昨天的每日投币任务已经完成过了,等到今天的00:05再执行"); + } else { this.logger.log("今天已经完成过每日投币任务了"); this.status = "done"; - } else { - this.logger.log("昨天的每日投币任务已经完成过了,等到今天的00:05再执行"); } } } @@ -1897,19 +1936,24 @@ } /** * 获取粉丝勋章的房间号和主播uid,过滤等级大于等于20或不符合黑白名单要求的粉丝勋章 - * @returns 数组,每个元素都是数组:[房间号,主播uid] + * @returns 数组,数组中的每个元素都是数组:[房间号,主播uid] */ getRoomidUidList() { const biliStore = useBiliStore(); if (biliStore.filteredFansMedals) { return biliStore.filteredFansMedals.filter( (medal) => (this.config.includeHighLevelMedals ? true : medal.medal.level < 20) && (this.medalTasksConfig.isWhiteList ? this.medalTasksConfig.roomidList.includes(medal.room_info.room_id) : !this.medalTasksConfig.roomidList.includes(medal.room_info.room_id)) - ).map((medal) => [medal.room_info.room_id, medal.medal.target_id]).slice(0, 100); + ).map((medal) => [medal.room_info.room_id, medal.medal.target_id]).slice(0, 199); } else { this.status = "error"; return null; } } + /** + * 点赞 + * @param roomid 直播间号 + * @param target_id 主播UID + */ async like(roomid, target_id) { try { const response = await BAPI.live.likeReport(roomid, target_id); @@ -1942,11 +1986,11 @@ this.logger.log("给主播点赞任务已完成"); } } else { - if (!isNowIn(0, 0, 0, 5)) { + if (isNowIn(0, 0, 0, 5)) { + this.logger.log("昨天的给主播点赞任务已经完成过了,等到今天的00:05再执行"); + } else { this.logger.log("今天已经完成过给主播点赞任务了"); this.status = "done"; - } else { - this.logger.log("昨天的给主播点赞任务已经完成过了,等到今天的00:05再执行"); } } } @@ -2173,14 +2217,14 @@ } /** * 获取粉丝勋章的房间号和主播uid,过滤等级大于等于20或不符合黑白名单要求的粉丝勋章 - * @returns 数组,每个元素都是数组:[房间号,主播uid] + * @returns 数组,数组中的每个元素都是数组:[房间号,主播uid] */ getRoomidUidList() { const biliStore = useBiliStore(); if (biliStore.filteredFansMedals) { return biliStore.filteredFansMedals.filter( (medal) => medal.medal.level < 20 && (this.medalTasksConfig.isWhiteList ? this.medalTasksConfig.roomidList.includes(medal.room_info.room_id) : !this.medalTasksConfig.roomidList.includes(medal.room_info.room_id)) - ).map((medal) => [medal.room_info.room_id, medal.medal.target_id]).slice(0, 100); + ).map((medal) => [medal.room_info.room_id, medal.medal.target_id]).slice(0, 199); } else { return null; } @@ -2188,6 +2232,8 @@ /** * 获取指定直播间的 area_id 和 parent_area_id * + * 出错时返回 [-1, -1] + * * @param roomid 房间号 * @returns [area_id, parent_area_id] */ @@ -2199,14 +2245,14 @@ const room_info = response.data.room_info; return [room_info.area_id, room_info.parent_area_id]; } else { - return null; + return [-1, -1]; } } catch (error) { this.logger.error( `获取指定直播间的 area_id 和 parent_area_id(roomid = ${roomid}) 出错`, error ); - return null; + return [-1, -1]; } } async run() { @@ -2228,12 +2274,12 @@ } else { for (let i = 0; i < idList.length; i++) { const [roomid, uid] = idList[i]; - const areaInfo = await this.getAreaInfo(roomid); - if (areaInfo && areaInfo.every((id) => id > 0)) { + const [area_id, parent_area_id] = await this.getAreaInfo(roomid); + if (area_id > 0 && parent_area_id > 0) { new RoomHeart( roomid, - areaInfo[0], - areaInfo[1], + area_id, + parent_area_id, uid, this.config._watchedSecondsToday, i === idList.length - 1 ? true : false @@ -2244,11 +2290,11 @@ } } } else { - if (!isNowIn(0, 0, 0, 5)) { + if (isNowIn(0, 0, 0, 5)) { + this.logger.log("昨天的观看直播任务已经完成过了,等到今天的00:05再执行"); + } else { this.logger.log("今天已经完成过观看直播任务了"); this.status = "done"; - } else { - this.logger.log("昨天的观看直播任务已经完成过了,等到今天的00:05再执行"); } } } @@ -2275,12 +2321,17 @@ if (biliStore.filteredFansMedals) { return biliStore.filteredFansMedals.filter( (medal) => medal.medal.level < 20 && medal.room_info.room_id != 910884 && (this.medalTasksConfig.isWhiteList ? this.medalTasksConfig.roomidList.includes(medal.room_info.room_id) : !this.medalTasksConfig.roomidList.includes(medal.room_info.room_id)) - ).map((medal) => medal.room_info.room_id).slice(0, 100); + ).map((medal) => medal.room_info.room_id).slice(0, 199); } else { this.status = "error"; return null; } } + /** + * 发弹幕 + * @param danmu 弹幕内容 + * @param roomid 直播间号 + */ async sendDanmu(danmu, roomid) { try { const response = await BAPI.live.sendMsg(danmu, roomid); @@ -2312,11 +2363,11 @@ this.logger.log("发送弹幕任务已完成"); } } else { - if (!isNowIn(0, 0, 0, 5)) { + if (isNowIn(0, 0, 0, 5)) { + this.logger.log("昨天的发送弹幕任务已经完成过了,等到今天的00:05再执行"); + } else { this.logger.log("今天已经完成过发送弹幕任务了"); this.status = "done"; - } else { - this.logger.log("昨天的发送弹幕任务已经完成过了,等到今天的00:05再执行"); } } } @@ -2431,18 +2482,18 @@ this.status = "error"; } } - async run() { + run() { this.logger.log("银瓜子换硬币模块开始运行"); if (this.config.enabled) { if (!isTimestampToday(this.config._lastCompleteTime)) { this.status = "running"; - await this.exchange(); + this.exchange(); } else { - if (!isNowIn(0, 0, 0, 5)) { + if (isNowIn(0, 0, 0, 5)) { + this.logger.log("昨天的银瓜子换硬币任务已经完成过了,等到今天的00:05再执行"); + } else { this.logger.log("今天已经完成过银瓜子换硬币任务了"); this.status = "done"; - } else { - this.logger.log("昨天的银瓜子换硬币任务已经完成过了,等到今天的00:05再执行"); } } } @@ -2580,9 +2631,9 @@ if (diff < 86400) { this.logger.log( "领取年度大会员权益模块下次运行时间:", - luxon.DateTime.fromSeconds(this.config._nextReceiveTime).toString() + luxon.DateTime.fromSeconds(this.config._nextReceiveTime).toJSDate() ); - setTimeout(() => this.run(), diff); + setTimeout(() => this.run(), diff * 1e3); } else { this.logger.log("距离下次领取年度大会员权益的时间超过一天,不计划下次运行"); } @@ -2613,28 +2664,33 @@ const timeoutTimer = setTimeout(() => { clearInterval(findPlayertimer); clearTimeout(timeoutTimer); - reject2(); + reject2("等待播放器超时"); }, 1e4); }); } async switchQuality(livePlayer) { const playerInfo = livePlayer.getPlayerInfo(); if (playerInfo.liveStatus === 0) { - this.logger.log("当前直播间未开播"); + this.logger.log("当前直播间未开播,无需切换画质"); } else { - const switchFn = () => { - const targetQuality = playerInfo.qualityCandidates.find( - ({ desc }) => desc === this.config.qualityDesc - ); - if (targetQuality && playerInfo.quality !== targetQuality.qn) { - livePlayer.switchQuality(targetQuality.qn); - this.logger.log(`已将画质切换为${this.config.qualityDesc}`, targetQuality); - } - }; setTimeout( - () => switchFn(), + () => { + const targetQuality = playerInfo.qualityCandidates.find( + ({ desc }) => desc === this.config.qualityDesc + ); + if (targetQuality) { + if (playerInfo.quality !== targetQuality.qn) { + livePlayer.switchQuality(targetQuality.qn); + this.logger.log(`已将画质切换为${this.config.qualityDesc}`, targetQuality); + } else { + this.logger.log("当前画质已经是目标画质了,无需切换画质"); + } + } else { + this.logger.log("当前直播不支持目标画质,保持默认画质"); + } + }, // 这里针对特殊直播间和普通直播间设置了两套超时时间,特殊直播间超时时间更长 - !isSelfTopFrame() ? 5e3 : 2500 + isSelfTopFrame() ? 2500 : 5e3 ); } } @@ -2645,12 +2701,12 @@ const livePlayer = await this.waitForPlayer(); this.switchQuality(livePlayer); } catch (e) { - this.logger.error("等待播放器超时"); + this.logger.error("自动切换画质模块出错", e); } } } } - __publicField(SwitchLiveStreamQuality, "runMultiple", true); + __publicField(SwitchLiveStreamQuality, "runOnMultiplePages", true); __publicField(SwitchLiveStreamQuality, "runAt", "window-load"); __publicField(SwitchLiveStreamQuality, "runAfterDefault", false); class BanP2P extends BaseModule { @@ -2658,38 +2714,39 @@ super(...arguments); __publicField(this, "config", this.moduleStore.moduleConfig.EnhanceExperience.banp2p); } - async banP2P() { - var _a2; + banP2P() { const RTClist = [ "RTCPeerConnection", "mozRTCPeerConnection", "webkitRTCPeerConnection" ]; for (const i of RTClist) { - if (Object.prototype.hasOwnProperty.call(_unsafeWindow, i) && ((_a2 = Object.getOwnPropertyDescriptor(_unsafeWindow, i)) == null ? void 0 : _a2.configurable)) { + if (Object.prototype.hasOwnProperty.call(_unsafeWindow, i)) { Object.defineProperty(_unsafeWindow, i, { - value: function() { - this.addEventListener = function() { - }; - this.removeEventListener = function() { - }; - this.createDataChannel = function() { + value: class { + constructor() { + } + addEventListener() { + } + removeEventListener() { + } + createDataChannel() { return { close: function() { } }; - }; - this.createOffer = function() { + } + createOffer() { return Promise.resolve(); - }; - this.setLocalDescription = function() { + } + setLocalDescription() { return Promise.resolve(); - }; - this.close = function() { - }; - this.setRemoteDescription = function() { + } + close() { + } + setRemoteDescription() { return Promise.resolve(); - }; - this.createAnswer = function() { - }; + } + createAnswer() { + } }, enumerable: false, writable: false, @@ -2698,18 +2755,18 @@ } } } - async run() { + run() { this.logger.log("禁用P2P模块开始运行"); if (this.config.enabled) { try { - await this.banP2P(); + this.banP2P(); } catch (e) { this.logger.error("禁用P2P失败", e); } } } } - __publicField(BanP2P, "runMultiple", true); + __publicField(BanP2P, "runOnMultiplePages", true); __publicField(BanP2P, "runAt", "document-start"); __publicField(BanP2P, "onFrame", "all"); __publicField(BanP2P, "runAfterDefault", false); @@ -3152,6 +3209,10 @@ super(...arguments); __publicField(this, "config", this.moduleStore.moduleConfig.EnhanceExperience.noReport); } + /** + * 判断是否是需要拦截的 URL + * @param url 需要判断的 URL + */ static isTargetURL(url) { if (url.includes("//data.bilibili.com") || url.includes("//data.bilivideo.com")) { return true; @@ -3159,6 +3220,10 @@ return false; } } + /** + * 劫持一些能减少日志上报的方法 + * @param win window + */ hookProperties(win) { Object.defineProperty(win.navigator, "sendBeacon", { value: () => { @@ -3185,6 +3250,9 @@ } }); } + /** + * 劫持 XHR 和 fetch 请求 + */ async ajaxHook() { const ajaxHookProxyConfig = { onRequest: (config, handler) => { @@ -3219,18 +3287,18 @@ proxy(ajaxHookProxyConfig, _unsafeWindow); fproxy(fetchHookConfig, _unsafeWindow); } - async run() { + run() { this.logger.log("拦截日志数据上报模块开始运行"); if (this.config.enabled) { try { - await this.ajaxHook(); + this.ajaxHook(); } catch (e) { this.logger.error("拦截日志数据上报失败", e); } } } }; - __publicField(_NoReport, "runMultiple", true); + __publicField(_NoReport, "runOnMultiplePages", true); __publicField(_NoReport, "runAt", "document-start"); __publicField(_NoReport, "onFrame", "all"); __publicField(_NoReport, "runAfterDefault", false); @@ -3240,7 +3308,7 @@ super(...arguments); __publicField(this, "config", this.moduleStore.moduleConfig.EnhanceExperience.noSleep); } - async run() { + run() { this.logger.log("屏蔽挂机检测模块开始运行"); if (this.config.enabled) { setInterval(() => { @@ -3249,7 +3317,7 @@ } } } - __publicField(NoSleep, "runMultiple", true); + __publicField(NoSleep, "runOnMultiplePages", true); __publicField(NoSleep, "runAt", "window-load"); __publicField(NoSleep, "runAfterDefault", false); class RemovePKBox extends BaseModule { @@ -3284,7 +3352,7 @@ } } } - __publicField(RemovePKBox, "runMultiple", true); + __publicField(RemovePKBox, "runOnMultiplePages", true); class RemoveLiveWaterMark extends BaseModule { constructor() { super(...arguments); @@ -3297,7 +3365,7 @@ } } } - __publicField(RemoveLiveWaterMark, "runMultiple", true); + __publicField(RemoveLiveWaterMark, "runOnMultiplePages", true); class RemoveShopPopover extends BaseModule { constructor() { super(...arguments); @@ -3310,7 +3378,7 @@ } } } - __publicField(RemoveShopPopover, "runMultiple", true); + __publicField(RemoveShopPopover, "runOnMultiplePages", true); class RemoveGameParty extends BaseModule { constructor() { super(...arguments); @@ -3323,7 +3391,7 @@ } } } - __publicField(RemoveGameParty, "runMultiple", true); + __publicField(RemoveGameParty, "runOnMultiplePages", true); const otherModules = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ __proto__: null, DailyTask_LiveTask_AppUserTask: AppUserTask, @@ -3379,28 +3447,33 @@ } const useCacheStore = pinia$1.defineStore("cache", () => { const cache = vue.reactive(Storage.getCache()); - const isMainBLTHRunning = vue.ref(false); - function startAliveHeartBeat() { + const currentScriptType = vue.ref("Main"); + function startMainBLTHAliveHeartBeat() { cache.lastAliveHeartBeatTime = Date.now(); const timer = setInterval(() => cache.lastAliveHeartBeatTime = Date.now(), 5e3); - window.addEventListener("unload", function() { + window.addEventListener("unload", () => { clearInterval(timer); cache.lastAliveHeartBeatTime = 0; }); } - function checkIfMainBLTHRunning() { + function checkCurrentScriptType() { if (cache.lastAliveHeartBeatTime !== 0 && Date.now() - cache.lastAliveHeartBeatTime < 8e3) { - isMainBLTHRunning.value = true; + if (sessionStorage.getItem("main_blth_flag") === null) { + currentScriptType.value = "Other"; + } else { + currentScriptType.value = "SubMain"; + } } else { - isMainBLTHRunning.value = false; + currentScriptType.value = "Main"; + sessionStorage.setItem("main_blth_flag", "🚩"); } } vue.watch(cache, (newCache) => Storage.setCache(newCache)); return { cache, - isMainBLTHRunning, - startAliveHeartBeat, - checkIfMainBLTHRunning + currentScriptType, + startMainBLTHAliveHeartBeat, + checkCurrentScriptType }; }); const defaultModuleStatus = { @@ -3428,7 +3501,7 @@ } } }; - const allFrameModuleNames = []; + const allAndTopFrameModuleNames = []; const useModuleStore = pinia$1.defineStore("module", () => { const moduleConfig = vue.reactive(Storage.getModuleConfig()); const emitter = mittOnce(); @@ -3437,8 +3510,10 @@ const cacheStore2 = useCacheStore(); const promiseArray = []; for (const [name, module] of Object.entries(defaultModules)) { - if (module.runMultiple || !cacheStore2.isMainBLTHRunning) { - promiseArray.push(new module(name).run()); + if (module.runOnMultiplePages || cacheStore2.currentScriptType !== "Other") { + promiseArray.push( + new module(name).run() + ); } } return Promise.all(promiseArray); @@ -3448,13 +3523,13 @@ const logger2 = new Logger("ModuleStore_LoadModules"); if (isOnTargetFrame === "unknown") { for (const [name, module] of Object.entries(otherModules)) { - if (module.onFrame === "all") { - if (module.runMultiple || !cacheStore2.isMainBLTHRunning) { + if (module.onFrame === "all" || module.onFrame === "top" && isSelfTopFrame()) { + if (module.runOnMultiplePages || cacheStore2.currentScriptType !== "Other") { if (!module.runAfterDefault) { waitForMoment(module.runAt).then( () => new module(name).run() ); - allFrameModuleNames.push(name); + allAndTopFrameModuleNames.push(name); } } } @@ -3462,8 +3537,8 @@ } else { const defaultModulesLoaded = loadDefaultModules(); for (const [name, module] of Object.entries(otherModules)) { - if (!allFrameModuleNames.includes(name)) { - if (module.runMultiple || !cacheStore2.isMainBLTHRunning) { + if (module.onFrame === "target" || module.onFrame === "top" && isSelfTopFrame() && !allAndTopFrameModuleNames.includes(name) || module.onFrame === "all" && !allAndTopFrameModuleNames.includes(name)) { + if (module.runOnMultiplePages || cacheStore2.currentScriptType !== "Other") { waitForMoment(module.runAt).then(async () => { try { if (module.runAfterDefault) { @@ -3471,7 +3546,7 @@ } new module(name).run(); } catch (e) { - logger2.error(`运行默认模块时出错,模块${name}不运行`, e); + logger2.error(`运行默认模块时出错,模块 ${name} 不运行:`, e); } }); } @@ -3619,27 +3694,32 @@ _: 1 }), vue.createVNode(_component_el_divider), - vue.createVNode(_component_el_text, null, { - default: vue.withCtx(() => [ - vue.createTextVNode("  主站每日任务的完成情况可在") - ]), - _: 1 - }), - vue.createVNode(_component_el_link, { - class: "el-link-va-baseline", - rel: "noreferrer", - type: "primary", - href: "https://account.bilibili.com/account/home", - target: "_blank" - }, { - default: vue.withCtx(() => [ - vue.createTextVNode("个人中心") - ]), - _: 1 - }), - vue.createVNode(_component_el_text, null, { + vue.createVNode(_component_el_row, null, { default: vue.withCtx(() => [ - vue.createTextVNode("查看。数据更新可能有一定的延时。") + vue.createVNode(_component_el_text, null, { + default: vue.withCtx(() => [ + vue.createTextVNode("  主站每日任务的完成情况可在") + ]), + _: 1 + }), + vue.createVNode(_component_el_link, { + class: "el-link-va-baseline", + rel: "noreferrer", + type: "primary", + href: "https://account.bilibili.com/account/home", + target: "_blank" + }, { + default: vue.withCtx(() => [ + vue.createTextVNode("个人中心") + ]), + _: 1 + }), + vue.createVNode(_component_el_text, null, { + default: vue.withCtx(() => [ + vue.createTextVNode("查看。数据更新可能有一定的延时。") + ]), + _: 1 + }) ]), _: 1 }) @@ -3647,7 +3727,7 @@ }; } }); - const _withScopeId$1 = (n) => (vue.pushScopeId("data-v-d7ecdd75"), n = n(), vue.popScopeId(), n); + const _withScopeId$1 = (n) => (vue.pushScopeId("data-v-45a03c87"), n = n(), vue.popScopeId(), n); const _hoisted_1$2 = /* @__PURE__ */ _withScopeId$1(() => /* @__PURE__ */ vue.createElementVNode("br", null, null, -1)); const _hoisted_2$1 = { class: "avatar-wrap" }; const _sfc_main$8 = /* @__PURE__ */ vue.defineComponent({ @@ -3904,7 +3984,7 @@ modelValue: vue.unref(config).medalTasks.watch.time, "onUpdate:modelValue": _cache[7] || (_cache[7] = ($event) => vue.unref(config).medalTasks.watch.time = $event), placeholder: "Select", - style: { "width": "64px" } + style: { "width": "70px" } }, { default: vue.withCtx(() => [ (vue.openBlock(), vue.createElementBlock(vue.Fragment, null, vue.renderList(24, (i) => { @@ -4007,7 +4087,7 @@ default: vue.withCtx(() => [ vue.createVNode(_component_el_text, null, { default: vue.withCtx(() => [ - vue.createTextVNode("  由于每天能通过完成任务获得亲密度的粉丝勋章数量有限,脚本默认仅为最多100个等级小于20的粉丝勋章完成给主播点赞,发送弹幕,观看直播任务。") + vue.createTextVNode("  由于每天能通过完成任务获得亲密度的粉丝勋章数量有限,脚本默认仅为最多199个等级小于20的粉丝勋章完成给主播点赞,发送弹幕,观看直播任务。在脚本执行任务期间观看未执行任务的粉丝勋章对应直播间直播可能导致今天无法获取任何亲密度。") ]), _: 1 }) @@ -4175,7 +4255,7 @@ }; } }); - const LiveTasks = /* @__PURE__ */ _export_sfc(_sfc_main$8, [["__scopeId", "data-v-d7ecdd75"]]); + const LiveTasks = /* @__PURE__ */ _export_sfc(_sfc_main$8, [["__scopeId", "data-v-45a03c87"]]); const _sfc_main$7 = /* @__PURE__ */ vue.defineComponent({ __name: "OtherTasks", setup(__props) { @@ -4485,7 +4565,7 @@ }; } }); - const __default__ = { + const __default__ = vue.defineComponent({ components: { MainSiteTasks: _sfc_main$9, LiveTasks, @@ -4493,7 +4573,7 @@ EnhanceExperience: _sfc_main$6, RemoveElement: _sfc_main$5 } - }; + }); const _sfc_main$4 = /* @__PURE__ */ vue.defineComponent({ ...__default__, __name: "PanelMain", @@ -4890,7 +4970,7 @@ } } }; - const _withScopeId = (n) => (vue.pushScopeId("data-v-c1d8df5e"), n = n(), vue.popScopeId(), n); + const _withScopeId = (n) => (vue.pushScopeId("data-v-67653089"), n = n(), vue.popScopeId(), n); const _hoisted_1 = /* @__PURE__ */ _withScopeId(() => /* @__PURE__ */ vue.createElementVNode("svg", { xmlns: "http://www.w3.org/2000/svg", width: "128", @@ -4941,7 +5021,7 @@ }; } }); - const InfoIcon = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["__scopeId", "data-v-c1d8df5e"]]); + const InfoIcon = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["__scopeId", "data-v-67653089"]]); const _sfc_main = /* @__PURE__ */ vue.defineComponent({ __name: "TaskStatusIcon", props: { @@ -4995,12 +5075,10 @@ const pinia = pinia$1.createPinia(); const cacheStore = useCacheStore(pinia); const moduleStore = useModuleStore(pinia); - cacheStore.checkIfMainBLTHRunning(); - if (!cacheStore.isMainBLTHRunning) { - logger.log("当前脚本是Main BLTH,开始存活心跳"); - cacheStore.startAliveHeartBeat(); - } else { - logger.log("其它页面上存在正在运行的Main BLTH"); + cacheStore.checkCurrentScriptType(); + logger.log("当前脚本的类型为", cacheStore.currentScriptType); + if (cacheStore.currentScriptType === "Main") { + cacheStore.startMainBLTHAliveHeartBeat(); } moduleStore.loadModules("unknown"); await( waitForMoment("document-body"));