Research
Security News
Malicious npm Packages Inject SSH Backdoors via Typosquatted Libraries
Socket’s threat research team has detected six malicious npm packages typosquatting popular libraries to insert SSH backdoors.
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.
npm install megamusic --save
const music = require('megamusic');
### MegaMusic
MegaMusic(opciones)
El constructor MegaMusic recibe como parametro un objeto, este objeto es opcional.
Argumentos
Propiedades del objeto:
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
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
Ejemplos
const mega = require('megamusic');
let music = new mega.MegaMusic()
music.login("TU_API_DE_YOUTUBE")
### buscar
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
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 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 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 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
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
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_playlistrep_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
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_busquedarep_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
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.
### playlistplaylist(message)
Este metodo te permite ver las musicas que se van a reproducir, practicamente el queue del servidor.
Argumentos
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
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
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_textocanal_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
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_musicastiene_musicas(message)
Este metodo te permite verificar si actualmente hay musicas por reproducir, practicamente si el queue del servidor aun contiene musicas.
Argumentos
Retorna
Este metodo retorna 2 tipos de valores:
[1] false si no hay ninguna musica por reproducir. [2] true si hay musicas por reproducir.
### pausarpausar(message)
Este metodo te permite pausar la musica que se está reproduciendo en ese momento.
Argumentos
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.
### retomarretomar(message)
Este metodo te permite retomar la musica que anteriormente fue pausada.
Argumentos
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.
### avanzaravanzar(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
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
detener(message)
Este metodo te permite detener las musicas, detendrá la musica actual y eliminara las musicas del queue.
Argumentos
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
### removerremover(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
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
np(message)
Este metodo te permite ver la musica que se está reproduciendo en ese momento.
Argumentos
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
volumen(message, numero)
Este metodo te permite subir el volumen de la musica.
Argumentos
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.
### infoinfo(message)
Este metodo te permite obtener toda la informacion del servidor con respecto a la musica.
Argumentos
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}
}
<instancia_variable>.on('end', (canal, nueva_musica) => {})
Este evento se emitirá cuando una musica termine y comience a reproducirse otra.
Argumentos
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)
})
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")
FAQs
modulo para crear bots de musica facilmente
The npm package megamusic receives a total of 9 weekly downloads. As such, megamusic popularity was classified as not popular.
We found that megamusic demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Security News
Socket’s threat research team has detected six malicious npm packages typosquatting popular libraries to insert SSH backdoors.
Security News
MITRE's 2024 CWE Top 25 highlights critical software vulnerabilities like XSS, SQL Injection, and CSRF, reflecting shifts due to a refined ranking methodology.
Security News
In this segment of the Risky Business podcast, Feross Aboukhadijeh and Patrick Gray discuss the challenges of tracking malware discovered in open source softare.