@glowland/discord-music
v1.0.0
Published
Reusable Discord music module for bots using discord.js.
Maintainers
Readme
@glowland/discord-music
Event-driven music engine for Discord bots built on discord.js.
Features
- Event-driven architecture (no UI coupling)
- Per-guild sessions
- Queue, history, and loop support
- Robust voice connection handling
- Fully typed TypeScript event system
Installation
npm install @glowland/discord-music discord.jsDependencies
Required
discord.js(peer dependency)
You must install it yourself:
npm install discord.jsVoice stack
This package uses:
@discordjs/voice(installed automatically)
Opus (optional, recommended)
npm install opusscriptProvides a JavaScript-based Opus encoder.
Acts as a fallback for @discordjs/opus.
Native Opus (optional, higher performance)
npm install @discordjs/opusProvides native bindings for Opus encoding.
- Better raw performance than
opusscript - May include high severity vulnerabilities depending on version
Use if you prioritize performance and accept the trade-offs.
Encryption (optional)
npm install libsodium-wrappersUsed by @discordjs/voice for encryption.
Does not replace opusscript or @discordjs/opus.
Both are optional. The engine runs without them, but performance may be lower.
Requirements
FFmpeg (required)
FFmpeg must be installed and available in your system PATH.
Windows (Chocolatey):
choco install ffmpegLinux:
sudo apt install ffmpegmacOS:
brew install ffmpegManual: https://ffmpeg.org/download.html
yt-dlp (required)
Used for audio extraction.
Install and ensure it is in your PATH:
Windows (Chocolatey):
choco install yt-dlpManual: https://github.com/yt-dlp/yt-dlp
Usage
import {
GuildMusicManager,
GuildMusicController
} from "@glowland/discord-music";
const manager = new GuildMusicManager();
const controller = new GuildMusicController(manager);
manager.on("trackStart", (session, track) => {
console.log(`Now playing: ${track.title}`);
});Events
The engine is fully event-driven. You react to state changes.
stateChangetrackStarttrackEndqueueUpdatepauseresumestoploopChangeconnectionLostsessionDestroyedplaybackError
Notes
- No UI included
- You handle embeds, buttons, and interactions
- Designed as a core engine, not a full bot solution
License
ISC
