Add fallback roomID

This commit is contained in:
the1812 2020-08-22 11:41:59 +08:00
parent b950d92fe4
commit 09c3412c1a
8 changed files with 22 additions and 17 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -181,7 +181,7 @@
"quick-favorite.min.js": "A68C33151E3B6E0EA73143FDB29E7F34EBE3496D9C40B2C0358466B3FAB63322",
"rank-list.vue.min.js": "5E0E59EE822A055C043929764470A8A8DA9BBB43E0FC31B17B3F2B43303EF0DF",
"record-live-danmaku.min.js": "2590A564ADD42BBB34E957B92728EBBE85A644A8E0F94ACDE69B55E3FF1C3889",
"record-live-danmaku.vue.min.js": "740784A24CD5326095C269FD33A5B498ADAAF03FE31B136060888D7E7B616BD3",
"record-live-danmaku.vue.min.js": "781B03852A7286F2ED261E697A290591E73F73B3264F26C1D6CE1CA649D9AE01",
"remove-promotions.min.css": "524327BDED373CE4F4FDDB32009D685100BA186B089648D5EAC7AD68512BFDBC",
"remove-promotions.min.js": "47D864E7CF96C5ED714E6903B6CB241880A5B9A696D888744F307D664844A858",
"remove-top-mask.min.js": "A15C1EC10D2E1A61845B1ADAE51860553F96427059E10443B1E53FAF48F45304",

Binary file not shown.

View File

@ -1 +1 @@
(()=>{return(e,o)=>{const r=`<div class=live-danmaku-recorder :class={opened}><div class=header><div class=title v-if="!(collapsed && isRecording)">记录弹幕</div><template v-if="collapsed && isRecording"><icon type=mdi icon=record-rec></icon><div class=collapse-danmaku-count>{{danmakus.length}}</div></template><icon class=collapse type=mdi :icon="collapsed ? 'chevron-up' : 'chevron-down'"@click.native="collapsed = !collapsed"></icon><div class=close @click="opened = false"><icon type=mdi icon=close></icon></div></div><template v-if=!collapsed><div class=record-stats>已记录{{danmakus.length}}条弹幕</div><div class=loading-tip v-if=loading>正在连接...</div><div class=toggle-record v-else @click="isRecording = !isRecording"><template v-if=isRecording><icon type=mdi icon=square></icon>记录中</template><template v-else><icon type=mdi icon=circle></icon>开始记录</template></div><div class=exports><div class=export-xml @click=exportXML()>导出XML</div></div></template></div>`;o.applyStyleFromText(`.live-danmaku-recorder{position:fixed;top:100%;left:0;transform:translateX(8px) translateY(calc(-100% + 8px));opacity:0;pointer-events:none;display:flex;flex-direction:column;align-items:center;padding:12px;z-index:1000;color:#000;background-color:#fff;box-shadow:rgba(0,0,0,.2) 0 4px 8px 0;border-radius:8px 8px 0 0;min-width:200px}.live-danmaku-recorder.opened{transform:translateX(8px) translateY(calc(-100%));opacity:1;pointer-events:initial}body.dark .live-danmaku-recorder{color:#fff;background-color:#282828}.live-danmaku-recorder,.live-danmaku-recorder *{transition:.2s ease-out}.live-danmaku-recorder .header{display:flex;align-items:center;align-self:stretch}.live-danmaku-recorder .header .collapse{cursor:pointer}.live-danmaku-recorder .header .collapse-danmaku-count{flex-grow:1;padding-right:24px}.live-danmaku-recorder .header .title{flex-grow:1;font-weight:700;font-size:15px;padding-right:16px}.live-danmaku-recorder .header .close{cursor:pointer}.live-danmaku-recorder .header .close .be-icon{font-size:20px}.live-danmaku-recorder .record-stats{margin-top:16px;margin-bottom:8px}.live-danmaku-recorder .loading-tip{margin-bottom:16px}.live-danmaku-recorder .toggle-record{display:flex;align-items:center;padding:8px;margin-bottom:16px;background-color:var(--theme-color);color:var(--foreground-color);cursor:pointer;border-radius:8px}.live-danmaku-recorder .toggle-record .be-icon{font-size:14px;margin-right:8px}.live-danmaku-recorder .exports{align-self:stretch;display:flex;align-items:center}.live-danmaku-recorder .exports>*{border-radius:8px;cursor:pointer;padding:8px;text-align:center;white-space:nowrap;background-color:#8882}.live-danmaku-recorder .exports>:hover{background-color:#8884}.live-danmaku-recorder .exports .export-xml{flex:2 0 0}.live-danmaku-recorder .exports .export-ass{flex:1 0 0;margin-left:8px}`,"record-live-danmaku-style");return{export:Object.assign({template:r},{components:{Icon:()=>o.importAsync("icon.vue")},data(){return{isRecording:true,danmakus:[],opened:false,collapsed:false,loading:true}},async mounted(){try{const{LiveSocket:e}=await o.importAsync("live-socket");const r=await SpinQuery.select(".header-info-ctnr .room-cover");const a=r.href.match(/space\.bilibili\.com\/(\d+)/)[1];const i=await Ajax.getJson(`https://api.live.bilibili.com/room/v1/Room/getRoomInfoOld?mid=${a}`);const t=_.get(i,"data.roomid",document.URL.match(/live\.bilibili\.com\/(\d+)/)[1]);const n=new e(parseInt(t));n.addEventListener("danmaku",e=>{if(this.isRecording){console.log(e.detail.content);this.danmakus.push(e.detail)}});await n.start()}catch(e){logError(e)}finally{this.loading=false}},methods:{getXML(){const e=this.danmakus.map(e=>{const o=e.content.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&apos;");return`<d p="${fixed(e.time/1e3,3)},${e.type},${e.fontSize},${e.color},${e.sendTime},0,${e.userHash},0">${o}</d>`});const o=`\n<?xml version="1.0" encoding="UTF-8"?>\n<i>\n ${e.join("\n ")}\n</i>\n`.trim();return o},async exportXML(){const{getFriendlyTitle:e}=await o.importAsync("title");const{DownloadVideoPackage:r}=await o.importAsync("download-video-package");const a=new r;a.add(e()+".xml",this.getXML());await a.emit()},async exportASS(){const e=this.getXML();console.log(e)}}})}}})();
(()=>{return(e,o)=>{const r=`<div class=live-danmaku-recorder :class={opened}><div class=header><div class=title v-if="!(collapsed && isRecording)">记录弹幕</div><template v-if="collapsed && isRecording"><icon type=mdi icon=record-rec></icon><div class=collapse-danmaku-count>{{danmakus.length}}</div></template><icon class=collapse type=mdi :icon="collapsed ? 'chevron-up' : 'chevron-down'"@click.native="collapsed = !collapsed"></icon><div class=close @click="opened = false"><icon type=mdi icon=close></icon></div></div><template v-if=!collapsed><div class=record-stats>已记录{{danmakus.length}}条弹幕</div><div class=loading-tip v-if=loading>正在连接...</div><div class=toggle-record v-else @click="isRecording = !isRecording"><template v-if=isRecording><icon type=mdi icon=square></icon>记录中</template><template v-else><icon type=mdi icon=circle></icon>开始记录</template></div><div class=exports><div class=export-xml @click=exportXML()>导出XML</div></div></template></div>`;o.applyStyleFromText(`.live-danmaku-recorder{position:fixed;top:100%;left:0;transform:translateX(8px) translateY(calc(-100% + 8px));opacity:0;pointer-events:none;display:flex;flex-direction:column;align-items:center;padding:12px;z-index:1000;color:#000;background-color:#fff;box-shadow:rgba(0,0,0,.2) 0 4px 8px 0;border-radius:8px 8px 0 0;min-width:200px}.live-danmaku-recorder.opened{transform:translateX(8px) translateY(calc(-100%));opacity:1;pointer-events:initial}body.dark .live-danmaku-recorder{color:#fff;background-color:#282828}.live-danmaku-recorder,.live-danmaku-recorder *{transition:.2s ease-out}.live-danmaku-recorder .header{display:flex;align-items:center;align-self:stretch}.live-danmaku-recorder .header .collapse{cursor:pointer}.live-danmaku-recorder .header .collapse-danmaku-count{flex-grow:1;padding-right:24px}.live-danmaku-recorder .header .title{flex-grow:1;font-weight:700;font-size:15px;padding-right:16px}.live-danmaku-recorder .header .close{cursor:pointer}.live-danmaku-recorder .header .close .be-icon{font-size:20px}.live-danmaku-recorder .record-stats{margin-top:16px;margin-bottom:8px}.live-danmaku-recorder .loading-tip{margin-bottom:16px}.live-danmaku-recorder .toggle-record{display:flex;align-items:center;padding:8px;margin-bottom:16px;background-color:var(--theme-color);color:var(--foreground-color);cursor:pointer;border-radius:8px}.live-danmaku-recorder .toggle-record .be-icon{font-size:14px;margin-right:8px}.live-danmaku-recorder .exports{align-self:stretch;display:flex;align-items:center}.live-danmaku-recorder .exports>*{border-radius:8px;cursor:pointer;padding:8px;text-align:center;white-space:nowrap;background-color:#8882}.live-danmaku-recorder .exports>:hover{background-color:#8884}.live-danmaku-recorder .exports .export-xml{flex:2 0 0}.live-danmaku-recorder .exports .export-ass{flex:1 0 0;margin-left:8px}`,"record-live-danmaku-style");return{export:Object.assign({template:r},{components:{Icon:()=>o.importAsync("icon.vue")},data(){return{isRecording:true,danmakus:[],opened:false,collapsed:false,loading:true}},async mounted(){try{const{LiveSocket:e}=await o.importAsync("live-socket");const r=await SpinQuery.select(".header-info-ctnr .room-cover");let i;if(r!==null){const e=r.href.match(/space\.bilibili\.com\/(\d+)/)[1];const o=await Ajax.getJson(`https://api.live.bilibili.com/room/v1/Room/getRoomInfoOld?mid=${e}`);i=_.get(o,"data.roomid",document.URL.match(/live\.bilibili\.com\/(\d+)/)[1])}else{i=document.URL.match(/live\.bilibili\.com\/(\d+)/)[1]}const a=new e(parseInt(i));a.addEventListener("danmaku",e=>{if(this.isRecording){console.log(e.detail.content);this.danmakus.push(e.detail)}});await a.start()}catch(e){logError(e)}finally{this.loading=false}},methods:{getXML(){const e=this.danmakus.map(e=>{const o=e.content.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&apos;");return`<d p="${fixed(e.time/1e3,3)},${e.type},${e.fontSize},${e.color},${e.sendTime},0,${e.userHash},0">${o}</d>`});const o=`\n<?xml version="1.0" encoding="UTF-8"?>\n<i>\n ${e.join("\n ")}\n</i>\n`.trim();return o},async exportXML(){const{getFriendlyTitle:e}=await o.importAsync("title");const{DownloadVideoPackage:r}=await o.importAsync("download-video-package");const i=new r;i.add(e()+".xml",this.getXML());await i.emit()},async exportASS(){const e=this.getXML();console.log(e)}}})}}})();

View File

@ -57,15 +57,20 @@ export default {
const user = (await SpinQuery.select(
'.header-info-ctnr .room-cover'
)) as HTMLAnchorElement
const uid = user.href.match(/space\.bilibili\.com\/(\d+)/)![1]
const json = await Ajax.getJson(
`https://api.live.bilibili.com/room/v1/Room/getRoomInfoOld?mid=${uid}`
)
const roomID = _.get(
json,
'data.roomid',
document.URL.match(/live\.bilibili\.com\/(\d+)/)![1]
)
let roomID: string
if (user !== null) {
const uid = user.href.match(/space\.bilibili\.com\/(\d+)/)![1]
const json = await Ajax.getJson(
`https://api.live.bilibili.com/room/v1/Room/getRoomInfoOld?mid=${uid}`
)
roomID = _.get(
json,
'data.roomid',
document.URL.match(/live\.bilibili\.com\/(\d+)/)![1]
)
} else {
roomID = document.URL.match(/live\.bilibili\.com\/(\d+)/)![1]
}
const socket = new LiveSocket(parseInt(roomID))
socket.addEventListener('danmaku', (e: CustomEvent<LiveDanmaku>) => {
if (this.isRecording) {