Lavaqueue
A simple queue system for Lavalink, backed by Redis. Built as extension of my generic Lavalink wrapper.
How to use
const Client: Lavaqueue = ;const voice = userID: '' // the user that will be sending audio password: '' // your lavalink password hosts: rest: '' // your lavalink rest endpoint (include port and protocol) ws: '' // your lavalink ws endpoint (include port and protocol) redis: '' // your redis instance { // send the packet to the appropriate gateway connection } { // optional // called at the end of a track when the queue is otherwise unaware of how many tracks to // advance by; returns a number: 0 to repeat, negative to advance in reverse, positive to // advance forward }; { const res = await voice; const queue = voicequeues; await queueplayer; // join the voice channel await queue; // add songs to the queue await queuestart; // start the queue} { await voicequeuesnext;} { await voicequeues;}
Queues are resilient to crashes, meaning it's safe to blindly restart a queue: it will attempt to recover the previous song at the point the crash occurred. You can restart all currently playing queues by calling voice.queues.start()
, although it is recommended to do so as infrequently as possible.
Reference
Queue
store: QueueStore
guildID: string
- readonly
player
- the lavalink player start(): Promise<boolean>
- start the queueadd(...tracks: string[]): Promise<number>
- add tracks to the queueunshift(...tracks: string[]): Promise<number>
- add tracks to the front of the queueremove(track: string): PromiseLike<number>
- remove a track from the queuenext(count: number = 1): Promise<boolean>
- skip to the next song; pass negatives to advance in reverse, or 0 to repeatsort(predicate?: (a: string, b: string) => number): Promise<number>
- sort the upcoming tracks; resolves with the length of the queuemove(from: number, to: number): Promise<string[]>
- move a track by index; resolves with the new listshuffle(): Promise<string[]>
- shuffle the list; resolves with the new listsplice(start: number, deleteCount?: number, ...tracks: string[]): Promise<string[]>
- splice the list at the given position; works like Array#splicetrim(start: number, end: number): PromiseLike<string>
- trim the queue to between the specified positionsstop(): Promise<void>
- stop playbackclear(): PromiseLike<number>
- clear the queuecurrent(): Promise<NP | null>
- retrieve the current song: returns an object with propertiestrack
andposition
tracks(start: number = 0, end: number = -1): Promise<string[]>
- retrieves queued tracks
QueueStore extends Map<string, Queue>
client: Client
redis: Redis
- the ioredis instance this queue store is usingstart(filter?: (guildID: string) => boolean)
- start all currently playing queues, with an optional filter callbackget(key: string): Queue
- gets the specified queue, or creates one if none is found