Discord Player est un framework robuste pour développer des robots Discord Music à l'aide de JavaScript et TypeScript. Il est construit sur la bibliothèque Discord-VoIP et offre un ensemble complet d'outils personnalisables, ce qui en fait l'un des frameworks les plus riches en fonctionnalités de la ville.
Le mode de compatibilité Eris ne prend pas en charge le gestionnaire
VoiceStateUpdate
. Vous devez le gérer manuellement.
Discord Player nécessite Discord.js 14.0 ou supérieur. Veuillez vous assurer que vous disposez d'une version compatible en exécutant npm list discord.js
dans votre terminal. Si vous utilisez une version antérieure, veuillez la mettre à jour. Le guide discord.js fournit des ressources pour vous aider dans le processus de mise à jour.
$ npm install --save discord-player # main library
$ npm install --save @discord-player/extractor # extractors provider
Discord Player reconnaît
@discord-player/extractor
et le charge automatiquement par défaut. Invoquez simplementawait player.extractors.loadDefault()
.
Étant donné que Discord n'accepte que les paquets opus, vous devez installer la bibliothèque opus. Discord Player prend en charge plusieurs bibliothèques d'opus, telles que :
Parmi celles-ci, mediaplex est la bibliothèque recommandée car elle ajoute plus de fonctionnalités au lecteur Discord qu'une simple interface libopus. Vous pouvez installer les bibliothèques opus en exécutant :
$ 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 est requis pour le transcodage multimédia. Vous pouvez l'obtenir sur https://ffmpeg.org ou via npm.
Nous ne recommandons pas d'installer ffmpeg via npm car les binaires extraits de npm sont connus pour être instables. Il est recommandé de l'installer à partir de la source officielle.
$ 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
Utilisez la variable d'environnement
FFMPEG_PATH
pour charger ffmpeg à partir d'un chemin personnalisé.
Créons une instance de joueur principal. Cette instance gère et assure le suivi de toutes les files d'attente et de ses composants.
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 est principalement basé sur des événements. Il émet différents événements en fonction du contexte et des actions. Ajoutons un écouteur d'événements de base pour avertir l'utilisateur lorsqu'une piste commence à jouer :
// 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 a une prise en charge limitée pour Eris. Vous pouvez utiliser le code suivant pour configurer Discord Player avec Eris :
const { Player , createErisCompat } = require ( 'discord-player' ) ;
const player = new Player ( createErisCompat ( client ) ) ;
Avant d'ajouter la commande, assurez-vous de fournir le contexte aux commandes si vous souhaitez utiliser les hooks de Discord-player (comme useMainPlayer
).
// execute the command
await command . execute ( interaction ) ;
// execute the command
await player . context . provide ( { guild : interaction . guild } , ( ) => command . execute ( interaction ) ) ;
Cela permet au joueur Discord de connaître automatiquement la guilde actuelle et la file d'attente, ce qui entraîne un code plus propre et une intégration transparente. Cela élimine le besoin de transmettre l'instance du joueur à la commande ou d'utiliser des hacks comme client.player = player
.
Passons à la partie commande. Vous pouvez définir la commande selon vos besoins. Nous nous concentrerons uniquement sur la partie commande :
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 } ` ) ;
}
}
C'est tout ce qu'il faut pour créer votre propre robot musical. Veuillez consulter la documentation pour plus de fonctionnalités/fonctionnalités.
Explorez une liste organisée de ressources créées par la communauté Discord Player, y compris des robots et extracteurs de musique open source. Visitez https://discord-player.js.org/showcase pour plus d'informations.