@discordx/lava-player
    Preparing search index...

    @discordx/lava-player

    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.