Skip to content

Events

Raya is a typed EventEmitter: listener arguments are checked by TypeScript.

raya.on('trackStart', (player, track) => {});
raya.once('ready', () => {});
raya.off('trackStart', listener);

Lifecycle events

EventArgumentsDescription
ready()init() finished its first connection attempt to every node.
debug(message: string)Detailed internal logs. Only built when something listens (or with the debug option).

Node events

EventArgumentsDescription
nodeAdd(node: Node)A node was added, either from the options or with addNode().
nodeRemove(node: Node)A node was removed with removeNode(). Its players were moved first.
nodeReady(node: Node, resumed: boolean)A node has a ready session. resumed is true when an existing session was resumed.
nodeDisconnect(node: Node, info: { code, reason, wasReady })The WebSocket closed. Raya reconnects automatically unless you disconnected on purpose.
nodeReconnecting(node: Node, attempt: number, delay: number)A reconnect is scheduled after delay ms.
nodeError(node: Node, error: Error)Connection problems, authentication failures or node-level REST errors.
nodeStats(node: Node, stats: NodeStats)Lavalink sent fresh stats: players, CPU, memory and frame stats.
nodeRaw(node: Node, payload: unknown)Every WebSocket message, before Raya handles it.

Player events

EventArgumentsDescription
playerCreate(player: Player)A player was created, including players restored from a snapshot.
playerDestroy(player: Player, reason: PlayerDestroyReason)A player was destroyed. reason: 'manual', 'queueEnd', 'channelEmpty', 'voiceDisconnected', 'channelDeleted', 'guildDeleted'.
playerMove(player: Player, oldChannelId: string | null, newChannelId: string | null)The bot moved between voice channels. newChannelId is null when it was disconnected.
playerNodeMove(player: Player, from: Node, to: Node)A player moved to another node (failover or moveNode) without losing its state.
playerUpdate(player: Player, state: { time, position, connected, ping })Periodic state from Lavalink, about every 5 seconds while connected.
playerResume(player: Player)A player was resumed, rebuilt after a session loss, or restored from a snapshot.
playerError(player: Player, error: Error)A background error, e.g. auto-advance, voice forwarding or autoplay failed.
voiceChannelEmpty(player: Player)The last human left the voice channel.
voiceChannelFilled(player: Player)Someone joined the voice channel after it was empty.
socketClosed(player: Player, info: { code, reason, byRemote })Lavalink's voice connection to Discord closed. Raya rejoins for recoverable codes.

Track events

EventArgumentsDescription
trackStart(player: Player, track: Track)A track started playing. track is your queued object, with its requester.
trackEnd(player: Player, track: Track, reason: 'finished' | 'loadFailed' | 'stopped' | 'replaced' | 'cleanup')A track ended. Raya advances the queue by itself on finished and loadFailed.
trackStuck(player: Player, track: Track, thresholdMs: number)Lavalink could not provide audio for a while. Skipped automatically with skipOnStuck.
trackError(player: Player, track: Track, exception: { message, severity, cause })Lavalink failed to play a track. The queue moves on.

Queue events

EventArgumentsDescription
queueEnd(player: Player, lastTrack: Track | null)The queue ran out and autoplay (if on) found nothing.
queueUpdate(player: Player, queue: Queue)Tracks were added, removed, moved, shuffled or cleared.

Plugin events

EventArgumentsDescription
lyricsFound(player: Player, lyrics: Lyrics)LavaLyrics found lyrics for the current track (after subscribeLyrics).
lyricsNotFound(player: Player)LavaLyrics found no lyrics for the current track.
lyricsLine(player: Player, line: LyricsLine, lineIndex: number, skipped: boolean)A time-synced lyrics line is now being sung.
segmentsLoaded(player: Player, segments: unknown[])SponsorBlock loaded skippable segments for the track.
segmentSkipped(player: Player, segment: unknown)SponsorBlock skipped a segment.
chaptersLoaded(player: Player, chapters: unknown[])SponsorBlock loaded chapters for the track.
chapterStarted(player: Player, chapter: unknown)A new SponsorBlock chapter started.
pluginEvent(player: Player, event: PluginEvent)Every non-core Lavalink event, including the plugin events above.