Loading
function(e,t,n){"use strict";n.d(t,{ih:()=>S,LZ:()=>T,Ay:()=>y}),n(321073);var i=n(459838),r=n(451988),s=n(439372),a=n(77729),o=n(608960),l=n(952818),u=n(209932),c=n(495544),d=n(274372);class _{timeline=[];timelineLength;constructor(e=3e5){this.timelineLength=e}clear(){this.timeline.length=0}updateLength(e){this.timelineLength=e,this.cull()}add(e){if(0===this.timeline.length||this.timeline[this.timeline.length-1].timestamp<=e.timestamp){this.timeline.push(e),this.cull();return}let t=this.timeline.length;for(let n=this.timeline.length-1;n>=0;n--)if(this.timeline[n].timestamp<=e.timestamp){t=n+1;break}t===this.timeline.length&&this.timeline[0].timestamp>e.timestamp&&(t=0),this.timeline.splice(t,0,e),this.cull()}read(){return this.cull(),this.timeline}cull(){let e=Date.now()-this.timelineLength;for(;this.timeline.length>0&&this.timeline[0].timestamp<e;)this.timeline.shift()}}var h=n(372684),f=n(572164),p=n(284009),E=n.n(p);function m(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:3,i=[];for(let n of e){E()(null!=n.decision,"candidate clip missing .decision");let e=n.decision.timestamp,r=e-n.length,s=[];for(let n in t.audioModelDataPerUser){let i=function(e,t,n){return e.filter(e=>e.timestamp_ms>=t&&e.timestamp_ms<=n)}(t.audioModelDataPerUser[n].laughterData,r,e);i.length>0&&s.push(i)}let a=[];for(let e of s){let t=0,n=0;for(let i of e)i.value>T&&t++,n+=i.value;n/=e.length,t+=n,a.push(t)}let o=1;for(let e of a)o*=Math.max(e,1);i.push({clip:n,score:o})}i.sort((e,t)=>t.score-e.score);let r=[];for(let e of i){E()(null!=e.clip.decision,"clip missing .decision");let t=e.clip.decision.timestamp,i=t-e.clip.length,s=!1;for(let e of r){E()(null!=e.clip.decision,"clip missing .decision");let n=e.clip.decision.timestamp,r=n-e.clip.length;if(Math.min(t,n)-Math.max(i,r)>=5e3){s=!0;break}}if(s||r.push(e),r.length===n)break}return{allClipsRanked:i,selected:r}}var g=n(315240);function A(){return{audioModelDataPerUser:{}}}var I=n(696016);let T=.55;class S extends s.A{timeline;scheduledClipTimeout=new r.Ep;scheduledClipSignal=null;lastClipTimestamp=0;pendingCandidateDiscards=new Set;decisionSignals=A();sessionEndTimeout=new r.Ep;currentSessionGameKey=null;pendingSessionGameKey=null;constructor(){super(),this.timeline=new _(d.A.getSettings().clipsLength)}actions={CLIPS_SIGNAL_CREATED:e=>this.handleClipsSignalCreated(e.signal,e.timestamp),CLIPS_ML_DETECTION:e=>this.handleMlDetection(e.detections),SPEAKING:e=>this.handleSpeaking(e),GUILD_SOUNDBOARD_SOUND_PLAY_START:e=>this.handleSoundboardPlayStart(e),GUILD_SOUNDBOARD_SOUND_PLAY_END:e=>this.handleSoundboardPlayEnd(e),RUNNING_GAMES_CHANGE:()=>this.handleRunningGamesChange(),CLIPS_SAVE_CLIP:e=>this.handleLateCandidateSave(e),VOICE_CHANNEL_SELECT:()=>this.clear(),CLIPS_SETTINGS_UPDATE:()=>this.handleSettingsUpdate()};handleClipsSignalCreated(e,t){this.isSignalEnabled(e.type)&&this.process(e,t)}handleMlDetection(e){for(let t of e){let e=this.decisionSignals.audioModelDataPerUser[t.user_id];for(let n of(null==e&&(e={laughterData:[],shoutingData:[]},this.decisionSignals.audioModelDataPerUser[t.user_id]=e),t.data_points))"laughter"===n.label?(e.laughterData.push({timestamp_ms:n.timestamp_ms,value:n.confidence}),n.confidence>T&&this.process({type:h.Gy.LAUGHTER,label:n.label,confidence:n.confidence},n.timestamp_ms)):"shouting"===n.label&&e.shoutingData.push({timestamp_ms:n.timestamp_ms,value:n.confidence})}}handleSpeaking(e){if(!(0,f.TD)()||e.context!==i.x.DEFAULT)return;let t=d.A.isVoiceRecordingAllowedForUser(e.userId);(e.userId===c.default.getId()||t)&&this.process({type:h.Gy.SPEAKING,speakingFlags:e.speakingFlags,userId:e.userId})}handleSoundboardPlayStart(e){if(!(0,f.TD)())return;let t=u.A.getSoundById(e.soundId);if(null==t)return;let n=o.A.getGuildEmojis(t.guildId)?.[t.emojiId??""];this.process({type:h.Gy.SOUNDBOARD,playing:!0,soundboardId:e.soundId,emojiId:n?.id,emojiAnimated:n?.animated,emojiName:n?.name??t.emojiName,name:t.name,userId:e.userId})}handleSoundboardPlayEnd(e){if(!(0,f.TD)())return;let t=u.A.getSoundById(e.soundId);if(null==t)return;let n=o.A.getGuildEmojis(t.guildId)?.[t.emojiId??""];this.process({type:h.Gy.SOUNDBOARD,playing:!1,soundboardId:e.soundId,emojiId:n?.id,emojiAnimated:n?.animated,emojiName:n?.name,name:t.name,userId:e.userId})}isSignalEnabled(e){switch(e){case h.Gy.DISTRIBUTED:return d.A.getSettings().clipSignals.enableDistributedSignals;case h.Gy.PHRASE:return d.A.getSettings().clipSignals.enablePhraseSignals;case h.Gy.GAME_EVENT:return d.A.getSettings().clipSignals.enableGameSignals;default:return!0}}process(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Date.now();switch(this.timeline.add({signal:e,timestamp:t}),e.type){case h.Gy.MANUAL:case h.Gy.DISTRIBUTED:this.scheduleClip(e);break;case h.Gy.GAME_EVENT:1===e.importance&&this.scheduleClip(e,1e4);break;case h.Gy.PHRASE:if(this.scheduledClipSignal?.type===h.Gy.GAME_EVENT||performance.now()-this.lastClipTimestamp<1e4)return;this.scheduleClip(e);break;case h.Gy.LAUGHTER:if(this.scheduledClipSignal?.type===h.Gy.GAME_EVENT||this.scheduledClipSignal?.type===h.Gy.PHRASE||performance.now()-this.lastClipTimestamp<15e3)return;this.scheduleClip(e,0,!0)}}read(){return{timeline:this.timeline.read(),scheduledClipSignal:this.scheduledClipSignal,phraseCooldown:Math.max(0,1e4-(performance.now()-this.lastClipTimestamp))}}clear(){I.nx.info(`decider: clear() called \u{2014} currentSessionGameKey=${this.currentSessionGameKey} pendingSessionGameKey=${this.pendingSessionGameKey} pendingCandidates=${d.A.getPendingClipCandidates().length} candidates=${d.A.getClipCandidates().length}`),this.sessionEndTimeout.stop(),this.currentSessionGameKey=null,this.pendingSessionGameKey=null,this.processClipCandidates(),this.unscheduleClip(),this.lastClipTimestamp=0,this.timeline.clear()}unscheduleClip(){this.scheduledClipTimeout.stop(),this.scheduledClipSignal=null}scheduleClip(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];I.nx.info(`decider: scheduleClip signal=${e.type} delay=${t}ms isCandidate=${n}`),this.unscheduleClip(),this.scheduledClipSignal=e,this.lastClipTimestamp=performance.now()+t,this.scheduledClipTimeout.start(t,()=>{I.nx.info(`decider: scheduled timeout fired \u{2014} saving clip (signal=${e.type} isCandidate=${n})`),this.scheduledClipSignal=null,(0,g.yd)(e.type===h.Gy.MANUAL?"manual":"auto",[...this.timeline.read()],{signal:e,timestamp:Date.now()},n)})}handleRunningGamesChange(){let e=l.Ay.getVisibleGame(),t=null!=e?(0,l.Es)(e):null;if(I.nx.info(`decider: handleRunningGamesChange visibleGame=${e?.name??"null"} newPrimaryKey=${t} currentSessionGameKey=${this.currentSessionGameKey} pendingSessionGameKey=${this.pendingSessionGameKey}`),null===this.currentSessionGameKey){I.nx.info(`decider: handleRunningGamesChange \u{2014} starting session for ${t}`),this.currentSessionGameKey=t;return}if(t===this.currentSessionGameKey){I.nx.info("decider: handleRunningGamesChange \u2014 same primary, cancelling pending end"),this.sessionEndTimeout.stop(),this.pendingSessionGameKey=null;return}if(null===t){I.nx.info("decider: handleRunningGamesChange \u2014 visible game became null, finalizing session immediately"),this.sessionEndTimeout.stop(),this.processClipCandidates(),this.currentSessionGameKey=null,this.pendingSessionGameKey=null;return}this.pendingSessionGameKey===t?I.nx.info("decider: handleRunningGamesChange \u2014 already debouncing for this key"):(I.nx.info(`decider: handleRunningGamesChange \u{2014} primary game changed from ${this.currentSessionGameKey} to ${t}, debouncing 30000ms`),this.pendingSessionGameKey=t,this.sessionEndTimeout.start(3e4,()=>{I.nx.info(`decider: sessionEndTimeout fired after debounce \u{2014} finalizing session (newPrimaryKey=${t})`),this.processClipCandidates(),this.currentSessionGameKey=t,this.pendingSessionGameKey=null}))}async debugStashDeciderData(){if(d.A.getPendingClipCandidates().length>0)return void alert("wait for pending candidates to finish saving!");let e=d.A.getClipCandidates();if(0===e.length)return void alert("no candidates to stash");let t={decisionSignals:this.decisionSignals,clipCandidates:e};await a.A.clips.debugStashClipDeciderData(t),I.nx.info(`debugStashDeciderData: stashed ${e.length} candidates`)}static async debugRerunRanking(){I.nx.info("DEBUG RERUN RANKING");let e=await a.A.clips.debugReadStashedClipDeciderData(),t=m(e.clipCandidates,e.decisionSignals);I.nx.info("ranked clips:",t),t.selected.forEach((e,t)=>{I.nx.info(`Clip ${t+1} score ${e.score}, ${a.A.fileManager.basename(e.clip.filepath)}`)})}processClipCandidates(){let e=d.A.getClipCandidates(),t=m(e,this.decisionSignals);for(let n of(I.nx.info("ranked clips:",t),e))null!=t.selected.find(e=>e.clip.id===n.id)?(0,g.K7)(n):(0,g.oH)(n.filepath,n.id);for(let e of d.A.getPendingClipCandidates())this.pendingCandidateDiscards.add(e.id);this.decisionSignals=A()}handleLateCandidateSave(e){let{clip:t}=e;this.pendingCandidateDiscards.has(t.id)&&(this.pendingCandidateDiscards.delete(t.id),(0,g.oH)(t.filepath,t.id))}handleSettingsUpdate(){this.timeline.updateLength(d.A.getSettings().clipsLength)}}let y=new S}