npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

megamusic

v1.0.0

Published

modulo para crear bots de musica facilmente

Downloads

48

Readme

Este modulo te servira para crear bots de musica facilmente, esto esta relacionado con discord.js. El bot tambien podra reproducir musicas en varios servidores.

Constructor:

Metodos:

Evento:

Instalacion:

npm install megamusic --save

Ejemplo del requerimiento del package:

const music = require('megamusic');
MegaMusic(opciones)

El constructor MegaMusic recibe como parametro un objeto, este objeto es opcional.

Argumentos

  1. opciones: el valor ingresado en este parametro debe de ser un objeto, este objeto momentaneamente solo contiene 1 propiedad.

Propiedades del objeto:

  • busqueda_cantidad

busqueda_cantidad: Aqui deberas de colocar el numero de resultados(musicas) que quieres obtener en caso de que se busque una musica mediante el nombre (esto se usará en el metodo buscar) Si usted no coloca esta propiedad, por default busqueda_cantidad obtendra el valor de 10.

Ejemplos


//Ejemplo 1
const mega = require('megamusic');
let music = new mega.MegaMusic()


//////////////////////////////////////////////////

//Ejemplo 2
const mega = require('megamusic');
let music = new mega.MegaMusic({busqueda_cantidad: 5})
login(YOUTUBE_API)

Este metodo deberas de usarlo en el archivo principal que usas para ejecutar tu bot. Debes de conseguir el API de Youtube.

Argumentos

  1. YOUTUBE_API: Aqui deberas de colocar tu API de Youtube

Ejemplos

const mega = require('megamusic');
let music = new mega.MegaMusic()

music.login("TU_API_DE_YOUTUBE")

buscar(message, busqueda)

Este metodo te permite buscar una musica de youtube, ya sea mediante una URL, playlist o el nombre de la musica.

Argumentos

  1. message: Aqui deberas de colocar el message que se emite en el evento client.on("message", message => {}) de discord.js
  2. busqueda: Este parametro puede recibir 3 tipos de valores, una URL del video de youtube, una URL de un playlist de youtube o el nombre de una musica.

Retorna

Este metodo retorna una promesa con 4 tipos de valores:

[1] false cuando no se encontró absolutamente nada.

[2] Un objeto del tipo playlist en caso de que el valor del argumento busqueda sea un playlist, este objeto contiene 4 propiedades:

  • tipo
  • nombre
  • canal
  • musicas

tipo Aqui se mostrara el nombre del tipo del objeto, en este caso es "playlist".

nombre Aqui se mostrara el nombre del playlist.

canal Aqui se mostrara el nombre del canal del playlist.

musicas Esto es un Array, aqui estaran las musicas del playlist con sus respectivos datos, cada musica es un objeto que contiene 6 propiedades:

1) url: El URL de la musica.
2) nombre: El nombre de la musica.
3) autor: El guildMember del usuario que puso el playlist: (https://discord.js.org/#/docs/main/stable/class/GuildMember) 
4) id: El ID del URL de la musica.
5) thumbnail: La foto de la musica. 
6) duracion: La duracion de la musica, esto tambien es un objeto con 7 propiedades, ejemplo:

{
  weeks: 0,                                                                                                                                     
  years: 0,                                                     
  months: 0,                                                     
  days: 0,                                                     
  hours: 0,                                                        
  minutes: 3,                                                         
  seconds: 33
}

[3] Un objeto del tipo url en caso de que el valor del argumento busqueda sea el URL de una musica especifica, este objeto contiene 2 propiedades:

  • tipo
  • musica

tipo Aqui se mostrara el nombre del tipo del objeto, en este caso es "url".

musicas Esto es un objeto, aqui estaran los datos de la musica, este objeto contiene 6 propiedades:

1) url: El URL de la musica.
2) nombre: El nombre de la musica.
3) autor: El guildMember del usuario que puso el playlist: (https://discord.js.org/#/docs/main/stable/class/GuildMember) 
4) id: El ID del URL de la musica.
5) thumbnail: La foto de la musica.
6) duracion: La duracion de la musica, esto tambien es un objeto con 7 propiedades, ejemplo:

{
  weeks: 0,                                                                                                                                     
  years: 0,                                                     
  months: 0,                                                     
  days: 0,                                                     
  hours: 0,                                                        
  minutes: 3,                                                         
  seconds: 33
}

[4] Un objeto del tipo busqueda en caso de que el valor del argumento busqueda no sea una URL, la cantidad de resultados sera tomada del valor que se puso en el constructor MegaMusic(), este objeto contiene 2 propiedades:

  • tipo
  • musicas

tipo Aqui se mostrara el nombre del tipo del objeto, en este caso es "url".

musicas Esto es un Array, aqui estaran las musicas(resultados) que se encontró, cada musica es un objeto que contiene 6 propiedades:

1) url: El URL de la musica.
2) nombre: El nombre de la musica.
3) autor: El guildMember del usuario que puso el playlist: (https://discord.js.org/#/docs/main/stable/class/GuildMember) 
4) id: El ID del URL de la musica.
5) thumbnail: La foto de la musica.
6) duracion: La duracion de la musica, esto tambien es un objeto con 7 propiedades, ejemplo: 

{
  weeks: 0,                                                                                                                                     
  years: 0,                                                     
  months: 0,                                                     
  days: 0,                                                     
  hours: 0,                                                        
  minutes: 3,                                                         
  seconds: 33
}

Ejemplos

Estructura del objeto tipo "url":

{
  tipo: 'url',                                                  
  musica: {
    url: 'https://www.youtube.com/watch?v=PBXw3o9jDp8',                                                       
    nombre: 'Nath Jennings & Pucky - Tundra',                                                        
    autor: {GuildMember},                                                   
    duracion: {
      weeks: 0,                                                      
      years: 0,                                                    
      months: 0,                                                   
      days: 0,
      hours: 0,                                                   
      minutes: 2,                                                 
      seconds: 53
    },                                          
    id: 'PBXw3o9jDp8',                                                       
    thumbnail: 'https://img.youtube.com/vi/PBXw3o9jDp8/3.jpg'
  }
}
Estructura del objeto tipo "playlist":

{
  tipo: 'playlist',  
  nombre: 'Musicas de coleccion',
  canal: 'MegaStar',
  musicas: [Array]
}


El [Array] de musicas contiene las musicas del playlist y cada musica es un objeto con propiedades, ejemplo:

{
  url: 'https://www.youtube.com/watch?v=PBXw3o9jDp8',                                                       
  nombre: 'Nath Jennings & Pucky - Tundra',                                                        
  autor: {GuildMember},                                                   
  duracion: {
    weeks: 0,                                                      
    years: 0,                                                    
    months: 0,                                                   
    days: 0,
    hours: 0,                                                   
    minutes: 2,                                                 
    seconds: 53
  },                                          
  id: 'PBXw3o9jDp8',                                                       
  thumbnail: 'https://img.youtube.com/vi/PBXw3o9jDp8/3.jpg'
}
Estructura del objeto tipo "busqueda":

{
  tipo: 'busqueda',  
  musicas: [Array]
}


El [Array] de musicas contiene las musicas(resultados) que se encontró y cada musica es un objeto con propiedades, ejemplo:

{
  url: 'https://www.youtube.com/watch?v=PBXw3o9jDp8',                                                       
  nombre: 'Nath Jennings & Pucky - Tundra',                                                        
  autor: {GuildMember},                                                   
  duracion: {
    weeks: 0,                                                      
    years: 0,                                                    
    months: 0,                                                   
    days: 0,
    hours: 0,                                                   
    minutes: 2,                                                 
    seconds: 53
  },                                          
  id: 'PBXw3o9jDp8',                                                       
  thumbnail: 'https://img.youtube.com/vi/PBXw3o9jDp8/3.jpg'
}
rep_url(message, objeto_musica)

Este metodo te permite reproducir la musica en caso de que el valor de retorno del metodo buscar sea del tipo "url".

Argumentos

  1. message: Aqui deberas de colocar el message que se emite en el evento client.on("message", message => {}) de discord.js
  2. objeto_musica: Aqui deberas de colocar el valor de retorno del metodo buscar.

Retorna

Este metodo retorna 3 tipos de valores:

[1] false cuando ocurrio un error al tratar de reproducir la musica. [2] playing si la musica se va a reproducir en ese instante, esto sucedera cuando no hay musicas en cola. [3] queued si la musica se va a reproducir despues, esto sucedera cuando actualmente ya se esta reproduciendo algo.

Tanto playing y queued son strings, false es un booleano.

rep_playlist(message, objeto_musica)

Este metodo te permite reproducir la musica en caso de que el valor de retorno del metodo buscar sea del tipo "playlist".

Argumentos

  1. message: Aqui deberas de colocar el message que se emite en el evento client.on("message", message => {}) de discord.js
  2. objeto_musica: Aqui deberas de colocar el valor de retorno del metodo buscar.

Retorna

Este metodo retorna 3 tipos de valores:

[1] false cuando ocurrio un error al tratar de reproducir la musica. [2] playing si la primera musica del playlist se va a reproducir en ese instante, esto sucedera cuando no hay musicas en cola. [3] queued si las musicas del playlist se va a reproducir despues, esto sucedera cuando actualmente ya se esta reproduciendo algo.

Tanto playing y queued son strings, false es un booleano.

rep_busqueda(message, objeto_musica, tiempo)

Este metodo te permite reproducir una musica especifica de las musicas(resultados) que se encontró, debes de usar este metodo si el valor de retorno del metodo buscar es del tipo "busqueda". Se usara un awaitMessages para que se seleccione una musica mediante su indice(index/posicion) comenzando a partir del numero 1.

Argumentos

  1. message: Aqui deberas de colocar el message que se emite en el evento client.on("message", message => {}) de discord.js
  2. objeto_musica: Aqui deberas de colocar el valor de retorno del metodo buscar.
  3. tiempo: El tiempo que durará el awaitMessages, en otras palabras sera el tiempo de espera hasta que el usuario ingrese el indice de la musica que quiere reproducir (El tiempo debe ser en milisegundos)

Retorna

Este metodo retorna una promesa con 3 tipos de valores:

[1] false cuando el usuario no ingresó el indice de la musica y el tiempo de espera se acabo. [2] playing si la musica que se seleccionó se va a reproducir en ese instante, esto sucedera cuando no hay musicas en cola. [3] queued si la musica que se seleccionó se va a reproducir despues, esto sucedera cuando actualmente ya se esta reproduciendo algo.

Tanto playing y queued son strings, false es un booleano.

playlist(message)

Este metodo te permite ver las musicas que se van a reproducir, practicamente el queue del servidor.

Argumentos

  1. message: Aqui deberas de colocar el message que se emite en el evento client.on("message", message => {}) de discord.js

Retorna

Este metodo retorna 2 tipos de valores:

[1] false cuando no hay ninguna musica por reproducir, el queue esta vacio. [2] [Array] si hay musicas por reproducir.

El [Array] contiene la lista de musicas que se van a reproducir y cada musica es un objeto con propiedades, ejemplo:

[
  {
    url: 'https://www.youtube.com/watch?v=PBXw3o9jDp8',                                                       
    nombre: 'Nath Jennings & Pucky - Tundra',                                                        
    autor: {GuildMember},                                                   
    duracion: {
      weeks: 0,                                                      
      years: 0,                                                    
      months: 0,                                                   
      days: 0,
      hours: 0,                                                   
      minutes: 2,                                                 
      seconds: 53
    },                                          
    id: 'PBXw3o9jDp8',                                                       
    thumbnail: 'https://img.youtube.com/vi/PBXw3o9jDp8/3.jpg'
  },
  {
    url: 'https://www.youtube.com/watch?v=PBXw3o9jfd1',                                                       
    nombre: 'Musica prueba',                                                        
    autor: {GuildMember},                                                   
    duracion: {
      weeks: 0,                                                      
      years: 0,                                                    
      months: 0,                                                   
      days: 0,
      hours: 0,                                                   
      minutes: 3,                                                 
      seconds: 28
    },                                          
    id: 'PBXw3o9jD231',                                                       
    thumbnail: 'https://img.youtube.com/vi/PBXw3asdas/3.jpg'
  }
]
canal_voz(message)

Este metodo te permite verificar si el usuario se encuentra en el mismo canal de voz donde el bot esta reproduciendo musica.

Argumentos

  1. message: Aqui deberas de colocar el message que se emite en el evento client.on("message", message => {}) de discord.js

Retorna

Este metodo retorna 2 tipos de valores:

[1] false si el usuario está en un canal de voz diferente al canal donde el bot está reproduciendo la musica. [2] true si el usuario se encuentra en el canal de voz donde el bot está reproduciendo la musica.

canal_voz(message)

Este metodo te permite verificar si el usuario ejecutó un comando en el mismo canal de texto donde el bot comenzó a reproducir musica.

Argumentos

  1. message: Aqui deberas de colocar el message que se emite en el evento client.on("message", message => {}) de discord.js

Retorna

Este metodo retorna 2 tipos de valores:

[1] false si el usuario está en un canal de texto diferente al canal donde el bot comenzó a reproducir la musica. [2] true si el usuario se encuentra en el canal de texto donde el bot comenzó a reproducir la musica.

tiene_musicas(message)

Este metodo te permite verificar si actualmente hay musicas por reproducir, practicamente si el queue del servidor aun contiene musicas.

Argumentos

  1. message: Aqui deberas de colocar el message que se emite en el evento client.on("message", message => {}) de discord.js

Retorna

Este metodo retorna 2 tipos de valores:

[1] false si no hay ninguna musica por reproducir. [2] true si hay musicas por reproducir.

pausar(message)

Este metodo te permite pausar la musica que se está reproduciendo en ese momento.

Argumentos

  1. message: Aqui deberas de colocar el message que se emite en el evento client.on("message", message => {}) de discord.js

Retorna

Este metodo retorna 2 tipos de valores:

[1] false si no hay musicas o la musica ya se encuentra actualmente pausada, puedes usar el metodo tiene_musicas antes de este metodo para descartar el false en caso de que no haya musicas. [2] true si la musica fue pausada correctamente.

retomar(message)

Este metodo te permite retomar la musica que anteriormente fue pausada.

Argumentos

  1. message: Aqui deberas de colocar el message que se emite en el evento client.on("message", message => {}) de discord.js

Retorna

Este metodo retorna 2 tipos de valores:

[1] false si no hay musicas o la musica ya se encuentra actualmente reproduciendo, puedes usar el metodo tiene_musicas antes de este metodo para descartar el false en caso de que no haya musicas. [2] true si la musica se comenzo a retomar(reproducirse) correctamente.

avanzar(message)

Este metodo te permite avanzar una musica (skip), esto se medira mediante un numero de votos, el numero de votos es calculado a travez de la cantidad de miembros conectados en el canal de voz donde el bot está reproduciendo musica.

Argumentos

  1. message: Aqui deberas de colocar el message que se emite en el evento client.on("message", message => {}) de discord.js

Retorna

Este metodo retorna 3 tipos de valores:

[1] false si no hay musicas, puedes usar el metodo tiene_musicas antes de este metodo para descartar el false en caso de que no haya musicas. [2] true si la musica fue avanzada correctamente, esto unicamente sucederá si el usuario que ejecutó el comando para avanzar es el mismo usuario que puso la musica que se esta reproduciendo en ese momento, esto ignorara el numero de votos. [3] Un objeto con 3 propiedades:

estado Esta propiedades recibe 3 tipos de valores numericos y cada numero representa un estado:

1 Si el usuario que quiso avanzar la musica ya anteriormente lo hizo, practicamente seria como si volviera a votar para hacer skip. 2 Si el voto del usuario se hizo correctamente, practicamente seria como si estuviera votando por primera vez para hacer skip. 3 Si el voto del usuario es mayor o igual al numero de votos requeridos para avanzar de musica, en otras palabras cuando la musica hará skip.

Cuando la musica avance(haga skip) los votos seran reseteados para que los usuarios puedan volver a votar en caso de que quieran avanzar la musica actual.

votos_min El numero de votos que actualmente lleva la musica para avanzar(hacer skip)

votos_max El numero de votos que se necesita para avanzar de musica(hacer skip)

Ejemplo de la estructura del objeto:

{
  estado: 2,
  votos_min: 3,
  votos_max: 5
}
detener(message)

Este metodo te permite detener las musicas, detendrá la musica actual y eliminara las musicas del queue.

Argumentos

  1. message: Aqui deberas de colocar el message que se emite en el evento client.on("message", message => {}) de discord.js

Retorna

Este metodo retorna 2 tipos de valores:

[1] false si no hay musicas, puedes usar el metodo tiene_musicas antes de este metodo para descartar el false en caso de que no haya musicas. [2] true si las musicas fueron detenidas correctamente

remover(message, posicion)

Este metodo te permite remover una musica de la lista de musicas(queue) mediante el indice(index/posicion) contando a partir del numero 2 ya que la musica de la posicion 1 no se podra remover debido a que se está reproduciendo en ese momento.

Argumentos

  1. message: Aqui deberas de colocar el message que se emite en el evento client.on("message", message => {}) de discord.js
  2. posicion: La posicion de la musica por remover del queue.

Retorna

Este metodo retorna 2 tipos de valores:

[1] false si no hay musicas o la posicion que se ingresó es menor/igual a 1 o no existe ninguna musica con la posicion ingresada, puedes usar el metodo tiene_musicas antes de este metodo para descartar el false en caso de que no haya musicas. Tambien puedes usar el metodo playlist y el .length para verificar la cantidad de musicas que hay actualmente y poner un condicion antes de ingresar el valor de la posicion. [2] true si la musica fue removida correctamente.

Ejemplo

if(!music.tiene_musicas(message)) return message.channel.send("Actualmente no hay musicas en cola.")
if(!music.canal_voz(message)) return message.channel.send("No estas en el mismo canal de voz donde el bot esta reproduciendo musica.") 

if(!args[0]) return message.channel.send("Ingresa el index de la musica que quieres remover")
if(isNaN(args[0])) return message.channel.send("Debes de poner un numero")
let posicion = parseInt(args[0]) 
if(posicion <= 1 || posicion > music.playlist(message).length) return message.channel.send("No puedes eliminar la musica de la posicion 1, tampoco puedes remover musicas no existentes") 
music.remover(message, posicion)
message.channel.send("Musica removida del queue correctamente!")
np(message)

Este metodo te permite ver la musica que se está reproduciendo en ese momento.

Argumentos

  1. message: Aqui deberas de colocar el message que se emite en el evento client.on("message", message => {}) de discord.js

Retorna

Este metodo retorna 2 tipos de valores:

[1] false si no hay musicas, puedes usar el metodo tiene_musicas antes de este metodo para descartar el false en caso de que no haya musicas. [2] {Objeto} si actualmente se esta reproduciendo algo.

El objeto contiene la informacion de la musica que se esta reproduciendo en ese momento, este objeto contiene propiedades, ejemplo:

{
  url: 'https://www.youtube.com/watch?v=PBXw3o9jDp8',                                                       
  nombre: 'Nath Jennings & Pucky - Tundra',                                                        
  autor: {GuildMember},                                                   
  duracion: {
    weeks: 0,                                                      
    years: 0,                                                    
    months: 0,                                                   
    days: 0,
    hours: 0,                                                   
    minutes: 2,                                                 
    seconds: 53
  },                                          
  id: 'PBXw3o9jDp8',                                                       
  thumbnail: 'https://img.youtube.com/vi/PBXw3o9jDp8/3.jpg'
}
volumen(message, numero)

Este metodo te permite subir el volumen de la musica.

Argumentos

  1. message: Aqui deberas de colocar el message que se emite en el evento client.on("message", message => {}) de discord.js
  2. volumen: Aqui deberas de colocar el volumen a subir, por lo general esta en un rango de 0 a 10.

Retorna

Este metodo retorna 2 tipos de valores:

[1] false si no hay musicas, puedes usar el metodo tiene_musicas antes de este metodo para descartar el false en caso de que no haya musicas. [2] true si el volumen fue cambiado correctamente.

info(message)

Este metodo te permite obtener toda la informacion del servidor con respecto a la musica.

Argumentos

  1. message: Aqui deberas de colocar el message que se emite en el evento client.on("message", message => {}) de discord.js

Retorna

Este metodo retorna 2 tipos de valores:

[1] false si no hay musicas, puedes usar el metodo tiene_musicas antes de este metodo para descartar el false en caso de que no haya musicas. [2] {Objecto} si actualmente hay datos en la informacion del servidor con respecto a la musica.

Este objeto contiene 7 propiedades:

canal_voz Aqui estará el VoiceChannel donde el bot se encuentra reproduciendo la musica: (https://discord.js.org/#/docs/main/stable/class/VoiceChannel)

canal_texto Aqui estará el TextChannel donde el bot comenzó a reproducir musica: (https://discord.js.org/#/docs/main/stable/class/TextChannel) Esto te servira cuando quieras enviar mensajes cuando una musica comenzará a reproducirse, etc.

musicas Esto es un Array, aqui estaran las musicas que se van a reproducir, practicamente el queue, cada musica contiene propiedades las cuales ya fueron mencionadas anteriormente.

votos Esto es un Array, aqui estaran las ID's de los usuarios que actualmente votaron para avanzar una musica.

volumen Aqui estara el volumen actual de la musica.

reproduciendo Esto sera true si el bot está reproduciendo una musica, de lo contrario sera false.

dispatcher Esto es el VoiceConnection en caso de que el bot se encuentre reproduciendo algo (https://discord.js.org/#/docs/main/stable/class/VoiceConnection)

Estructura del objeto:

{
  canal_voz: {VoiceChannel},
  canal_texto: {TextChannel},
  musicas: [Array],
  votos: [Array],
  volumen: 5,
  reproduciendo: false/true,
  dispatcher: {VoiceConnection}
}

Evento

<instancia_variable>.on('end', (canal, nueva_musica) => {})

Este evento se emitirá cuando una musica termine y comience a reproducirse otra.

Argumentos

  1. canal: Aqui estará el TextChannel donde el bot comenzó a reproducir la musica, esto servira para enviar en ese canal el mensaje de que una musica comenzara a reproducirse (https://discord.js.org/#/docs/main/stable/class/TextChannel)
  2. nueva_musica: Aqui estará la musica que actualmente se va a reproducir, esto regresa undefined si no hay mas musicas por reproducir, de lo contrario regresará un objeto que contiene los datos de la musica, esto ya fue mostrado anteriormente.

Ejemplo

music.on('end', (canal, nueva_musica) => {
  if(!nueva_musica) return canal.send("El queue ha terminado!")
  let embed = new Discord.RichEmbed()
  embed.setColor("RANDOM")
  embed.setThumbnail(nueva_musica.thumbnail)
  embed.setDescription(`Ahora reproduciendo: ${nueva_musica.nombre}`)
  embed.setFooter(`${nueva_musica.autor.user.username}`, nueva_musica.autor.user.displayAvatarURL)
  return canal.send(embed)
})

Ejemplo usando todos los metodos y eventos

PD: Aqui estoy usando el npm moment para parsear la duracion del video, si quieren usarlo deberan de instalar el package:

npm install moment --save
const Discord = require("discord.js");
const client = new Discord.Client();
const moment = require("moment");
const mega = require("megamusic");

let music = new mega.MegaMusic()
music.login("YOUTUBE_API_KEY")

let prefix = "?"

client.on("ready", () => console.log("Estoy listo!"))

client.on("message", async (message) => {

  if(message.author.bot) return;
  if(message.channel.type == "dm") return;
  if(!message.content.startsWith(prefix)) return;
  
  let args = message.content.slice(prefix.length).trim().split(/ +/g);
  let command = args.shift().toLowerCase();

  if(command == "play") {
    if(!message.member.voiceChannel) return message.channel.send("Necesitas estar en un canal de voz.")
    if(music.tiene_musicas(message)) {
      if(!music.canal_voz(message)) return message.channel.send("No estas en el mismo canal de voz donde el bot esta reproduciendo musica.")
    }

    if(!args[0]) return message.channel.send("Debes de colocar la musica, puedes poner un playlist, URL o buscar una musica mediante el nombre.")
    let musica_info = await music.buscar(message, args[0])
    if(!musica_info) return message.channel.send("No se encontro ninguna musica.")

    if(musica_info.tipo == "url") {
      let status = music.rep_url(message, musica_info)
      if(!status) return message.channel.send("Ocurrio un error al tratar de obtener la informacion de la musica.")
      if(status == "queued") return message.channel.send(`La musica ${musica_info.musica.nombre} acaba de ser agregado al queue!`)
      else if(status == "playing") return message.channel.send(`Ahora reproduciendo ${musica_info.musica.nombre}`)  
    }

    else if(musica_info.tipo == "playlist") {
        let status = music.rep_playlist(message, musica_info)
        if(!status) return message.channel.send("Ocurrio un error al tratar de obtener la informacion del playlist.")
        if(status == "queued") return message.channel.send(`El playlist ${musica_info.nombre} acaba de ser agregado al queue!`)
        else if(status == "playing") return message.channel.send(`Reproduciendo el playlist ${musica_info.nombre}, primera musica: ${musica_info.musicas[0].nombre}`)                 
    }  

    else if(musica_info.tipo == "busqueda") {
        let msg = musica_info.musicas.map((r,i) => `**[${i+1}]** ${r.nombre}`)
        let embed = new Discord.RichEmbed()
        embed.setColor("RANDOM")
        embed.setDescription(`Selecciona la musica colocando el numero correspondiente, tienes 20 segundos\n${msg.join("\n")}`)
        message.channel.send(embed)

        let status = await music.rep_busqueda(message, musica_info, 20000)
        if(!status) return message.channel.send("No se seleccionó ninguna musica.")
        let musicas_queue = music.playlist(message)
        if(status == "queued") return message.channel.send(`La musica ${musicas_queue[musicas_queue.length-1].nombre} acaba de ser agregado al queue!`)
        else if(status == "playing") return message.channel.send(`Ahora reproduciendo ${musicas_queue[musicas_queue.length-1].nombre}`)             
    }       
  }


  if(command == "queue") {
    if(!music.tiene_musicas(message)) return message.channel.send("Actualmente no hay musicas en cola.")
    let musicas = music.playlist(message)
    let embed = new Discord.RichEmbed()
    embed.setColor("RANDOM")
    embed.setDescription(`${musicas.map((r, i) => `[${i+1}] ${r.nombre}`).join("\n")}`)
    return message.channel.send(embed)  
  }

  if(command == "pause") {
    if(!message.member.voiceChannel) return message.channel.send("Necesitas estar en un canal de voz.")
    if(!message.guild.me.voiceChannel) return message.channel.send("No estoy conectado en ningun canal de voz.")
    if(!music.tiene_musicas(message)) return message.channel.send("Actualmente no hay musicas en cola.")
    if(!music.canal_voz(message)) return message.channel.send("No estas en el mismo canal de voz donde el bot esta reproduciendo musica.")

    let status = music.pausar(message)
    if(!status) return message.channel.send("Actualmente la musica ya se encuentra pausada.")
    message.channel.send("Pausado correctamente")
  }

  if(command == "resume") {
    if(!message.member.voiceChannel) return message.channel.send("Necesitas estar en un canal de voz.")
    if(!message.guild.me.voiceChannel) return message.channel.send("No estoy conectado en ningun canal de voz.")   
    if(!music.tiene_musicas(message)) return message.channel.send("Actualmente no hay musicas en cola.")
    if(!music.canal_voz(message)) return message.channel.send("No estas en el mismo canal de voz donde el bot esta reproduciendo musica.")

    let status = music.retomar(message)
    if(!status) return message.channel.send("Actualmente la musica se encuentra reproduciendo.")
    message.channel.send("Reproduciendo nuevamente")
  }
  

  if(command == "skip") {
    if(!message.member.voiceChannel) return message.channel.send("Necesitas estar en un canal de voz.")
    if(!message.guild.me.voiceChannel) return message.channel.send("No estoy conectado en ningun canal de voz.")
    if(!music.tiene_musicas(message)) return message.channel.send("Actualmente no hay musicas en cola.")
    if(!music.canal_voz(message)) return message.channel.send("No estas en el mismo canal de voz donde el bot esta reproduciendo musica.")

    let musica = music.avanzar(message)
    if(musica == true) return message.channel.send("Musica skipeada correctamente!")
    if(musica.estado == 1) return message.channel.send(`Usted actualmente ya ha votado, votos actuales: ${musica.votos_min}/${musica.votos_max}`)
    else if(musica.estado == 2) return message.channel.send(`Usted ha votado correctamente, votos faltantes: ${musica.votos_min}/${musica.votos_max}`)
    else if(musica.estado == 3) return message.channel.send("Musica skipeada correctamente!")
  }

  if(command == "stop") {
    if(!message.member.voiceChannel) return message.channel.send("Necesitas estar en un canal de voz.")
    if(!message.guild.me.voiceChannel) return message.channel.send("No estoy conectado en ningun canal de voz.") 
    if(!music.tiene_musicas(message)) return message.channel.send("Actualmente no hay musicas en cola.")
    if(!music.canal_voz(message)) return message.channel.send("No estas en el mismo canal de voz donde el bot esta reproduciendo musica.") 
    music.detener(message)
    message.channel.send("Deteniendo musicas.")
  }

  if(command == "np") {  
    if(!music.tiene_musicas(message)) return message.channel.send("Actualmente no hay musicas en cola.")     
    let musica = music.np(message)
    message.channel.send(`La musica **${musica.nombre}** fue puesta por: ${musica.autor.user.username}`)
  }  


  if(command == "remove") {
    if(!message.member.voiceChannel) return message.channel.send("Necesitas estar en un canal de voz.")
    if(!message.guild.me.voiceChannel) return message.channel.send("No estoy conectado en ningun canal de voz.")  
    if(!music.tiene_musicas(message)) return message.channel.send("Actualmente no hay musicas en cola.")
    if(!music.canal_voz(message)) return message.channel.send("No estas en el mismo canal de voz donde el bot esta reproduciendo musica.") 

    if(!args[0]) return message.channel.send("Ingresa el index de la musica que quieres remover")
    if(isNaN(args[0])) return message.channel.send("Debes de poner un numero")
    let index = parseInt(args[0]) 
    if(index <= 1 || index > music.playlist(message).length) return message.channel.send("No puedes eliminar la musica de la posicion 1, tampoco puedes remover musicas no existentes") 
    music.remover(message, index)
    message.channel.send("Musica removida del queue")
  }

  if(command == "volumen") {
    if(!message.member.voiceChannel) return message.channel.send("Necesitas estar en un canal de voz.")
    if(!message.guild.me.voiceChannel) return message.channel.send("No estoy conectado en ningun canal de voz.")  
    if(!music.tiene_musicas(message)) return message.channel.send("Actualmente no hay musicas en cola.")
    if(!music.canal_voz(message)) return message.channel.send("No estas en el mismo canal de voz donde el bot esta reproduciendo musica.") 

    if(!args[0]) return message.channel.send("Ingresa el volumen")
    if(isNaN(args[0])) return message.channel.send("Debes poner un numero")
    let volumen = parseInt(args[0])  
    music.volumen(message, volumen)
    return message.channel.send(`Volumen cambiado a ${volumen}`)
  }
})


music.on('end', (canal, nueva_musica) => {
  if(!nueva_musica) return canal.send("El queue ha terminado!")
  let embed = new Discord.RichEmbed()
  embed.setColor("RANDOM")
  embed.setThumbnail(nueva_musica.thumbnail)
  embed.setDescription(`Ahora reproduciendo: ${nueva_musica.nombre} | Duracion: [${moment(nueva_musica.duracion).format("HH:mm:ss")}]`)
  embed.setFooter(`${nueva_musica.autor.user.username}`, nueva_musica.autor.user.displayAvatarURL)
  return canal.send(embed)
})


client.login("DISCORD_BOT_TOKEN")

Demostracion

https://youtu.be/8Pton0w-IFQ