mirror of
https://github.com/discordjs/discord.js.git
synced 2026-03-11 00:53:31 +01:00
* chore: use descriptive type parameter names * refactor: requested changes --------- Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com>
56 lines
2.1 KiB
TypeScript
56 lines
2.1 KiB
TypeScript
import { type EventEmitter, once } from 'node:events';
|
|
import type { VoiceConnection, VoiceConnectionStatus } from '../VoiceConnection';
|
|
import type { AudioPlayer, AudioPlayerStatus } from '../audio/AudioPlayer';
|
|
import { abortAfter } from './abortAfter';
|
|
|
|
/**
|
|
* Allows a voice connection a specified amount of time to enter a given state, otherwise rejects with an error.
|
|
*
|
|
* @param target - The voice connection that we want to observe the state change for
|
|
* @param status - The status that the voice connection should be in
|
|
* @param timeoutOrSignal - The maximum time we are allowing for this to occur, or a signal that will abort the operation
|
|
*/
|
|
export function entersState(
|
|
target: VoiceConnection,
|
|
status: VoiceConnectionStatus,
|
|
timeoutOrSignal: AbortSignal | number,
|
|
): Promise<VoiceConnection>;
|
|
|
|
/**
|
|
* Allows an audio player a specified amount of time to enter a given state, otherwise rejects with an error.
|
|
*
|
|
* @param target - The audio player that we want to observe the state change for
|
|
* @param status - The status that the audio player should be in
|
|
* @param timeoutOrSignal - The maximum time we are allowing for this to occur, or a signal that will abort the operation
|
|
*/
|
|
export function entersState(
|
|
target: AudioPlayer,
|
|
status: AudioPlayerStatus,
|
|
timeoutOrSignal: AbortSignal | number,
|
|
): Promise<AudioPlayer>;
|
|
|
|
/**
|
|
* Allows a target a specified amount of time to enter a given state, otherwise rejects with an error.
|
|
*
|
|
* @param target - The object that we want to observe the state change for
|
|
* @param status - The status that the target should be in
|
|
* @param timeoutOrSignal - The maximum time we are allowing for this to occur, or a signal that will abort the operation
|
|
*/
|
|
export async function entersState<Target extends AudioPlayer | VoiceConnection>(
|
|
target: Target,
|
|
status: AudioPlayerStatus | VoiceConnectionStatus,
|
|
timeoutOrSignal: AbortSignal | number,
|
|
) {
|
|
if (target.state.status !== status) {
|
|
const [ac, signal] =
|
|
typeof timeoutOrSignal === 'number' ? abortAfter(timeoutOrSignal) : [undefined, timeoutOrSignal];
|
|
try {
|
|
await once(target as EventEmitter, status, { signal });
|
|
} finally {
|
|
ac?.abort();
|
|
}
|
|
}
|
|
|
|
return target;
|
|
}
|