📄 Documentation
See https://riffy.js.org/
╰┈1️⃣ Quick Start
First, you’ll need a running Lavalink node. You can either download and host the latest Lavalink release yourself, or use one of the available free public Lavalink nodes to get started quickly.
[!NOTE]
This project uses MessageContent intent, so make sure to enable it in your application settings.
Creating a Project
We are using discord.js for this example, but you can use any Discord library you prefer.
Import the Riffy class from the riffy package.
const { Riffy } = require("riffy");
import { Riffy } from "riffy";
Below is an example of a basic Discord music bot built with Discord.js and Riffy, using Lavalink v4.
const { Client, GatewayDispatchEvents } = require("discord.js");
const { Riffy } = require("riffy");
const client = new Client({
intents: [
"Guilds",
"GuildMessages",
"GuildVoiceStates",
"GuildMessageReactions",
"MessageContent",
"DirectMessages",
],
});
const nodes = [
{
host: "localhost",
password: "youshallnotpass",
port: 2333,
secure: false,
},
];
client.riffy = new Riffy(client, nodes, {
send: (payload) => {
const guild = client.guilds.cache.get(payload.d.guild_id);
if (guild) guild.shard.send(payload);
},
defaultSearchPlatform: "ytmsearch",
restVersion: "v4",
});
client.on("ready", () => {
client.riffy.init(client.user.id);
console.log(`Logged in as ${client.user.tag}`);
});
client.on("messageCreate", async (message) => {
if (!message.content.startsWith("!") || message.author.bot) return;
const args = message.content.slice(1).trim().split(" ");
const command = args.shift().toLowerCase();
if (command === "play") {
const query = args.join(" ");
const player = client.riffy.createConnection({
guildId: message.guild.id,
voiceChannel: message.member.voice.channel.id,
textChannel: message.channel.id,
deaf: true,
});
const resolve = await client.riffy.resolve({
query: query,
requester: message.author,
});
const { loadType, tracks, playlistInfo } = resolve;
if (loadType === "playlist") {
for (const track of resolve.tracks) {
track.info.requester = message.author;
player.queue.add(track);
}
message.channel.send(
`Added: \`${tracks.length} tracks\` from \`${playlistInfo.name}\``
);
if (!player.playing && !player.paused) return player.play();
} else if (loadType === "search" || loadType === "track") {
const track = tracks.shift();
track.info.requester = message.author;
player.queue.add(track);
message.channel.send(`Added: \`${track.info.title}\``);
if (!player.playing && !player.paused) return player.play();
} else {
return message.channel.send("There are no results found.");
}
}
});
client.riffy.on("nodeConnect", (node) => {
console.log(`Node "${node.name}" connected.`);
});
client.riffy.on("nodeError", (node, error) => {
console.log(`Node "${node.name}" encountered an error: ${error.message}.`);
});
client.riffy.on("trackStart", async (player, track) => {
const channel = client.channels.cache.get(player.textChannel);
channel.send(`Now playing: \`${track.info.title}\` by \`${track.info.author}\`.`);
});
client.riffy.on("queueEnd", async (player) => {
const channel = client.channels.cache.get(player.textChannel);
const autoplay = false;
if (autoplay) {
player.autoplay(player);
} else {
player.destroy();
channel.send("Queue has ended.");
}
});
client.on("raw", (d) => {
if (
![
GatewayDispatchEvents.VoiceStateUpdate,
GatewayDispatchEvents.VoiceServerUpdate,
].includes(d.t)
)
return;
client.riffy.updateVoiceState(d);
});
client.login("Discord-Bot-Token-Here");
Start the Bot
Now that we have created our project, we can run our bot by typing the following command in the terminal.
node index.js
After running the bot, invite the bot in your server and run !play command to play music.
╰┈2️⃣ Queue Management
Riffy's queue system extends the native Array class, giving you access to all standard array methods plus powerful custom ones.
player.queue.add(track);
player.queue.unshift(track);
player.queue.shuffle();
player.queue.move(2, 0);
const removedTrack = player.queue.remove(2);
player.queue.clear();
console.log(player.queue.size);
╰┈3️⃣ Our Team
╰┈4️⃣ Example Projects
╰┈5️⃣ Official Plugins
≪ ◦ ✦ ◦ ≫
🎧 Support Server
