Need help with discord-player?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

Androz2091
299 Stars 120 Forks MIT License 915 Commits 38 Opened issues

Description

🎧 Complete framework to simplify the implementation of music commands using discords.js v13

Services available

!
?

Need anything else?

Contributors list

# 161,080
discord...
discord...
sqlite3
CSS
496 commits
# 25,400
Discord
js
Bootstr...
embeds
284 commits
# 89,030
Discord
TypeScr...
React
Node.js
4 commits
# 638,820
Perl
Discord
TypeScr...
Shell
2 commits
# 659,308
PHP
Shell
osu
HTML
2 commits
# 232,037
JavaScr...
TypeScr...
ESLint
eslint-...
1 commit
# 119,488
Rust
C++
Discord
compose...
1 commit
# 142,236
C#
indexer
HTML
sickrag...
1 commit
# 665,301
Discord
TypeScr...
JavaScr...
Shell
1 commit

Discord Player

Complete framework to facilitate music commands using discord.js.

downloadsBadge versionBadge discordBadge wakatime CodeFactor

Installation

Install discord-player

$ npm install --save discord-player

Install @discordjs/opus

$ npm install --save @discordjs/opus

Install FFmpeg or Avconv

Features

  • Simple & easy to use 🤘
  • Beginner friendly 😱
  • Audio filters 🎸
  • Lightweight 🛬
  • Custom extractors support 🌌
  • Lyrics 📃
  • Multiple sources support ✌
  • Play in multiple servers at the same time 🚗

Documentation

Getting Started

First of all, you will need to register slash commands:

const { REST } = require("@discordjs/rest");
const { Routes } = require("discord-api-types/v9");

const commands = [{ name: "play", description: "Plays a song!", options: [ { name: "query", type: "STRING", description: "The song you want to play", required: true } ] }];

const rest = new REST({ version: "9" }).setToken(process.env.DISCORD_TOKEN);

(async () => { try { console.log("Started refreshing application [/] commands.");

await rest.put(
  Routes.applicationGuildCommands(CLIENT_ID, GUILD_ID),
  { body: commands },
);

console.log("Successfully reloaded application [/] commands.");

} catch (error) { console.error(error); } })();

Now you can implement your bot's logic:

const { Client, Intents } = require("discord.js");
const client = new Discord.Client({ intents: [Intents.FLAGS.GUILDS, Intents.FLAGS.GUILD_MESSAGES, Intents.FLAGS.GUILD_VOICE_STATES] });
const { Player } = require("discord-player");

// Create a new Player (you don't need any API Key) const player = new Player(client);

// add the trackStart event so when a song will be played this message will be sent player.on("trackStart", (queue, track) => queue.metadata.channel.send(🎶 | Now playing **${track.title}**!))

client.once("ready", () => { console.log("I'm ready !"); });

client.on("interactionCreate", async (interaction) => { if (!interaction.isCommand()) return;

// /play Despacito
// will play "Despacito" in the voice channel
if (interaction.commandName === "play") {
    if (!interaction.member.voice.channelId) return await interaction.reply({ content: "You are not in a voice channel!", ephemeral: true });
    if (interaction.guild.me.voice.channelId && interaction.member.voice.channelId !== interaction.guild.me.voice.channelId) return await interaction.reply({ content: "You are not in my voice channel!", ephemeral: true });
    const query = interaction.options.get("query").value;
    const queue = player.createQueue(interaction.guild, {
        metadata: {
            channel: interaction.channel
        }
    });

    // verify vc connection
    try {
        if (!queue.connection) await queue.connect(interaction.member.voice.channel);
    } catch {
        queue.destroy();
        return await interaction.reply({ content: "Could not join your voice channel!", ephemeral: true });
    }

    await interaction.deferReply();
    const track = await player.search(query, {
        requestedBy: interaction.user
    }).then(x => x.tracks[0]);
    if (!track) return await interaction.followUp({ content: `❌ | Track **${query}** not found!` });

    queue.play(track);

    return await interaction.followUp({ content: `⏱️ | Loading track **${track.title}**!` });
}

});

client.login(process.env.DISCORD_TOKEN);

Supported websites

By default, discord-player supports YouTube, Spotify and SoundCloud streams only.

Optional dependencies

Discord Player provides an Extractor API that enables you to use your custom stream extractor with it. Some packages have been made by the community to add new features using this API.

@discord-player/extractor (optional)

Optional package that adds support for

vimeo
,
reverbnation
,
facebook
,
attachment links
and
lyrics
. You just need to install it using
npm i --save @discord-player/extractor
(discord-player will automatically detect and use it).

@discord-player/downloader (optional)

@discord-player/downloader
is an optional package that brings support for +700 websites. The documentation is available here.

Examples of bots made with Discord Player

These bots are made by the community, they can help you build your own!

Advanced

Use cookies

const player = new Player(client, {
    ytdlOptions: {
        requestOptions: {
            headers: {
                cookie: "YOUR_YOUTUBE_COOKIE"
            }
        }
    }
});

Use custom proxies

const HttpsProxyAgent = require("https-proxy-agent");

// Remove "user:[email protected]" if you don't need to authenticate to your proxy. const proxy = "http://user:[email protected]:8080"; const agent = HttpsProxyAgent(proxy);

const player = new Player(client, { ytdlOptions: { requestOptions: { agent } } });

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.