Build 574548stable
Module 376595
2,382 characters · in f53924d1262f4ea2.jsDependencies
Source Raw
function(e,t,a){a.d(t,{H:()=>r}),a(321073);var s=a(372684),n=a(731854);let i={speakingUserIds:[],activeSoundboards:[]};class r{timeline;userSpeakingStates;activeSoundboards;soundboardPlayCounts;constructor(e){this.timeline=[],this.userSpeakingStates=new Map,this.activeSoundboards=new Map,this.soundboardPlayCounts=new Map;const t=[...e].sort((e,t)=>e.timestamp-t.timestamp),a=new Set,n=new Set;for(const e of t){const t=e.signal;if(t.type===s.Gy.SPEAKING)a.has(t.userId)||(a.add(t.userId),0===t.speakingFlags&&this.userSpeakingStates.set(t.userId,!0));else if(t.type===s.Gy.SOUNDBOARD){const e=this.getSoundboardKey(t.soundboardId,t.userId);!n.has(e)&&(n.add(e),t.playing||(this.soundboardPlayCounts.set(e,1),this.activeSoundboards.set(e,this.soundboardFromSignal(t))))}}for(const e of((this.userSpeakingStates.size>0||this.activeSoundboards.size>0)&&this.appendSnapshot(0),t))e.signal.type===s.Gy.SPEAKING?this.processSpeakingEvent(e.signal):e.signal.type===s.Gy.SOUNDBOARD&&this.processSoundboardEvent(e.signal),this.appendSnapshot(e.timestamp)}static fromAttachmentTimeline(e){return new r(e.filter(e=>null!=e.speaking).map(e=>({timestamp:e.timestamp_ms,signal:{type:s.Gy.SPEAKING,userId:e.speaking.user_id,speakingFlags:e.speaking.speaking_flags}})))}appendSnapshot(e){this.timeline.push({timestamp:e,snapshot:this.getCurrentSnapshot()})}getSoundboardKey(e,t){return`${e}:${t}`}soundboardFromSignal(e){return{soundboardId:e.soundboardId,name:e.name,userId:e.userId,emojiId:e.emojiId,emojiName:e.emojiName,emojiAnimated:e.emojiAnimated}}processSpeakingEvent(e){this.userSpeakingStates.set(e.userId,(e.speakingFlags&n.ME.VOICE)===n.ME.VOICE)}processSoundboardEvent(e){let t=this.getSoundboardKey(e.soundboardId,e.userId),a=this.soundboardPlayCounts.get(t)??0;if(e.playing)this.soundboardPlayCounts.set(t,a+1),this.activeSoundboards.set(t,this.soundboardFromSignal(e));else{let e=Math.max(0,a-1);this.soundboardPlayCounts.set(t,e),0===e&&this.activeSoundboards.delete(t)}}getCurrentSnapshot(){return{speakingUserIds:Array.from(this.userSpeakingStates.entries()).filter(e=>{let[t,a]=e;return a}).map(e=>{let[t,a]=e;return t}),activeSoundboards:Array.from(this.activeSoundboards.values())}}getEventsAtTimestamp(e){let t=0,a=this.timeline.length-1,s=-1;for(;t<=a;){let n=Math.floor((t+a)/2);this.timeline[n].timestamp<=e?(s=n,t=n+1):a=n-1}return -1===s?i:this.timeline[s].snapshot}}}