Skip to content

Latest commit

 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 
 
 

README.md

Discord server NPM version NPM downloads Build status paypal

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) => {
  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.