Skip to content

LavalinkNode

Defined in: src/structures/Node.ts:26

Lavalink Node creator class

new LavalinkNode(options: LavalinkNodeOptions, manager: NodeManager): LavalinkNode;

Defined in: src/structures/Node.ts:93

Create a new Node

ParameterTypeDescription
optionsLavalinkNodeOptionsLavalink Node Options
managerNodeManagerNode Manager

LavalinkNode

// don't create a node manually, instead use:
client.lavalink.nodeManager.createNode(options)
PropertyModifierTypeDefault valueDescriptionDefined in
callspublicnumber0The amount of rest calls the node has made.src/structures/Node.ts:38
decodepublicobjectundefinedDecode Track or Trackssrc/structures/Node.ts:684
decode.multipleTrackspublic(encodeds: string[], requester: unknown) => Promise<Track[]>undefinedDecodes multiple tracks into their info Example const encodedBase64_1 = 'QAACDgMACk5vIERpZ2dpdHkAC0JsYWNrc3RyZWV0AAAAAAAEo4AABjkxNjQ5NgABAB9odHRwczovL2RlZXplci5jb20vdHJhY2svOTE2NDk2AQBpaHR0cHM6Ly9lLWNkbnMtaW1hZ2VzLmR6Y2RuLm5ldC9pbWFnZXMvY292ZXIvZGFlN2EyNjViNzlmYjcxMjc4Y2RlMjUwNDg0OWQ2ZjcvMTAwMHgxMDAwLTAwMDAwMC04MC0wLTAuanBnAQAMVVNJUjE5NjAwOTc4AAZkZWV6ZXIBAChObyBEaWdnaXR5OiBUaGUgVmVyeSBCZXN0IE9mIEJsYWNrc3RyZWV0AQAjaHR0cHM6Ly93d3cuZGVlemVyLmNvbS9hbGJ1bS8xMDMyNTQBACJodHRwczovL3d3dy5kZWV6ZXIuY29tL2FydGlzdC8xODYxAQBqaHR0cHM6Ly9lLWNkbnMtaW1hZ2VzLmR6Y2RuLm5ldC9pbWFnZXMvYXJ0aXN0L2YxNmNhYzM2ZmVjMzkxZjczN2I3ZDQ4MmY1YWM3M2UzLzEwMDB4MTAwMC0wMDAwMDAtODAtMC0wLmpwZwEAT2h0dHBzOi8vY2RuLXByZXZpZXctYS5kemNkbi5uZXQvc3RyZWFtL2MtYTE1Yjg1NzFhYTYyMDBjMDQ0YmY1OWM3NmVkOTEyN2MtNi5tcDMAAAAAAAAAAAA='; const encodedBase64_2 = 'QAABJAMAClRhbGsgYSBMb3QACjQwNHZpbmNlbnQAAAAAAAHr1gBxTzpodHRwczovL2FwaS12Mi5zb3VuZGNsb3VkLmNvbS9tZWRpYS9zb3VuZGNsb3VkOnRyYWNrczo4NTE0MjEwNzYvMzUyYTRiOTAtNzYxOS00M2E5LWJiOGItMjIxMzE0YzFjNjNhL3N0cmVhbS9obHMAAQAsaHR0cHM6Ly9zb3VuZGNsb3VkLmNvbS80MDR2aW5jZW50L3RhbGstYS1sb3QBADpodHRwczovL2kxLnNuZGNkbi5jb20vYXJ0d29ya3MtRTN1ek5Gc0Y4QzBXLTAtb3JpZ2luYWwuanBnAQAMUVpITkExOTg1Nzg0AApzb3VuZGNsb3VkAAAAAAAAAAA='; const tracks = await player.node.decode.multipleTracks([encodedBase64_1, encodedBase64_2], interaction.user);src/structures/Node.ts:716
decode.singleTrackpublic(encoded: string, requester: unknown) => Promise<Track>undefinedDecode a single track into its info Example const encodedBase64 = 'QAACDgMACk5vIERpZ2dpdHkAC0JsYWNrc3RyZWV0AAAAAAAEo4AABjkxNjQ5NgABAB9odHRwczovL2RlZXplci5jb20vdHJhY2svOTE2NDk2AQBpaHR0cHM6Ly9lLWNkbnMtaW1hZ2VzLmR6Y2RuLm5ldC9pbWFnZXMvY292ZXIvZGFlN2EyNjViNzlmYjcxMjc4Y2RlMjUwNDg0OWQ2ZjcvMTAwMHgxMDAwLTAwMDAwMC04MC0wLTAuanBnAQAMVVNJUjE5NjAwOTc4AAZkZWV6ZXIBAChObyBEaWdnaXR5OiBUaGUgVmVyeSBCZXN0IE9mIEJsYWNrc3RyZWV0AQAjaHR0cHM6Ly93d3cuZGVlemVyLmNvbS9hbGJ1bS8xMDMyNTQBACJodHRwczovL3d3dy5kZWV6ZXIuY29tL2FydGlzdC8xODYxAQBqaHR0cHM6Ly9lLWNkbnMtaW1hZ2VzLmR6Y2RuLm5ldC9pbWFnZXMvYXJ0aXN0L2YxNmNhYzM2ZmVjMzkxZjczN2I3ZDQ4MmY1YWM3M2UzLzEwMDB4MTAwMC0wMDAwMDAtODAtMC0wLmpwZwEAT2h0dHBzOi8vY2RuLXByZXZpZXctYS5kemNkbi5uZXQvc3RyZWFtL2MtYTE1Yjg1NzFhYTYyMDBjMDQ0YmY1OWM3NmVkOTEyN2MtNi5tcDMAAAAAAAAAAAA='; const track = await player.node.decode.singleTrack(encodedBase64, interaction.user);src/structures/Node.ts:697
infopublicLavalinkInfonullActual Lavalink Information of the Nodesrc/structures/Node.ts:66
isAlivepublicbooleanfalse-src/structures/Node.ts:34
lyricspublicobjectundefined-src/structures/Node.ts:728
lyrics.getpublic(track: Track, skipTrackSource: boolean) => Promise<LyricsResult>undefinedGet the lyrics of a track Example const lyrics = await player.node.lyrics.get(track, true); // use it of player instead: // const lyrics = await player.getLyrics(track, true);src/structures/Node.ts:742
lyrics.getCurrentpublic(guildId: string, skipTrackSource: boolean) => Promise<LyricsResult>undefinedGet the lyrics of the current playing track Example const lyrics = await player.node.lyrics.getCurrent(guildId); // use it of player instead: // const lyrics = await player.getCurrentLyrics();src/structures/Node.ts:771
lyrics.subscribepublic(guildId: string) => Promise<unknown>undefinedsubscribe to lyrics updates for a guild Example await player.node.lyrics.subscribe(guildId); // use it of player instead: // const lyrics = await player.subscribeLyrics();src/structures/Node.ts:800
lyrics.unsubscribepublic(guildId: string) => Promise<void>undefinedunsubscribe from lyrics updates for a guild Example await player.node.lyrics.unsubscribe(guildId); // use it of player instead: // const lyrics = await player.unsubscribeLyrics();src/structures/Node.ts:828
optionspublicLavalinkNodeOptionsundefinedThe provided Options of the Nodesrc/structures/Node.ts:36
resumingpublicobjectundefinedWether the node resuming is enabled or notsrc/structures/Node.ts:64
resuming.enabledpublicbooleanundefined-src/structures/Node.ts:64
resuming.timeoutpublicnumberundefined-src/structures/Node.ts:64
routePlannerApipublicobjectundefinedLavalink’s Route Planner Apisrc/structures/Node.ts:891
routePlannerApi.getStatuspublic() => Promise<RoutePlanner>undefinedGet routplanner Info from Lavalink for ip rotation Example const routePlannerStatus = await player.node.routePlannerApi.getStatus(); const usedBlock = routePlannerStatus.details?.ipBlock; const currentIp = routePlannerStatus.currentAddress;src/structures/Node.ts:903
routePlannerApi.unmarkAllFailedAddressespublic() => Promise<unknown>undefinedRelease all blacklisted IP addresses into pool of IPs Example await player.node.routePlannerApi.unmarkAllFailedAddresses();src/structures/Node.ts:937
routePlannerApi.unmarkFailedAddresspublic(address: string) => Promise<unknown>undefinedRelease blacklisted IP address into pool of IPs for ip rotation Example await player.node.routePlannerApi.unmarkFailedAddress("ipv6address");src/structures/Node.ts:918
sessionId?publicstringnullThe current sessionId, only present when connectedsrc/structures/Node.ts:62
statspublicNodeStatsundefinedStats from lavalink, will be updated via an interval by lavalink.src/structures/Node.ts:40
get connected(): boolean;

Defined in: src/structures/Node.ts:600

Returns if connected to the Node.

const isConnected = player.node.connected;
console.log("node is connected: ", isConnected ? "yes" : "no")

boolean


get connectionStatus(): string;

Defined in: src/structures/Node.ts:617

Returns the current ConnectionStatus

try {
const statusOfConnection = player.node.connectionStatus;
console.log("node's connection status is:", statusOfConnection)
} catch (error) {
console.error("no socket available?", error)
}

string


get heartBeatPing(): number;

Defined in: src/structures/Node.ts:29

number


get id(): string;

Defined in: src/structures/Node.ts:461

Get the id of the node

const nodeId = player.node.id;
console.log("node id is: ", nodeId)

string

connect(sessionId?: string): void;

Defined in: src/structures/Node.ts:387

Connect to the Lavalink Node

ParameterTypeDescription
sessionId?stringProvide the Session Id of the previous connection, to resume the node and it’s player(s)

void

void

player.node.connect(); // if provided on bootup in managerOptions#nodes, this will be called automatically when doing lavalink.init()
// or connect from a resuming session:
player.node.connect("sessionId");

deleteSponsorBlock(player: Player): Promise<void>;

Defined in: src/structures/Node.ts:1522

Delete the sponsorblock plugins

ParameterTypeDescription
playerPlayerpassthrough the player

Promise<void>

void

// use it on the player via player.deleteSponsorBlock();
const sponsorBlockSegments = await player.node.deleteSponsorBlock(player);

destroy(
destroyReason?: string,
deleteNode?: boolean,
movePlayers?: boolean): void;

Defined in: src/structures/Node.ts:482

Destroys the Node-Connection (Websocket) and all player’s of the node

ParameterTypeDefault valueDescription
destroyReason?stringundefinedDestroy Reason to use when destroying the players
deleteNode?booleantruewether to delete the nodte from the nodes list too, if false it will emit a disconnect.
movePlayers?booleanfalsewhether to movePlayers to different eligible connected node. If false players won’t be moved

void

void

true
false

Destroys node and its players

player.node.destroy("custom Player Destroy Reason", true);

destroys only the node and moves its players to different connected node.

player.node.destroy("custom Player Destroy Reason", true, true);

destroyPlayer(guildId: any): Promise<void>;

Defined in: src/structures/Node.ts:368

Destroys the Player on the Lavalink Server

ParameterTypeDescription
guildIdany

Promise<void>

request result

// use player.destroy() instead
player.node.destroyPlayer(player.guildId);

disconnect(disconnectReason?: string): void;

Defined in: src/structures/Node.ts:578

Disconnects the Node-Connection (Websocket)

ParameterTypeDescription
disconnectReason?stringDisconnect Reason to use when disconnecting Node

void

void

Also the node will not get re-connected again.

player.node.destroy("custom Player Destroy Reason", true);

fetchAllPlayers(): Promise<
| LavalinkPlayer[]
| InvalidLavalinkRestRequest>;

Defined in: src/structures/Node.ts:632

Gets all Players of a Node

Promise< | LavalinkPlayer[] | InvalidLavalinkRestRequest>

array of players inside of lavalink

const node = lavalink.nodes.get("NODEID");
const playersOfLavalink = await node?.fetchAllPlayers();

fetchInfo(): Promise<LavalinkInfo>;

Defined in: src/structures/Node.ts:884

Request Lavalink information.

Promise<LavalinkInfo>

lavalink info object

const lavalinkInfo = await player.node.fetchInfo();
const availablePlugins:string[] = lavalinkInfo.plugins.map(plugin => plugin.name);
const availableSources:string[] = lavalinkInfo.sourceManagers;

fetchPlayer(guildId: string): Promise<
| LavalinkPlayer
| InvalidLavalinkRestRequest>;

Defined in: src/structures/Node.ts:647

Gets specific Player Information

ParameterType
guildIdstring

Promise< | LavalinkPlayer | InvalidLavalinkRestRequest>

lavalink player object if player exists on lavalink

const node = lavalink.nodes.get("NODEID");
const playerInformation = await node?.fetchPlayer("guildId");

fetchStats(): Promise<BaseNodeStats>;

Defined in: src/structures/Node.ts:855

Request Lavalink statistics.

Promise<BaseNodeStats>

the lavalink node stats

const lavalinkStats = await player.node.fetchStats();

fetchVersion(): Promise<string>;

Defined in: src/structures/Node.ts:868

Request Lavalink version.

Promise<string>

the current used lavalink version

const lavalinkVersion = await player.node.fetchVersion();

getSponsorBlock(player: Player): Promise<SponsorBlockSegment[]>;

Defined in: src/structures/Node.ts:1466

Get the current sponsorblocks for the sponsorblock plugin

ParameterTypeDescription
playerPlayerpassthrough the player

Promise<SponsorBlockSegment[]>

sponsorblock seggment from lavalink

// use it on the player via player.getSponsorBlock();
const sponsorBlockSegments = await player.node.getSponsorBlock(player);

lavaSearch(
query: LavaSearchQuery,
requestUser: unknown,
throwOnEmpty: boolean): Promise<
| LavaSearchResponse
| SearchResult>;

Defined in: src/structures/Node.ts:278

Search something using the lavaSearchPlugin (filtered searches by types)

ParameterTypeDefault valueDescription
queryLavaSearchQueryundefinedLavaSearchQuery Object
requestUserunknownundefinedRequest User for creating the player(s)
throwOnEmptybooleanfalseWether to throw on an empty result or not

Promise< | LavaSearchResponse | SearchResult>

LavaSearchresult (SearchResult if link is provided)

// use player.search() instead
player.node.lavaSearch({ types: ["playlist", "album"], query: "Rick Astley", source: "spotify" }, interaction.user);

request(
endpoint: string,
modify: ModifyRequest,
parseAsText: true): Promise<string>;

Defined in: src/structures/Node.ts:172

Makes an API call to the Node. Should only be used for manual parsing like for not supported plugins

ParameterTypeDescription
endpointstringThe endpoint that we will make the call to
modifyModifyRequestUsed to modify the request before being sent
parseAsTexttrue-

Promise<string>

The returned data

player.node.request(`/loadtracks?identifier=Never gonna give you up`, (options) => options.method = "GET", false);
request(
endpoint: string,
modify?: ModifyRequest,
parseAsText?: false): Promise<any>;

Defined in: src/structures/Node.ts:173

Makes an API call to the Node. Should only be used for manual parsing like for not supported plugins

ParameterTypeDescription
endpointstringThe endpoint that we will make the call to
modify?ModifyRequestUsed to modify the request before being sent
parseAsText?false-

Promise<any>

The returned data

player.node.request(`/loadtracks?identifier=Never gonna give you up`, (options) => options.method = "GET", false);

search(
query: SearchQuery,
requestUser: unknown,
throwOnEmpty: boolean): Promise<SearchResult>;

Defined in: src/structures/Node.ts:201

Search something raw on the node, please note only add tracks to players of that node

ParameterTypeDefault valueDescription
querySearchQueryundefinedSearchQuery Object
requestUserunknownundefinedRequest User for creating the player(s)
throwOnEmptybooleanfalseWether to throw on an empty result or not

Promise<SearchResult>

Searchresult

// use player.search() instead
player.node.search({ query: "Never gonna give you up by Rick Astley", source: "soundcloud" }, interaction.user);
player.node.search({ query: "https://deezer.com/track/123456789" }, interaction.user);

setSponsorBlock(player: Player, segments: SponsorBlockSegment[]): Promise<void>;

Defined in: src/structures/Node.ts:1484

Set the current sponsorblocks for the sponsorblock plugin

ParameterTypeDescription
playerPlayerpassthrough the player
segmentsSponsorBlockSegment[]-

Promise<void>

void

// use it on the player via player.setSponsorBlock();
const sponsorBlockSegments = await player.node.setSponsorBlock(player, ["sponsor", "selfpromo"]);

updatePlayer(data: PlayerUpdateInfo): Promise<LavalinkPlayer>;

Defined in: src/structures/Node.ts:325

Update the Player State on the Lavalink Server

ParameterTypeDescription
dataPlayerUpdateInfodata to send to lavalink and sync locally

Promise<LavalinkPlayer>

result from lavalink

// use player.search() instead
player.node.updatePlayer({ guildId: player.guildId, playerOptions: { paused: true } }); // example to pause it

updateSession(resuming?: boolean, timeout?: number): Promise<
| InvalidLavalinkRestRequest
| Session>;

Defined in: src/structures/Node.ts:664

Updates the session with and enables/disables resuming and timeout

ParameterTypeDescription
resuming?booleanWhether resuming is enabled for this session or not
timeout?numberThe timeout in seconds (default is 60s)

Promise< | InvalidLavalinkRestRequest | Session>

the result of the request

const node = player.node || lavalink.nodes.get("NODEID");
await node?.updateSession(true, 180e3); // will enable resuming for 180seconds