Discord Player é uma estrutura robusta para desenvolver bots Discord Music usando JavaScript e TypeScript. Ele é construído sobre a biblioteca discord-voip e oferece um conjunto abrangente de ferramentas personalizáveis, tornando-o um dos frameworks com mais recursos da cidade.
O modo de compatibilidade Eris não oferece suporte ao manipulador
VoiceStateUpdate
. Você precisa lidar com isso manualmente.
O Discord Player requer Discord.js 14.0 ou superior. Certifique-se de ter uma versão compatível executando npm list discord.js
em seu terminal. Se você estiver usando uma versão anterior, atualize-a. O Guia discord.js fornece recursos para ajudá-lo no processo de atualização.
$ npm install --save discord-player # main library
$ npm install --save @discord-player/extractor # extractors provider
O Discord Player reconhece
@discord-player/extractor
e o carrega automaticamente por padrão. Basta invocarawait player.extractors.loadDefault()
.
Como o Discord só aceita pacotes opus, você precisa instalar a biblioteca opus. Discord Player oferece suporte a várias bibliotecas Opus, como:
Entre elas, mediaplex é a biblioteca recomendada, pois adiciona mais funcionalidades ao discord-player do que apenas a interface libopus. Você pode instalar bibliotecas opus executando:
$ 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
FFmpeg ou Avconv são necessários para transcodificação de mídia. Você pode obtê-lo em https://ffmpeg.org ou via npm.
Não recomendamos a instalação do ffmpeg via npm porque os binários extraídos do npm são conhecidos por serem instáveis. Recomenda-se instalá-lo da fonte 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
Use a variável de ambiente
FFMPEG_PATH
para carregar o ffmpeg do caminho personalizado.
Vamos criar uma instância do player principal. Esta instância trata e controla todas as filas e seus 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' ) ;
O Discord Player é baseado principalmente em eventos. Emite diferentes eventos com base no contexto e nas ações. Vamos adicionar um ouvinte de eventos básico para notificar o usuário quando uma faixa começa a ser reproduzida:
// 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 tem suporte limitado para Eris. Você pode usar o seguinte código para configurar o Discord Player com Eris:
const { Player , createErisCompat } = require ( 'discord-player' ) ;
const player = new Player ( createErisCompat ( client ) ) ;
Antes de adicionar o comando, certifique-se de fornecer o contexto para os comandos se desejar usar os ganchos do discord-player (como useMainPlayer
).
// execute the command
await command . execute ( interaction ) ;
// execute the command
await player . context . provide ( { guild : interaction . guild } , ( ) => command . execute ( interaction ) ) ;
Isso permite que o discord-player conheça automaticamente a guilda atual e a fila, resultando em um código mais limpo e integração perfeita. Isso elimina a necessidade de passar a instância do player para o comando ou usar hacks como client.player = player
.
Vamos passar para a parte do comando. Você pode definir o comando de acordo com seus requisitos. Vamos nos concentrar apenas na parte do 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 } ` ) ;
}
}
Isso é tudo o que você precisa para criar seu próprio bot de música. Por favor, verifique a documentação para mais recursos/funcionalidades.
Explore uma lista selecionada de recursos criados pela comunidade Discord Player, incluindo bots e extratores de música de código aberto. Visite https://discord-player.js.org/showcase para mais informações.