🎶 FerraLink
A Simple but powerful Lavalink Client for your JavaScript Discord Bot!
🔨 Requirements
- Node.js >= 16.9.0 or Latest.
- Discord.js >= 14.6.0.
📖 Documentation
📂 Implementation
- A example bot as guide for beginners.
- If you have any issues, please join our support server.
📦 How to Install FerraLink
Dev: "npm i https://github.com/vkamsingh/Ferralink-Dev.git" //Dev version supports lavalink v4. https://github.com/vkamsingh/Ferralink-Dev#how-to-setup-our-ferralink
Stable: "npm i npm i ferra-link"
How to Setup our FerraLink
Set the Initilizer of Ferralink
Creating in a way like the code example you can import the bot, nodes and shoukakuOptions.
const { Client, GatewayIntentBits } = require("discord.js");
const { FerraLink } = require("ferra-link");
const { Connectors } = require("shoukaku");
const client = new Client({
intents: [
GatewayIntentBits.Guilds,
GatewayIntentBits.GuildMessages,
GatewayIntentBits.GuildVoiceStates,
GatewayIntentBits.MessageContent
],
});
client.FerraLink = new FerraLink({
nodes: [{
name: "Lavalink",
url: "localhost:2333",
auth: "youshallpass",
secure: false
}],
shoukakuoptions: {
moveOnDisconnect: false,
resumable: false,
resumableTimeout: 60,
reconnectTries: 10,
restTimeout: 60000
},
spotify: [{
ClientID: "Your spotify clientId here",
ClientSecret: "Your spotify clientSecret here"
}],
defaultSearchEngine: "FerralinkSpotify",
}, new Connectors.DiscordJS(client));
client.login("token");
A small example to create play command.
module.exports = {
name: "play",
aliases: ["p"],
run: async (client, message, args) => {
const player = await client.FerraLink.createPlayer({
guildId: message.guild.id,
voiceId: message.member.voice.channel.id,
textId: message.channel.id,
shardId: message.guild.shardId,
volume: 100,
deaf: true,
});
const resolve = await player.search(args.join(" "));
const { loadType, tracks, playlistInfo } = resolve;
if (loadType === "NO_MATCHES" || !tracks.length) return message.reply({content: "No match songs result found!"});
if (loadType === "PLAYLIST_LOADED") {
for (const track of tracks) {
player.queue.add(track, { requester: message.author });
}
if (!player.playing && !player.paused) await player.play();
message.channel.send({ content: `Added ${player.queue.length} tracks from ${playlistInfo.name}` });
} else if (loadType === "SEARCH_RESULT" || loadType === "TRACK_LOADED") {
player.queue.add(tracks[0], { requester: message.author });
if (!player.playing && !player.paused) await player.play();
message.channel.send({ content: `Queued ${tracks[0].info.title}` });
} else return;
}
}
Getting the Events (shoukaku)
You can access event with the help of
client.FerraLink.shoukaku.on()....
.
Event Name | Elements | Description |
---|---|---|
ready | name, resumed | Event of the node connection. |
error | name, error | Event of the node error. |
close | name, code, reason | Event of the node close. |
disconnect | name, players, move | Event of the node disconnect. |
debug | name, reason | Event of the node debug. |
Getting the Events (FerraLink)
You can access event with the help of
client.FerraLink.on()....
.
Event Name | Elements | Description |
---|---|---|
trackStart | player, track | Event of the track start. |
trackEnd | player, track | Event of the track end. |
queueEnd | player | Event of the queue end. |
PlayerClosed | player, data | Event of the player close. |
trackException | player, data | Event of the track exception. |
PlayerUpdate | player, data | Event of the player update. |
trackStuck | player, data | Event of the track stuck. |
trackError | player, error | Event of the track error. |
PlayerResumed | player | Event of the player resumed. |
PlayerDestroy | player | Event of the player destroyed. |
PlayerCreate | player | Event of the player create. |
Donations 🧡🧡
You can donate to us to improve our project!
Contributors
Deivu as the owner of Shoukaku.
Vkamsingh, Corgi as the owner of FerraLink.
Prahar as the maintainer of FerraLink Docs.