mirror of
https://github.com/fluxerapp/fluxer
synced 2026-10-18 13:35:42 +09:00
66 lines
2.1 KiB
TypeScript
66 lines
2.1 KiB
TypeScript
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
|
|
import {
|
|
getVoiceConnectionContextFromMediaEngine,
|
|
getVoiceStateByConnectionIdFromMediaEngine,
|
|
} from '@app/features/voice/engine/VoiceMediaEngineBridge';
|
|
import LocalVoiceState from '@app/features/voice/state/LocalVoiceState';
|
|
import {isVoicePermissionMuteActive} from '@app/features/voice/utils/VoicePermissionUtils';
|
|
|
|
export interface EffectiveAudioState {
|
|
selfMute: boolean;
|
|
selfDeaf: boolean;
|
|
serverMute: boolean;
|
|
serverDeaf: boolean;
|
|
effectiveMute: boolean;
|
|
effectiveDeaf: boolean;
|
|
}
|
|
|
|
interface ComputeEffectiveAudioStateParams {
|
|
selfMute: boolean;
|
|
selfDeaf: boolean;
|
|
serverMute?: boolean;
|
|
serverDeaf?: boolean;
|
|
}
|
|
|
|
interface EffectiveAudioStateOptions {
|
|
connectionId?: string | null;
|
|
selfMute?: boolean;
|
|
selfDeaf?: boolean;
|
|
serverMute?: boolean;
|
|
serverDeaf?: boolean;
|
|
}
|
|
|
|
export function computeEffectiveAudioState(params: ComputeEffectiveAudioStateParams): EffectiveAudioState {
|
|
const serverMute = params.serverMute ?? false;
|
|
const serverDeaf = params.serverDeaf ?? false;
|
|
return {
|
|
selfMute: params.selfMute,
|
|
selfDeaf: params.selfDeaf,
|
|
serverMute,
|
|
serverDeaf,
|
|
effectiveMute: serverMute || serverDeaf || params.selfMute || params.selfDeaf,
|
|
effectiveDeaf: serverDeaf || params.selfDeaf,
|
|
};
|
|
}
|
|
|
|
export function getEffectiveAudioState(options?: EffectiveAudioStateOptions): EffectiveAudioState {
|
|
const selfMute = options?.selfMute ?? LocalVoiceState.getSelfMute();
|
|
const selfDeaf = options?.selfDeaf ?? LocalVoiceState.getSelfDeaf();
|
|
const connectionContext = getVoiceConnectionContextFromMediaEngine();
|
|
const connectionId = options?.connectionId ?? connectionContext?.connectionId;
|
|
const serverVoiceState = getVoiceStateByConnectionIdFromMediaEngine(connectionId);
|
|
const permissionMuted = isVoicePermissionMuteActive(
|
|
serverVoiceState,
|
|
connectionContext?.guildId,
|
|
connectionContext?.channelId,
|
|
);
|
|
const serverMute = options?.serverMute ?? serverVoiceState?.mute ?? false;
|
|
return computeEffectiveAudioState({
|
|
selfMute,
|
|
selfDeaf,
|
|
serverMute: serverMute || permissionMuted,
|
|
serverDeaf: options?.serverDeaf ?? serverVoiceState?.deaf ?? false,
|
|
});
|
|
}
|