All Projects → SushiBtw → discord-music-player

SushiBtw / discord-music-player

Licence: MIT License
Complete framework to facilitate music commands using discord.js v13

Programming Languages

typescript
32286 projects

Projects that are alternatives of or similar to discord-music-player

Discord-multipurpose-bot
A repository with JavaScript and Python versions of the same type of discord commands.
Stars: ✭ 27 (-78.23%)
Mutual labels:  discord-js
amplyfm
A free and open-source web app for streaming music.
Stars: ✭ 46 (-62.9%)
Mutual labels:  player
ahx-web-player
AHX player web interface
Stars: ✭ 24 (-80.65%)
Mutual labels:  player
Discord-Reposter
Bot for reposting Discord messages (work in progress)
Stars: ✭ 62 (-50%)
Mutual labels:  discord-js
ModMail
Discord ModMail Bot
Stars: ✭ 44 (-64.52%)
Mutual labels:  discord-js
markov-discord
A Markov chain Discord chat bot. Generates unique messages by learning from past messages. Also occasionally attaches images to messages.
Stars: ✭ 35 (-71.77%)
Mutual labels:  discord-js
Discord-Spammer
Advanced Discord Spammer with multiple options and optional proxys
Stars: ✭ 51 (-58.87%)
Mutual labels:  discord-js
BlueSkyTv
简单的安卓TV 超纯净
Stars: ✭ 17 (-86.29%)
Mutual labels:  player
Discord-Bot-TypeScript-Template
Discord bot - A discord.js bot template written with TypeScript.
Stars: ✭ 86 (-30.65%)
Mutual labels:  discord-js
P2P-DPlayer
DPLayer powered by CDNBye P2P Engine
Stars: ✭ 63 (-49.19%)
Mutual labels:  player
discord-lavalink-music-bot
This is music bot for discord made with erelajs, lavalink, discordjs v13-dev
Stars: ✭ 34 (-72.58%)
Mutual labels:  discord-js
userscript-iqiyi-player-switch
爱奇艺flash播放器与html5播放器随意切换,改善html5播放器播放体验。
Stars: ✭ 68 (-45.16%)
Mutual labels:  player
v player
基于苹果CMS8.0的资源站收集视频APP
Stars: ✭ 19 (-84.68%)
Mutual labels:  player
mous
Lightweight audio player & converter for FreeBSD/Linux/macOS
Stars: ✭ 65 (-47.58%)
Mutual labels:  player
Chrome.RTSP.Player
Chrome RTSP player
Stars: ✭ 135 (+8.87%)
Mutual labels:  player
horace
discord.js bot powering the Knights of Academia server with commands like info, AFK, and more
Stars: ✭ 25 (-79.84%)
Mutual labels:  discord-js
mpdclient
MPD client library in nim
Stars: ✭ 21 (-83.06%)
Mutual labels:  player
4h0y.github.io
🍺
Stars: ✭ 136 (+9.68%)
Mutual labels:  player
bot
The official Discord bot used in the discord.bio server which interacts with our REST API.
Stars: ✭ 15 (-87.9%)
Mutual labels:  discord-js
discord-music
Discord music bot written in Typescript
Stars: ✭ 12 (-90.32%)
Mutual labels:  discord-js

Discord Music Player

npm npm CodeFactor Grade

Note: This is the v8 version of Discord Music Player for Discord.JS v13!

Discord Music Player is a powerful Node.js module that allows you to easily implement music commands. Everything is customizable, and everything can be done using this package - there are no limitations!

This package supports YouTube Videos & Playlists, Spotify Songs & Playlists, Apple Music Songs & Playlists. Package from version v7.0.0 is fully maintained by SushiBtw.

Requirements:

Installation

Node.JS v16 or newer is required to run this module.

npm install --save discord-music-player

Install @discordjs/opus:

npm install --save @discordjs/opus

Install FFMPEG!

Documentation

Discord Music Player documentation: https://discord-music-player.js.org/

Need some help?

Feel free to join Discord-Music-Player Discord Server and ask us about DMP.

Getting Started

The code bellow, will show you how to use DMP in your code.

Please define your Player after the client/bot definition.

[!] Remember to include the related voice Intents at the client options. [!]

const Discord = require("discord.js");
const client = new Discord.Client({
    intents: [Intents.FLAGS.GUILDS, Intents.FLAGS.GUILD_MESSAGES, Intents.FLAGS.GUILD_VOICE_STATES]
});
const settings = {
    prefix: '!',
    token: 'YourBotTokenHere'
};

const { Player } = require("discord-music-player");
const player = new Player(client, {
    leaveOnEmpty: false, // This options are optional.
});
// You can define the Player as *client.player* to easily access it.
client.player = player;

client.on("ready", () => {
    console.log("I am ready to Play with DMP 🎶");
});

client.login(settings.token);

Example Usage

const { RepeatMode } = require('discord-music-player');

client.on('messageCreate', async (message) => {
    const args = message.content.slice(settings.prefix.length).trim().split(/ +/g);
    const command = args.shift();
    let guildQueue = client.player.getQueue(message.guild.id);

    if(command === 'play') {
        let queue = client.player.createQueue(message.guild.id);
        await queue.join(message.member.voice.channel);
        let song = await queue.play(args.join(' ')).catch(_ => {
            if(!guildQueue)
                queue.stop();
        });
    }

    if(command === 'playlist') {
        let queue = client.player.createQueue(message.guild.id);
        await queue.join(message.member.voice.channel);
        let song = await queue.playlist(args.join(' ')).catch(_ => {
            if(!guildQueue)
                queue.stop();
        });
    }

    if(command === 'skip') {
        guildQueue.skip();
    }

    if(command === 'stop') {
        guildQueue.stop();
    }

    if(command === 'removeLoop') {
        guildQueue.setRepeatMode(RepeatMode.DISABLED); // or 0 instead of RepeatMode.DISABLED
    }

    if(command === 'toggleLoop') {
        guildQueue.setRepeatMode(RepeatMode.SONG); // or 1 instead of RepeatMode.SONG
    }

    if(command === 'toggleQueueLoop') {
        guildQueue.setRepeatMode(RepeatMode.QUEUE); // or 2 instead of RepeatMode.QUEUE
    }

    if(command === 'setVolume') {
        guildQueue.setVolume(parseInt(args[0]));
    }

    if(command === 'seek') {
        guildQueue.seek(parseInt(args[0]) * 1000);
    }

    if(command === 'clearQueue') {
        guildQueue.clearQueue();
    }

    if(command === 'shuffle') {
        guildQueue.shuffle();
    }

    if(command === 'getQueue') {
        console.log(guildQueue);
    }

    if(command === 'getVolume') {
        console.log(guildQueue.volume)
    }

    if(command === 'nowPlaying') {
        console.log(`Now playing: ${guildQueue.nowPlaying}`);
    }

    if(command === 'pause') {
        guildQueue.setPaused(true);
    }

    if(command === 'resume') {
        guildQueue.setPaused(false);
    }

    if(command === 'remove') {
        guildQueue.remove(parseInt(args[0]));
    }

    if(command === 'createProgressBar') {
        const ProgressBar = guildQueue.createProgressBar();
        
        // [======>              ][00:35/2:20]
        console.log(ProgressBar.prettier);
    }
})

Events:

// Init the event listener only once (at the top of your code).
client.player
    // Emitted when channel was empty.
    .on('channelEmpty',  (queue) =>
        console.log(`Everyone left the Voice Channel, queue ended.`))
    // Emitted when a song was added to the queue.
    .on('songAdd',  (queue, song) =>
        console.log(`Song ${song} was added to the queue.`))
    // Emitted when a playlist was added to the queue.
    .on('playlistAdd',  (queue, playlist) =>
        console.log(`Playlist ${playlist} with ${playlist.songs.length} was added to the queue.`))
    // Emitted when there was no more music to play.
    .on('queueDestroyed',  (queue) =>
        console.log(`The queue was destroyed.`))
    // Emitted when the queue was destroyed (either by ending or stopping).    
    .on('queueEnd',  (queue) =>
        console.log(`The queue has ended.`))
    // Emitted when a song changed.
    .on('songChanged', (queue, newSong, oldSong) =>
        console.log(`${newSong} is now playing.`))
    // Emitted when a first song in the queue started playing.
    .on('songFirst',  (queue, song) =>
        console.log(`Started playing ${song}.`))
    // Emitted when someone disconnected the bot from the channel.
    .on('clientDisconnect', (queue) =>
        console.log(`I was kicked from the Voice Channel, queue ended.`))
    // Emitted when deafenOnJoin is true and the bot was undeafened
    .on('clientUndeafen', (queue) =>
        console.log(`I got undefeanded.`))
    // Emitted when there was an error in runtime
    .on('error', (error, queue) => {
        console.log(`Error: ${error} in ${queue.guild.name}`);
    });

Passing custom data

Queue

While running the Queue#createQueue() method you can pass a options#data object to hold custom data. This can be made in two ways:

// Pass custom data
await player.createQueue(message.guild.id, {
    data: {
        queueInitMessage: message,
        myObject: 'this will stay with the queue :)',
        more: 'add more... there are no limitations...'
    }
});
// Or by using
queue.setData({
    whatever: 'you want :D'
});

// Access custom data
let queue = player.getQueue(message.guild.id);
let initMessage = queue.data.queueInitMessage;
await initMessage.channel.send(`This message object is hold in Queue :D`);

Song or Playlist

While running the Queue#play()/Queue#playlist() method you can pass a options#data object to hold custom data. This can be made in two ways:

// Play the song
let song = await queue.play('Born in the USA!');
// Set song data
song.setData({
    initMessage: message
});

// Play the playlist
let playlist = await queue.playlist('https://www.youtube.com/playlist?list=PLDLGxnP4y2mGKGEqwxWTRkd3HtrrVTMdU');
// Set playlist data (will set data for each song in the playlist)
song.setData({
    initMessage: message
});

// Access custom data
let queue = player.getQueue(message.guild.id);
let { initMessage } = queue.nowPlaying.data;
await initMessage.channel.send(`This message object is hold in Song :D`);
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].