Discord Player ist ein robustes Framework für die Entwicklung von Discord Music-Bots mithilfe von JavaScript und TypeScript. Es basiert auf der Discord-VoIP-Bibliothek und bietet einen umfassenden Satz anpassbarer Tools, was es zu einem der funktionsreichsten Frameworks der Stadt macht.
Der Eris-Kompatibilitätsmodus unterstützt den
VoiceStateUpdate
Handler nicht. Sie müssen es manuell bearbeiten.
Für den Discord Player ist Discord.js 14.0 oder höher erforderlich. Bitte stellen Sie sicher, dass Sie über eine kompatible Version verfügen, indem Sie npm list discord.js
in Ihrem Terminal ausführen. Wenn Sie eine frühere Version verwenden, aktualisieren Sie diese bitte. Der discord.js-Leitfaden bietet Ressourcen, die Sie beim Aktualisierungsprozess unterstützen.
$ npm install --save discord-player # main library
$ npm install --save @discord-player/extractor # extractors provider
Discord Player erkennt
@discord-player/extractor
und lädt es standardmäßig automatisch. Rufen Sie einfachawait player.extractors.loadDefault()
auf.
Da Discord nur Opus-Pakete akzeptiert, müssen Sie die Opus-Bibliothek installieren. Discord Player unterstützt mehrere Opus-Bibliotheken, wie zum Beispiel:
Unter diesen ist Mediaplex die empfohlene Bibliothek, da sie dem Discord-Player mehr Funktionalitäten als nur die Libopus-Schnittstelle hinzufügt. Sie können Opus-Bibliotheken installieren, indem Sie Folgendes ausführen:
$ 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
Für die Medientranskodierung ist FFmpeg oder Avconv erforderlich. Sie können es von https://ffmpeg.org oder über npm erhalten.
Wir empfehlen nicht, ffmpeg über npm zu installieren, da aus npm gezogene Binärdateien bekanntermaßen instabil sind. Es wird empfohlen, es von der offiziellen Quelle zu installieren.
$ 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
Verwenden Sie die Umgebungsvariable
FFMPEG_PATH
, um ffmpeg aus dem benutzerdefinierten Pfad zu laden.
Lassen Sie uns eine Hauptspielerinstanz erstellen. Diese Instanz verwaltet und verfolgt alle Warteschlangen und ihre Komponenten.
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 basiert hauptsächlich auf Ereignissen. Es gibt je nach Kontext und Aktionen unterschiedliche Ereignisse aus. Fügen wir einen einfachen Ereignis-Listener hinzu, um den Benutzer zu benachrichtigen, wenn die Wiedergabe eines Titels beginnt:
// 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 bietet begrenzte Unterstützung für Eris. Sie können den folgenden Code verwenden, um Discord Player mit Eris einzurichten:
const { Player , createErisCompat } = require ( 'discord-player' ) ;
const player = new Player ( createErisCompat ( client ) ) ;
Bevor Sie den Befehl hinzufügen, stellen Sie sicher, dass Sie den Kontext für die Befehle angeben, wenn Sie die Hooks von Discord-Player verwenden möchten (z. B. useMainPlayer
).
// execute the command
await command . execute ( interaction ) ;
// execute the command
await player . context . provide ( { guild : interaction . guild } , ( ) => command . execute ( interaction ) ) ;
Dadurch kann der Discord-Player automatisch die aktuelle Gilde und die Warteschlange erkennen, was zu einem saubereren Code und einer nahtlosen Integration führt. Dadurch entfällt die Notwendigkeit, die Player-Instanz an den Befehl zu übergeben oder Hacks wie client.player = player
zu verwenden.
Kommen wir zum Befehlsteil. Sie können den Befehl entsprechend Ihren Anforderungen definieren. Wir konzentrieren uns nur auf den Befehlsteil:
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 } ` ) ;
}
}
Das ist alles, was Sie brauchen, um Ihren eigenen Musik-Bot zu erstellen. Weitere Features/Funktionalitäten finden Sie in der Dokumentation.
Entdecken Sie eine kuratierte Liste von Ressourcen, die von der Discord Player-Community erstellt wurden, einschließlich Open-Source-Musik-Bots und -Extraktoren. Weitere Informationen finden Sie unter https://discord-player.js.org/showcase.