Skip to content

Event Explorer

Press / to search. Open an event to see its arguments and an example listener you can copy.

34 of 34 events

  • readyLifecycleinit() finished its first connection attempt to every node.
    Arguments()
    raya.on('ready', () => console.log(`${raya.readyNodes.length} nodes ready`));
  • debugLifecycleDetailed internal logs. Only built when something listens (or with the debug option).
    Arguments(message: string)
    raya.on('debug', (message) => logger.debug(message));
  • nodeAddNodeA node was added, either from the options or with addNode().
    Arguments(node: Node)
    raya.on('nodeAdd', (node) => console.log('added', node.name));
  • nodeRemoveNodeA node was removed with removeNode(). Its players were moved first.
    Arguments(node: Node)
    raya.on('nodeRemove', (node) => console.log('removed', node.name));
  • nodeReadyNodeA node has a ready session. resumed is true when an existing session was resumed.
    Arguments(node: Node, resumed: boolean)
    raya.on('nodeReady', (node, resumed) => console.log(node.name, resumed ? 'resumed' : 'new session'));
  • nodeDisconnectNodeThe WebSocket closed. Raya reconnects automatically unless you disconnected on purpose.
    Arguments(node: Node, info: { code, reason, wasReady })
    raya.on('nodeDisconnect', (node, { code, reason }) => console.warn(node.name, code, reason));
  • nodeReconnectingNodeA reconnect is scheduled after delay ms.
    Arguments(node: Node, attempt: number, delay: number)
    raya.on('nodeReconnecting', (node, attempt, delay) => console.log(`retry #${attempt} in ${delay}ms`));
  • nodeErrorNodeConnection problems, authentication failures or node-level REST errors.
    Arguments(node: Node, error: Error)
    raya.on('nodeError', (node, error) => console.error(node.name, error.message));
  • nodeStatsNodeLavalink sent fresh stats: players, CPU, memory and frame stats.
    Arguments(node: Node, stats: NodeStats)
    raya.on('nodeStats', (node, stats) => metrics.gauge('cpu', stats.cpu.lavalinkLoad));
  • nodeRawNodeEvery WebSocket message, before Raya handles it.
    Arguments(node: Node, payload: unknown)
    raya.on('nodeRaw', (node, payload) => console.log(payload));
  • playerCreatePlayerA player was created, including players restored from a snapshot.
    Arguments(player: Player)
    raya.on('playerCreate', (player) => console.log('player for', player.guildId));
  • playerDestroyPlayerA player was destroyed. reason: 'manual', 'queueEnd', 'channelEmpty', 'voiceDisconnected', 'channelDeleted', 'guildDeleted'.
    Arguments(player: Player, reason: PlayerDestroyReason)
    raya.on('playerDestroy', (player, reason) => {
      if (reason === 'channelEmpty') notify(player, 'Everyone left, see you!');
    });
  • playerMovePlayerThe bot moved between voice channels. newChannelId is null when it was disconnected.
    Arguments(player: Player, oldChannelId: string | null, newChannelId: string | null)
    raya.on('playerMove', (player, from, to) => console.log(`moved ${from} -> ${to}`));
  • playerNodeMovePlayerA player moved to another node (failover or moveNode) without losing its state.
    Arguments(player: Player, from: Node, to: Node)
    raya.on('playerNodeMove', (player, from, to) => console.log(`${from.name} -> ${to.name}`));
  • playerUpdatePlayerPeriodic state from Lavalink, about every 5 seconds while connected.
    Arguments(player: Player, state: { time, position, connected, ping })
    raya.on('playerUpdate', (player, state) => updateProgressBar(player.guildId, state.position));
  • playerResumePlayerA player was resumed, rebuilt after a session loss, or restored from a snapshot.
    Arguments(player: Player)
    raya.on('playerResume', (player) => console.log('back online:', player.guildId));
  • playerErrorPlayerA background error, e.g. auto-advance, voice forwarding or autoplay failed.
    Arguments(player: Player, error: Error)
    raya.on('playerError', (player, error) => console.error(player.guildId, error));
  • voiceChannelEmptyPlayerThe last human left the voice channel.
    Arguments(player: Player)
    raya.on('voiceChannelEmpty', (player) => notify(player, 'Paused until someone joins.'));
  • voiceChannelFilledPlayerSomeone joined the voice channel after it was empty.
    Arguments(player: Player)
    raya.on('voiceChannelFilled', (player) => notify(player, 'Welcome back!'));
  • socketClosedPlayerLavalink's voice connection to Discord closed. Raya rejoins for recoverable codes.
    Arguments(player: Player, info: { code, reason, byRemote })
    raya.on('socketClosed', (player, { code }) => console.warn('voice closed', code));
  • trackStartTrackA track started playing. track is your queued object, with its requester.
    Arguments(player: Player, track: Track)
    raya.on('trackStart', (player, track) => {
      send(player.textChannelId, `Now playing **${track.info.title}**`);
    });
  • trackEndTrackA track ended. Raya advances the queue by itself on finished and loadFailed.
    Arguments(player: Player, track: Track, reason: 'finished' | 'loadFailed' | 'stopped' | 'replaced' | 'cleanup')
    raya.on('trackEnd', (player, track, reason) => console.log(track.info.title, reason));
  • trackStuckTrackLavalink could not provide audio for a while. Skipped automatically with skipOnStuck.
    Arguments(player: Player, track: Track, thresholdMs: number)
    raya.on('trackStuck', (player, track) => console.warn('stuck:', track.info.title));
  • trackErrorTrackLavalink failed to play a track. The queue moves on.
    Arguments(player: Player, track: Track, exception: { message, severity, cause })
    raya.on('trackError', (player, track, e) => send(player.textChannelId, `Could not play ${track.info.title}: ${e.message}`));
  • queueEndQueueThe queue ran out and autoplay (if on) found nothing.
    Arguments(player: Player, lastTrack: Track | null)
    raya.on('queueEnd', (player) => send(player.textChannelId, 'Queue finished. Add more with /play'));
  • queueUpdateQueueTracks were added, removed, moved, shuffled or cleared.
    Arguments(player: Player, queue: Queue)
    raya.on('queueUpdate', (player, queue) => refreshQueueMessage(player.guildId, queue.slice(0, 10)));
  • lyricsFoundPluginLavaLyrics found lyrics for the current track (after subscribeLyrics).
    Arguments(player: Player, lyrics: Lyrics)
    raya.on('lyricsFound', (player, lyrics) => console.log(lyrics.provider));
  • lyricsNotFoundPluginLavaLyrics found no lyrics for the current track.
    Arguments(player: Player)
    raya.on('lyricsNotFound', (player) => console.log('no lyrics'));
  • lyricsLinePluginA time-synced lyrics line is now being sung.
    Arguments(player: Player, line: LyricsLine, lineIndex: number, skipped: boolean)
    raya.on('lyricsLine', (player, line) => updateKaraoke(player.guildId, line.line));
  • segmentsLoadedPluginSponsorBlock loaded skippable segments for the track.
    Arguments(player: Player, segments: unknown[])
    raya.on('segmentsLoaded', (player, segments) => console.log(segments.length, 'segments'));
  • segmentSkippedPluginSponsorBlock skipped a segment.
    Arguments(player: Player, segment: unknown)
    raya.on('segmentSkipped', (player, segment) => console.log('skipped', segment));
  • chaptersLoadedPluginSponsorBlock loaded chapters for the track.
    Arguments(player: Player, chapters: unknown[])
    raya.on('chaptersLoaded', (player, chapters) => console.log(chapters));
  • chapterStartedPluginA new SponsorBlock chapter started.
    Arguments(player: Player, chapter: unknown)
    raya.on('chapterStarted', (player, chapter) => console.log(chapter));
  • pluginEventPluginEvery non-core Lavalink event, including the plugin events above.
    Arguments(player: Player, event: PluginEvent)
    raya.on('pluginEvent', (player, event) => console.log(event.type));