Discord Player es un marco sólido para desarrollar bots de Discord Music utilizando JavaScript y TypeScript. Está construido sobre la biblioteca discord-voip y ofrece un conjunto completo de herramientas personalizables, lo que lo convierte en uno de los marcos con mayor riqueza de funciones del mercado.
El modo de compatibilidad de Eris no es compatible con el controlador
VoiceStateUpdate
. Debes manejarlo manualmente.
Discord Player requiere Discord.js 14.0 o superior. Asegúrese de tener una versión compatible ejecutando npm list discord.js
en su terminal. Si está utilizando una versión anterior, actualícela. La Guía de discord.js proporciona recursos para ayudarle con el proceso de actualización.
$ npm install --save discord-player # main library
$ npm install --save @discord-player/extractor # extractors provider
Discord Player reconoce
@discord-player/extractor
y lo carga automáticamente de forma predeterminada. Simplemente invoqueawait player.extractors.loadDefault()
.
Dado que Discord solo acepta paquetes opus, es necesario instalar la biblioteca opus. Discord Player admite múltiples bibliotecas de opus, como:
Entre ellas, mediaplex es la biblioteca recomendada ya que agrega más funcionalidades a discord-player que solo la interfaz libopus. Puede instalar bibliotecas opus ejecutando:
$ npm install --save mediaplex
# or
$ npm install --save @discordjs/opus
# or
$ npm install --save opusscript
# or
$ npm install --save @evan/opus
# or
$ npm install --save node-opus
Se requiere FFmpeg o Avconv para la transcodificación de medios. Puede obtenerlo en https://ffmpeg.org o mediante npm.
No recomendamos instalar ffmpeg a través de npm porque se sabe que los archivos binarios extraídos de npm son inestables. Se recomienda instalarlo desde la fuente oficial.
$ npm install --save ffmpeg-static
# or
$ npm install --save @ffmpeg-installer/ffmpeg
# or
$ npm install --save @node-ffmpeg/node-ffmpeg-installer
# or
$ npm install --save ffmpeg-binaries
Utilice la variable de entorno
FFMPEG_PATH
para cargar ffmpeg desde la ruta personalizada.
Creemos una instancia de jugador principal. Esta instancia maneja y realiza un seguimiento de todas las colas y sus componentes.
const { Player } = require ( 'discord-player' ) ;
const client = new Discord . Client ( {
// Make sure you have 'GuildVoiceStates' intent enabled
intents : [ 'GuildVoiceStates' /* Other intents */ ]
} ) ;
// this is the entrypoint for discord-player based application
const player = new Player ( client ) ;
// Now, lets load all the default extractors, except 'YouTubeExtractor'. You can remove the filter if you want to include youtube.
await player . extractors . loadDefault ( ( ext ) => ext !== 'YouTubeExtractor' ) ;
Discord Player se basa principalmente en eventos. Emite diferentes eventos según el contexto y las acciones. Agreguemos un detector de eventos básico para notificar al usuario cuando una pista comienza a reproducirse:
// this event is emitted whenever discord-player starts to play a track
player . events . on ( 'playerStart' , ( queue , track ) => {
// we will later define queue.metadata object while creating the queue
queue . metadata . channel . send ( `Started playing ** ${ track . cleanTitle } **!` ) ;
} ) ;
Discord Player tiene soporte limitado para Eris. Puede utilizar el siguiente código para configurar Discord Player con Eris:
const { Player , createErisCompat } = require ( 'discord-player' ) ;
const player = new Player ( createErisCompat ( client ) ) ;
Antes de agregar el comando, asegúrese de proporcionar el contexto de los comandos si desea utilizar los ganchos de Discord-Player (como useMainPlayer
).
// execute the command
await command . execute ( interaction ) ;
// execute the command
await player . context . provide ( { guild : interaction . guild } , ( ) => command . execute ( interaction ) ) ;
Esto permite que Discord-Player conozca automáticamente el gremio actual y la cola, lo que da como resultado un código más limpio y una integración perfecta. Esto erradica la necesidad de pasar la instancia del reproductor al comando o usar trucos como client.player = player
.
Pasemos a la parte de mando. Puede definir el comando según sus requisitos. Sólo nos centraremos en la parte del comando:
const { useMainPlayer } = require ( 'discord-player' ) ;
export async function execute ( interaction ) {
const player = useMainPlayer ( ) ; // get player instance
const channel = interaction . member . voice . channel ;
if ( ! channel ) return interaction . reply ( 'You are not connected to a voice channel!' ) ; // make sure we have a voice channel
const query = interaction . options . getString ( 'query' , true ) ; // we need input/query to play
// let's defer the interaction as things can take time to process
await interaction . deferReply ( ) ;
try {
const { track } = await player . play ( channel , query , {
nodeOptions : {
// nodeOptions are the options for guild node (aka your queue in simple word)
metadata : interaction // we can access this metadata object using queue.metadata later on
}
} ) ;
return interaction . followUp ( `** ${ track . cleanTitle } ** enqueued!` ) ;
} catch ( e ) {
// let's return error if something failed
return interaction . followUp ( `Something went wrong: ${ e } ` ) ;
}
}
Eso es todo lo que necesitas para crear tu propio robot de música. Consulte la documentación para conocer más características/funcionalidades.
Explore una lista seleccionada de recursos creados por la comunidad de Discord Player, incluidos extractores y bots de música de código abierto. Visite https://discord-player.js.org/showcase para obtener más información.