Queue
Every player has a queue of upcoming tracks and a bounded history of played ones. Every change emits queueUpdate.
Adding
Section titled “Adding”player.queue.add(track); // returns how many were addedplayer.queue.add([a, b, c]);player.queue.add(track, 2); // insert at index 2player.queue.addNext(track); // play nextawait player.enqueue(result); // add and start playing if idleThe queue holds up to playerDefaults.maxQueueSize tracks (10,000 by default). Extra tracks are dropped. Adding to a full queue throws QUEUE_FULL.
Reordering and removing
Section titled “Reordering and removing”player.queue.move(5, 0); // move track 5 to the frontplayer.queue.swap(1, 2);player.queue.shuffle();player.queue.remove(3); // returns the removed trackplayer.queue.removeRange(0, 5);player.queue.removeWhere((t) => t.requester?.id === userId); // remove everything from one userplayer.queue.dedupe(); // remove duplicates, keep the firstplayer.queue.clear();Methods that take an index return false or undefined for out-of-range values instead of throwing, so they’re safe to call with user input.
Reading
Section titled “Reading”player.queue.size; // number of upcoming tracksplayer.queue.isEmpty;player.queue.next; // the next trackplayer.queue.duration; // total ms, streams excludedplayer.queue.at(-1); // last trackplayer.queue.slice(0, 10); // first pageplayer.queue.find((t) => t.info.title.includes('remix'));
for (const track of player.queue) { // the queue is iterable}History
Section titled “History”player.queue.history; // played tracks, most recent lastplayer.queue.previous; // the last played trackawait player.previous(); // play it again; the current track returns to the frontplayer.queue.clearHistory();History keeps the last playerDefaults.historySize tracks (50 by default). Tracks that failed to load aren’t added.
Loop modes
Section titled “Loop modes”| Mode | When a track finishes |
|---|---|
'off' |
Play the next track, or end the queue |
'track' |
Play the same track again |
'queue' |
Move the finished track to the back of the queue |
skip() always moves on, even in 'track' mode.
Pagination example
Section titled “Pagination example”const page = 0;const perPage = 10;const lines = player.queue .slice(page * perPage, (page + 1) * perPage) .map((t, i) => `${page * perPage + i + 1}. ${t.info.title}`);