Discord Player
Guides

Events

React to playback, queue changes, voice, and errors.

You are reading the v8 docsDev

Discord Player has two event emitters.

EmitterScopeFirst argument
player.eventsOne guild queueThe queue
playerThe whole Player and Remedia nodesNone
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

EventWhen it fires
queueCreate, queueDeleteA queue is created or deleted
connection, connectionDestroyedThe voice session connects or is disposed
audioTrackAdd, audioTracksAddTracks are added
playerStartA track starts playing
playerFinishA track ends on its own
playerSkipA track is skipped
playerStopPlayback is stopped
playerErrorA track fails to play
emptyQueueNo upcoming tracks remain
emptyChannelThe 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

On this page