npm install ryanlink
# or
bun add ryanlinkimport { 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')// 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()- Node.js 18+ or Bun 1.1+
- Lavalink 4.0+
Made with care by RY4N
