Events
React to playback, queue changes, voice, and errors.
Discord Player has two event emitters.
| Emitter | Scope | First argument |
|---|---|---|
player.events | One guild queue | The queue |
player | The whole Player and Remedia nodes | None |
player.events.on('playerStart', (queue, track) => {
console.log('Playing', track.title, 'in', queue.guildId);
});
player.events.on('playerFinish', (queue, track) => {
console.log('Finished', track.title);
});
player.events.on('playerError', (queue, error, track) => {
console.error('Cannot play', track.title, error);
});Register listeners once, during startup.
Common queue events
| Event | When it fires |
|---|---|
queueCreate, queueDelete | A queue is created or deleted |
connection, connectionDestroyed | The voice session connects or is disposed |
audioTrackAdd, audioTracksAdd | Tracks are added |
playerStart | A track starts playing |
playerFinish | A track ends on its own |
playerSkip | A track is skipped |
playerStop | Playback is stopped |
playerError | A track fails to play |
emptyQueue | No upcoming tracks remain |
emptyChannel | The voice channel has no listeners |
Every event and its arguments are listed in the event reference.
Do not advance the queue yourself
The queue starts the next track automatically. Do not call queue.playNext() from a playerFinish listener.
A natural finish, a skip, a stop, and a failure are different events. Handle each separately, for example to avoid sending "finished" messages for skipped tracks.
Player events
player.on('error', (error) => console.error('Player error:', error));
player.on('debug', (message) => console.debug(message));player also emits Remedia node events such as nodeConnected and nodeDisconnected. See Remedia events.
Remedia event data
Events that come from Remedia receive the original Remedia event as their last argument. Events that Discord Player creates itself, such as queueCreate, do not.
player.events.on('volumeChange', (queue, oldVolume, newVolume, rawEvent) => {
console.log(queue.guildId, oldVolume, newVolume, rawEvent?.generation);
});Use the final argument when you need Remedia details. Use the earlier arguments for your own logic, because they use Discord Player's own Track and queue objects.
Continue reading
Connect to voice