FastLink 2.3.5
Fastlink

CII Best Practices Discord Server FastLink package size

About

FastLink is a low-level Node.js Lavalink client, with a simple and easy-to-use API. It is made to be fast and lightweight.

Installation

FastLink is both available on npm and GitHub Packages. Here's how to install it from npm:

$ npm i @performanc/fastlink

Usage

Minimum requirements

  • Node.js 14 or higher
  • Lavalink v4

Recommended requirements

  • NodeJs 18 or higher
  • NodeLink

Example

import FastLink from '@performanc/fastlink'
import Discord from 'discord.js'
const client = new Discord.Client({
partials: [
Discord.Partials.Channel
],
intents: [
Discord.IntentsBitField.Flags.Guilds,
Discord.IntentsBitField.Flags.MessageContent,
Discord.IntentsBitField.Flags.GuildMessages,
Discord.IntentsBitField.Flags.GuildVoiceStates
]
})
const prefix = '!'
const botId = 'Your bot Id here'
const token = 'Your bot token here'
const events = FastLink.node.connectNodes([{
hostname: '127.0.0.1',
secure: false,
password: 'youshallnotpass',
port: 2333
}], {
botId,
shards: 1,
queue: true
})
events.on('debug', console.log)
client.on('messageCreate', async (message) => {
if (message.author.bot) return;
const commandName = message.content.split(' ')[0].toLowerCase().substring(prefix.length)
const args = message.content.split(' ').slice(1).join(' ')
if (commandName == 'decodetrack') {
const player = new FastLink.player.Player(message.guild.id)
if (player.playerCreated() == false) {
message.channel.send('No player found.')
return;
}
const track = await player.decodeTrack(args)
message.channel.send(JSON.stringify(track, null, 2))
return;
}
if (commandName == 'play') {
if (!message.member.voice.channel) {
message.channel.send('You must be in a voice channel.')
return;
}
if (!FastLink.node.anyNodeAvailable()) {
message.channel.send('There aren\'t nodes connected.')
return;
}
const player = new FastLink.player.Player(message.guild.id)
if (player.playerCreated() == false) player.createPlayer()
player.connect(message.member.voice.channel.id.toString(), { mute: false, deaf: true }, (guildId, payload) => {
client.guilds.cache.get(guildId).shard.send(payload)
})
const track = await player.loadTrack((args.startsWith('https://') ? '' : 'ytsearch:') + args)
if (track.loadType == 'error') {
message.channel.send('Something went wrong. ' + track.data.message)
return;
}
if (track.loadType == 'empty') {
message.channel.send('No matches found.')
return;
}
if (track.loadType == 'playlist') {
player.update({ encodedTracks: track.data.tracks.map((track) => track.encoded) })
message.channel.send(`Added ${track.data.tracks.length} songs to the queue, and playing ${track.data.tracks[0].info.title}.`)
return;
}
if (track.loadType == 'track' || track.loadType == 'short') {
player.update({ encodedTrack: track.data.encoded, })
message.channel.send(`Playing ${track.data.info.title} from ${track.data.info.sourceName} from url search.`)
return;
}
if (track.loadType == 'search') {
player.update({ encodedTrack: track.data[0].encoded })
message.channel.send(`Playing ${track.data[0].info.title} from ${track.data[0].info.sourceName} from search.`)
return;
}
}
if (commandName == 'volume') {
const player = new FastLink.player.Player(message.guild.id)
if (player.playerCreated() == false) {
message.channel.send('No player found.')
return;
}
player.update({
volume: parseInt(args)
})
message.channel.send(`Volume set to ${parseInt(args)}`)
return;
}
if (commandName == 'pause') {
const player = new FastLink.player.Player(message.guild.id)
if (player.playerCreated() == false) {
message.channel.send('No player found.')
return;
}
player.update({ paused: true })
message.channel.send('Paused.')
return;
}
if (commandName == 'resume') {
const player = new FastLink.player.Player(message.guild.id)
if (player.playerCreated() == false) {
message.channel.send('No player found.')
return;
}
player.update({ paused: false })
message.channel.send('Resumed.')
return;
}
if (commandName == 'skip') {
const player = new FastLink.player.Player(message.guild.id)
if (player.playerCreated() == false) {
message.channel.send('No player found.')
return;
}
const skip = player.skipTrack()
if (skip) message.channel.send('Skipped the current track.')
else message.channel.send('Could not skip the current track.')
return;
}
if (commandName == 'stop') {
const player = new FastLink.player.Player(message.guild.id)
if (player.playerCreated() == false) {
message.channel.send('No player found.')
return;
}
player.update({ encodedTrack: null })
message.channel.send('Stopped the player.')
return;
}
})
client.on('raw', (data) => FastLink.other.handleRaw(data))
client.login(token)

Documentation

We have a documentation for FastLink, you can find it here. If you have any issue with it, please report it on GitHub Issues.

Support & Feedback

If you have any questions, or only want to give a feedback, about FastLink or any other PerformanC project, join our Discord server.

License

FastLink is licensed under PerformanC's License, which is a modified version of the MIT License, focusing on the protection of the source code and the rights of the PerformanC team over the source code.