Skip to content

ryanwtf7/ryanlink

ryanlink

Ryanlink

High-performance Lavalink v4 wrapper for Discord bots.


NPM Version License Node Version TypeScript

DocumentationNPMGitHub


Installation

npm install ryanlink
# or
bun add ryanlink

Quick Start

import { Client, GatewayIntentBits } from 'discord.js'
import { RyanlinkManager } from 'ryanlink'

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

const manager = new RyanlinkManager({
  nodes: [{
    id: 'main',
    host: 'localhost',
    port: 2333,
    authorization: 'youshallnotpass',
  }],
  sendToShard: (guildId, payload) => {
    client.guilds.cache.get(guildId)?.shard?.send(payload)
  },
  client: { id: process.env.CLIENT_ID },
})

client.once('ready', () => manager.init({ id: client.user.id }))
client.on('raw', (packet) => manager.provideVoiceUpdate(packet))
client.login('YOUR_BOT_TOKEN')

Usage

// Create player and connect
const player = manager.createPlayer({
  guildId: interaction.guildId,
  voiceChannelId: interaction.member.voice.channelId,
  textChannelId: interaction.channelId,
  selfDeaf: true,
})
await player.connect()

// Search and play
const result = await manager.search({ query: 'never gonna give you up', source: 'ytsearch' }, interaction.user)
player.queue.add(result.tracks[0])
if (!player.playing) await player.play()

// Controls
await player.pause(true)
await player.pause(false)
await player.seek(30000)
await player.skip()
await player.setVolume(80)
await player.setRepeatMode('queue') // 'off' | 'track' | 'queue'

// Filters
await player.filterManager.toggleNightcore()
await player.filterManager.setSpeed(1.2)
await player.filterManager.setEQ(player.filterManager.constructor.EQList.BassboostHigh)
await player.filterManager.resetFilters()

Requirements

  • Node.js 18+ or Bun 1.1+
  • Lavalink 4.0+

License

Apache-2.0

Made with care by RY4N