Discord Player
Discord Player is a robust framework for developing Discord Music bots using JavaScript and TypeScript. It is built on top of the @discordjs/voice library and offers a comprehensive set of customizable tools, making it one of the most feature enrich framework in town.

Why Choose Discord Player?
- Beginner-friendly with easy-to-understand features
- TypeScript support
- Offers hackable APIs.
- Supports audio player sharing
- Quick and easy setup process
- Wide range of player management features
- Offers 64+ built-in audio filter presets
- Highly customizable according to your needs
- Automatic queue management
- Query caching support
- Extensible sources through the Extractors API
- Object-oriented design
- Built-in stats tracker
- Offers easy debugging methods
- Out-of-the-box voice states handling
Installation
Before you start
Discord Player requires Discord.js 14.0 or higher. Please ensure that you have a compatible version by running npm list discord.js
in your terminal. If you're using an earlier version, please update it. The discord.js Guide provides resources to assist you with the update process.
Main Library
$ npm install --save discord-player
$ npm install --save @discord-player/extractor
Discord Player recognizes @discord-player/extractor
and loads it automatically by default. Just invoke await player.extractors.loadDefault()
.
Opus Library
Since Discord only accepts opus packets, you need to install the opus library. Choose one of the following options:
$ npm install --save @discordjs/opus
$ npm install --save opusscript
FFmpeg or Avconv
FFmpeg or Avconv is required for media transcoding. You can obtain it from https://ffmpeg.org or install it via npm (we recommend against using ffmpeg-static or other binaries):
$ npm install --save ffmpeg-static
$ npm install --save @ffmpeg-installer/ffmpeg
$ npm install --save @node-ffmpeg/node-ffmpeg-installer
$ npm install --save ffmpeg-binaries
Use FFMPEG_PATH
environment variable to load ffmpeg from custom path.
Streaming Library
If you want to add support for YouTube playback, you need to install a streaming library. Choose one of the following options:
$ npm install --save ytdl-core
$ npm install --save play-dl
$ npm install --save @distube/ytdl-core
$ npm install --save yt-stream
Once you have completed these installations, let's proceed with writing a simple music bot.
Setup
Let's create a main player instance. This instance handles and keeps track of all the queues and its components.
const { Player } = require('discord-player');
const { SpotifyExtractor, SoundCloudExtractor } = require('@discord-player/extractor');
const client = new Discord.Client({
intents: ['GuildVoiceStates' ]
});
const player = new Player(client);
await player.extractors.loadDefault();
await player.extractors.register(SpotifyExtractor, {});
await player.extractors.register(SoundCloudExtractor, {});
Discord Player is mostly events based. It emits different events based on the context and actions. Let's add a basic event listener to notify the user when a track starts to play:
player.events.on('playerStart', (queue, track) => {
queue.metadata.channel.send(`Started playing **${track.title}**!`);
});
Let's move on to the command part. You can define the command as per your requirements. We will only focus on the command handler part:
async function execute(interaction) {
const channel = interaction.message.member.voice.channel;
if (!channel) return interaction.reply('You are not connected to a voice channel!');
const query = interaction.options.getString('query', true);
await interaction.deferReply();
try {
const { track } = await player.play(channel, query, {
nodeOptions: {
metadata: interaction
}
});
return interaction.followUp(`**${track.title}** enqueued!`);
} catch (e) {
return interaction.followUp(`Something went wrong: ${e}`);
}
}
That's all it takes to build your own music bot. Please check out the Documentation for more features/functionalities.
Explore a curated list of resources built by the Discord Player community, including open-source music bots and extractors. Visit https://discord-player.js.org/docs/guides/community-resources for more information.