Módulo de música para bots en Discord.js (v13) con el que podrás implementar la capacidad de reproducir música a tus bots, siendo fácil y en español.
Para ver los cambios recientes, no olvides leer el documento CHANGELOG.md
npm install --save starmusic
Usando ESM
import StarMusic from 'starmusic';
Usando CommonJS
const StarMusic = require('starmusic');
En su archivo principal del bot, index.js
o server.js
comúnmente, debe de iniciar el módulo antes de ser utilizado.
var music = new StarMusic({
youtubeKey: 'Tu YouTube Data API3 key'
});
El constructor recibe {opciones} los cuales puedes revisar en esta tabla
play(message, search);
Reproduce música dando un texto a buscar o un link de youtube, ya sea una canción o una lista el link. Cuando empieza la canción se mostrara su información y el reproductor.
- Argumentos
- message: Corresponde a la variable
message
de tu eventomessages
de Discord. - search: Será la cadena de texto que se tiene que buscar o un link de youtube.
search(message, search);
Búsca una canción y selecciona una de las 10 opciones para reproducir la música. (Tienen que escribir del 1 al 10 después de usar el comando para elegir la canción)
- Argumentos
- message: Corresponde a la variable
message
de tu eventomessages
de Discord. - search: Será la cadena de texto que se tiene que buscar.
pause(message);
Pausa la reproducción actual.
- Argumentos
- message: Corresponde a la variable
message
de tu eventomessages
de Discord.
resume(message);
Continúa con la reproducción previamente pausada.
- Argumentos
- message: Corresponde a la variable
message
de tu eventomessages
de Discord.
skip(message);
Salta la canción actual, si no hay otra canción el bot finalizará la reproducción.
- Argumentos
- message: Corresponde a la variable
message
de tu eventomessages
de Discord.
leave(message);
Termina la reproduccion actual y salca al bot de el canal.
- Argumentos
- message: Corresponde a la variable
message
de tu eventomessages
de Discord.
np(message);
Te dice lo que está sonando en ese momento y abre el reproductor nuevamente.
- Argumentos
- message: Corresponde a la variable
message
de tu eventomessages
de Discord.
repeat(message, song);
Establece el modo de repetición de la cola de reproducción actual.
- Argumentos
- message: Corresponde a la variable
message
de tu eventomessages
de Discord. - song (opcional): Modo en número. Si no pasa esta propiedad el modo se establecerá al siguiente de la lista.
Modos:
- 1: Modo repetir una canción.
- 2: Repetir todas las canciones.
- 0 | 3: Desactivar modo repetir.
queue(message, song);
Te muestra las canciones que tienes por reproducir y la actual. Si colocas un número representando la posisión de la canción en cola, te da información hacerca de esta.
- Argumentos
- message: Corresponde a la variable
message
de tu eventomessages
. - song (opcional): Número correspondiente a la posision de una canción.
remove(message, song);
Quita una canción en especifico de la cola de reproducción.
- Argumentos
- message: Corresponde a la variable
message
de tu eventomessages
de Discord. - song: Número correspondiente a la posision de la canción a quitar.
clear(message);
Quitará todas las canciones de la cola de reproducción menos la que esté sonando actualmente.
- Argumentos
- message: Corresponde a la variable
message
de tu eventomessages
de Discord.
Tabla de opciones y configuraciones
Opción | Tipo | Descripción | Por Defecto |
---|---|---|---|
youtubekey | String | Key de YouTube Data API3 que puedes obtener desde Google Cloud | Ninguno |
embedColor | String | Color que se le dará a los embeds en hexadesimal o colores reservados de discord.js | RED |
emoji | String | Establece el emoji que se mostrará en el reproductor | 🔴 |
maxTail | Number | Establece el límite de la cola que se permite | 50 |
bitrate | String | Establece el bitRate que discord.js usa y permite | auto |
adminRoles | Array | ID de los roles con poder en los comandos como sacar al bot o omitir canciones sin ser quien puso la canción | Ninguno |
djRoles | Array | ID de los roles que pueden usar los comandos si soloDj es true |
Ninguno |
justDj | Boolean | si es true, solamente los que tendan cierto rol podrán ocupar los comandos | False |
anyTakeOut | Boolean | si es true, cualquiera podrá usar el comando de salir, si es false, solamente quien puso la canción y admins podrán hacerlo | False |
anyPause | Boolean | si es true, cualquiera podrá usar el comando de pausar, si es false, solamente quien puso la canción y admins podrán hacerlo | False |
anySkip | Boolean | si es true, cualquiera podrá usar el comando de omitir, si es false, solamente quien puso la canción y admins podrán hacerlo | False |
newSongMessage | Boolean | si es true, saldrá un mensaje cuando termine una cancion y empiece una nueva con la información de la misma, si es false, no saldrá ningun mensaje | True |
showName | Boolean | si es true, mostrará el nombre en el embed de quien solicitó la canción | True |
En nuestro archivo principal. Comunmente llamado index.js
.
// Declaramos la base
const Discord = require('discord.js');
const StarMusic = require('starmusic');
const prefix = '!';
const client = new Discord.Client();
// Aquí iniciamos el módulo.
var music = new StarMusic({
youtubeKey: 'ApiKey',
adminRoles: ['IDRol']
// Puedes poner las opciones que necesites.
});
// Evento para ver cuando el bot ya prendió y está funcionando.
client.on('ready', () => console.log('¡Encendido!'));
// Escuchamos los mensajes con el evento "messageCreate".
client.on('messageCreate', (message) => {
// No hacemos nada si el mensaje no empieza con el prefijo o el usuario es un bot.
if (!message.content.startsWith(prefix) || message.author.bot) return;
if (message.content.startsWith(prefix + 'play')) {
// Aquí medimos nuestro prefix y sumamos 4 por el largo de la palabra "play"
let args = message.content.slice(prefix.length + 4);
music.play(message, args.join(' '));
}
});
client.login('SecretToken');
En TypeScript
import { Client, Message } from "discord.jsdiscord.js";
import StarMusic from "starmusic";
const prefix = '!';
const client = new Client();
// Iniciamos el módulo.
var starmusic = new StarMusic({
youtubeKey: 'ApiKey'
});
// Escuchamos el evento "ready".
client.on('ready', () => console.log('¡Encendido!'));
// Escuchamos el evento "messageCreate".
client.on('messageCreate', (message: Message) => {
// Retornamos si el mensaje no empieza con el prefijo o el usuario es un bot.
if (!message.content.startsWith(prefix) || message.author.bot) return;
if (message.content.startsWith(prefix + 'play')) {
let args = message.content.slice(prefix.length + 4);
starmusic.play(message, args.join(' '));
}
});
// "TOKEN_BOT" Se define como variable de entorno en tu sistema operativo o usando dotenv y un archivo .env
client.login(process.env.TOKEN_BOT as string);
En nuestro archivo principal. Comunmente llamado index.js
.
// Declaramos la base
const Discord = require('discord.js');
const StarMusic = require('starmusic');
const fs = require('fs');
const prefix = '!';
const client = new Discord.Client();
client.commands = new Discord.Collection();
// Aquí iniciamos el módulo y lo pasaremos por el cliente.
client.music = new StarMusic({
youtubeKey: 'ApiKey',
djRoles: ['IDRol', 'IDRol2'],
embedColor: 'BLUE'
});
// Leemos la carpeta commands donde se encuentran nuestros archivos de comandos.
const commandFiles = fs.readdirSync('./commands').filter((file) => file.endsWith('.js'));
// Hacemos un for para leer los archivos escaneados previamente.
for (const file of commandFiles) {
const command = require(`./commands/${file}`);
/* Establecer un nuevo comando en la colección.
* Ponemos como clave el nombre de comando y como valor el módulo exportado.
*/
client.commands.set(command.name, command);
}
// Nuestro evento común de encendido
client.on('ready', () => console.log('¡Encendido!'));
// Escuchamos los mensajes con el evento "messageCreate".
client.on('messageCreate', (message) => {
if (!message.content.startsWith(prefix) || message.author.bot) return;
const args = message.content.slice(prefix.length).trim().split(/ +/);
const command = args.shift().toLowerCase();
if (command == 'play') {
// Obtenemos nuestro comando y ejecutamos su función execute.
client.commands.get('play').execute(client, message, args);
}
});
client.login('SecretToken');
En la misma carpeta del bot, cree una nueva carpeta y asígnele un nombre como commands
. Después crea un nuevo archivo llamado play.js
copia y pega el siguiente código:
module.exports = {
name: 'play',
description: 'Reproduce una canción',
execute(client, message, args) {
// Ejecutamos la función play
client.music.play(message, args.join(' '));
}
};
Puedes ver una guía completa de como hacer manejo de comandos en esta guía (En inglés)
En nuestro archivo principal. Comunmente llamado index.js
.
// Declaramos la base
const Discord = require('discord.js');
const StarMusic = require('starmusic');
const fs = require('fs');
const prefix = '!';
const client = new Discord.Client();
client.commands = new Discord.Collection();
// Aquí iniciamos el módulo y lo pasaremos por el cliente.
client.music = new StarMusic({
youtubeKey: 'ApiKey',
djRoles: ['IDRol', 'IDRol2'],
embedColor: 'BLUE'
});
// Nuestros eventos comunes...
client.on('ready', () => console.log('¡Encendido!'));
/* Debes de crear los slashCommands previamente conforme a lo que requieras
* por ejemplo:
* {
* name: "play",
* description: "Reproduce una canción de Youtube por su nombre o su url.",
* options: [
* {
* name: "song",
* type: "STRING",
* description: "Nombre de la canción o url a buscar.",
* required: true
* }
* ]
* }
*/
// Escuchamos los comandos con el evento "interaction".
client.on('interactionCreate', (interaction) => {
// Si nuestra interacción no es un comando, retornamos sin hacer nada
if (!interaction.isCommand()) return;
// Si es comando se llama play
if (interaction.commandName === 'play') {
// Tomamos el valor de búsqueda llamada song
const url = interaction.options.get('song').value;
// Ejecutamos la función play
client.music.play(interaction, url);
// Si es comando se llama leave
} else if (interaction.commandName === 'leave') {
client.music.leave(interaction);
}
});
client.login('SecretToken');