Skip to content

Latest commit

 

History

History

lava-player

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 
 
 

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