JSPM

  • Created
  • Published
  • Downloads 70
  • Score
    100M100P100Q81263F
  • License ISC

An Lavalink client, focused in pure performance and features

Package Exports

  • aqualink

Readme

NPM Downloads NPM Version GitHub Stars Discord


๐ŸŒŠ REIMAGINING AUDIO STREAMING FOR DISCORD ๐ŸŒŠ

Experience crystal-clear audio with unmatched stability


๐Ÿš€

Performance First

Optimized architecture with 50% less latency than other wrappers

๐Ÿ› ๏ธ

Developer Friendly

Intuitive API with extensive documentation and CJS/ESM support

๐Ÿ”Œ

Extendable

Plugin ecosystem for custom functionality and seamless integration

๐Ÿ“ฆ Installation

Latest Stable Release: v2.13.0 โ€ข Choose your preferred package manager below

๐Ÿ“ฆ NPM (Most Popular)
# ๐ŸŽฏ Stable release (recommended for production)
npm install aqualink

# ๐Ÿšง Latest development build
npm install ToddyTheNoobDud/aqualink
๐Ÿงถ Yarn (Fast & Reliable)
# ๐ŸŽฏ Stable release (recommended for production)
yarn add aqualink

# ๐Ÿšง Latest development build
yarn add ToddyTheNoobDud/aqualink
โšก Bun (Lightning Fast)
# ๐ŸŽฏ Stable release (recommended for production)
bun add aqualink

# ๐Ÿšง Latest development build
bun add ToddyTheNoobDud/aqualink
๐Ÿ“ฆ pnpm (Space Efficient)
# ๐ŸŽฏ Stable release (recommended for production)
pnpm add aqualink

# ๐Ÿšง Latest development build
pnpm add ToddyTheNoobDud/aqualink

๐Ÿ”ฅ Feature Highlights

Advanced Filters

EQ, Bass Boost, Nightcore & more

Fail-Safe System

Auto-reconnect & queue preservation

Real-time Analytics

Performance monitoring & insights

Customizable

Adapt to your specific needs

๐Ÿ“ฆ Resources

๐Ÿ’ป Quick Start

npm install aqualink discord.js
const { Aqua } = require("aqualink");
const { Client, GatewayIntentBits, Events } = require("discord.js");

const client = new Client({
    intents: [
        GatewayIntentBits.Guilds,
        GatewayIntentBits.GuildMembers,
        GatewayIntentBits.GuildMessages,
        GatewayIntentBits.MessageContent,
        GatewayIntentBits.GuildVoiceStates
    ]
});

const nodes = [
    {
        host: "127.0.0.1",
        password: "your_password",
        port: 2333,
        ssl: false,
        name: "main-node"
    }
];

const aqua = new Aqua(client, nodes, {
    defaultSearchPlatform: "ytsearch",
    restVersion: "v4",
    autoResume: true,
    infiniteReconnects: true,
    loadBalancer: 'LeastLoad',
    leaveOnEnd: false
});

client.aqua = aqua;

client.once(Events.Ready, () => {
    client.aqua.init(client.user.id);
    console.log(`Logged in as ${client.user.tag}`);
});

client.on(Events.Raw, (d) => {
    if (![Events.VoiceStateUpdate, Events.VoiceServerUpdate].includes(d.t)) return;
    client.aqua.updateVoiceState(d);
});

client.on(Events.MessageCreate, async (message) => {
    if (message.author.bot || !message.content.startsWith("!play")) return;

    const query = message.content.slice(6).trim();
    if (!query) return message.channel.send("Please provide a song to play.");

    // Check if user is in a voice channel
    if (!message.member.voice.channel) {
        return message.channel.send("You need to be in a voice channel to play music!");
    }

    const player = client.aqua.createConnection({
        guildId: message.guild.id,
        voiceChannel: message.member.voice.channel.id,
        textChannel: message.channel.id,
        deaf: true,
    });

    try {
        const resolve = await client.aqua.resolve({ query, requester: message.member });
        const { loadType, tracks, playlistInfo } = resolve;

        if (loadType === 'playlist') {
            for (const track of tracks) {
                player.queue.add(track);
            }
            message.channel.send(`Added ${tracks.length} songs from ${playlistInfo.name}.`);
        } else if (loadType === 'search' || loadType === 'track') {
            const track = tracks[0];
            player.queue.add(track);
            message.channel.send(`Added **${track.title}** to the queue.`);
        } else {
            return message.channel.send("No results found.");
        }

        if (!player.playing && !player.paused) {
            player.play();
        }
    } catch (error) {
        console.error("Playback error:", error);
        message.channel.send("An error occurred while trying to play the song.");
    }
});

client.aqua.on("nodeConnect", (node) => {
    console.log(`Node connected: ${node.name}`);
});

client.aqua.on("nodeError", (node, error) => {
    console.log(`Node "${node.name}" encountered an error: ${error.message}.`);
});

client.aqua.on('trackStart', (player, track) => {
    const channel = client.channels.cache.get(player.textChannel);
    if (channel) channel.send(`Now playing: **${track.title}**`);
});

client.aqua.on('queueEnd', (player) => {
    const channel = client.channels.cache.get(player.textChannel);
    if (channel) channel.send('The queue has ended.');
    player.destroy();
});

client.login("YOUR_DISCORD_BOT_TOKEN");

Additional Commands You Can Add:

client.on(Events.MessageCreate, async (message) => {
    if (message.content === "!skip") {
        const player = client.aqua.players.get(message.guild.id);
        if (player) {
            player.skip();
            message.channel.send("โญ๏ธ Skipped current track!");
        }
    }
});

client.on(Events.MessageCreate, async (message) => {
    if (message.content === "!stop") {
        const player = client.aqua.players.get(message.guild.id);
        if (player) {
            player.destroy();
            message.channel.send("โน๏ธ Stopped playback and cleared queue!");
        }
    }
});

View All Projects โ†’

300+ weekly downloads โ€ข 3+ GitHub stars โ€ข 3+ Discord bots

๐Ÿ“– Documentation

For detailed usage, API references, and examples, check out our official documentation:

Docs

๐Ÿ“Œ Get Started Quickly

  • Installation guide
  • API methods
  • Advanced features
  • Troubleshooting

๐Ÿ”— Visit: Aqualink Docs

Bot Invite Link Features
Kenium Add to Discord Audio streaming, Discord integration
Soya Music Add to Discord Audio streaming, Discord integration

๐Ÿ› ๏ธ Advanced Features

๐ŸŽ›๏ธ Audio Filters

  • Equalizer (15-band)
  • Bass Boost & Bass Cut
  • Nightcore & Vaporwave
  • 8D Audio & Rotation
  • Karaoke & Channel Mixing

๐Ÿ”„ Queue Management

  • Shuffle & Loop modes
  • Queue history & navigation
  • Auto playlist continuation
  • Skip voting systems
  • Playlist import/export

๐Ÿ“Š Monitoring

  • Resource utilization
  • Performance metrics
  • Automatic issue detection
  • Node health tracking
  • Load balancing

๐Ÿ‘ฅ Contributors

๐Ÿค Contributing

We welcome contributions from developers of all skill levels! Whether it's adding features, fixing bugs, or improving documentation.

PRs Welcome

๐Ÿ’ฌ Community & Support

Join our thriving community of developers and bot creators!

Discord Server GitHub Discussions


Built with ๐Ÿ’™ by the Aqualink Team