Skip to main content

 

Discord serverNPM versionNPM downloadsBuild statuspaypal

Create a discord bot with TypeScript and Decorators!

📖 Introduction

A powerful lava link player library written in TypeScript for Node.js. Support youtube links.

💻 Installation

Version 16.6.0 or newer of Node.js is required

npm install @discordx/lava-player
yarn add @discordx/lava-player

Note: Required lavalink up and running

🤖 Bot Examples

None

Note: Create a pull request to include your bot in the example list.

Getting Started

const nodeInstance = new Node({
host: {
address: process.env.LAVA_HOST ?? "localhost",
connectionOptions: { sessionId: "discordx" },
port: process.env.LAVA_PORT ? Number(process.env.LAVA_PORT) : 2333,
},

// your Lavalink password
password: process.env.LAVA_PASSWORD ?? "youshallnotpass",

send(guildId, packet) {
const guild = client.guilds.cache.get(guildId);
if (guild) {
guild.shard.send(packet);
}
},
userId: client.user?.id ?? "", // the user id of your bot
});

nodeInstance.connection.ws.on("message", (data) => {
// eslint-disable-next-line @typescript-eslint/no-base-to-string
const raw = JSON.parse(data.toString()) as OpResponse;
console.log("ws>>", raw);
});

nodeInstance.on("error", (e) => {
console.log(e);
});

client.ws.on(
GatewayDispatchEvents.VoiceStateUpdate,
(data: VoiceStateUpdate) => {
void nodeInstance.voiceStateUpdate(data);
},
);

client.ws.on(
GatewayDispatchEvents.VoiceServerUpdate,
(data: VoiceServerUpdate) => {
void nodeInstance.voiceServerUpdate(data);
},
);

Get Guild Player

const player = node.players.get("guild id");

Join Voice Channel

await player.join({ channel: "channel id" });

Play Track

const res = await this.node.rest.loadTracks(`ytsearch:${song}`);
if (res.loadType !== LoadType.SEARCH || !res.data[0]) {
await interaction.followUp("No track found");
return;
}

const track = res.data[0];
await player.update({
track,
});
await interaction.followUp(`playing ${track.info.title}`);

Stop Music

await player.leave();
// or, to destroy the player entirely
await player.destroy();

Clustering

const cluster = new Lava.Cluster({
nodes: [
// node options here; see above
],
send(guildId, packet) {
// send to gateway; same as for single node usage
},
filter(node, guildId) {
// optional
// return a boolean indicating whether the given guild can be run on the given node
// useful for limiting guilds to specific nodes (for instance, if you setup lavalink edge servers to minimize latency)
// this must return true at least once for a given set of nodes, otherwise some methods may error
},
});

📜 Documentation

☎️ Need help?

💖 Thank you

You can support discordx by giving it a GitHub star.