Discord Player는 JavaScript 및 TypeScript를 사용하여 Discord Music 봇을 개발하기 위한 강력한 프레임워크입니다. discord-voip 라이브러리를 기반으로 구축되었으며 사용자 정의 가능한 포괄적인 도구 세트를 제공하여 마을에서 가장 기능이 풍부한 프레임워크 중 하나가 되었습니다.
Eris 호환 모드는
VoiceStateUpdate
핸들러를 지원하지 않습니다. 수동으로 처리해야 합니다.
Discord Player에는 Discord.js 14.0 이상이 필요합니다. 터미널에서 npm list discord.js
실행하여 호환 가능한 버전이 있는지 확인하세요. 이전 버전을 사용하고 계시다면 업데이트해주세요. discord.js 가이드는 업데이트 프로세스에 도움이 되는 리소스를 제공합니다.
$ npm install --save discord-player # main library
$ npm install --save @discord-player/extractor # extractors provider
Discord Player는
@discord-player/extractor
인식하고 기본적으로 자동으로 로드합니다. 그냥await player.extractors.loadDefault()
호출하세요.
Discord는 opus 패킷만 허용하므로 opus 라이브러리를 설치해야 합니다. Discord Player는 다음과 같은 여러 Opus 라이브러리를 지원합니다.
이 중에서 mediaplex는 libopus 인터페이스보다 discord-player에 더 많은 기능을 추가하므로 권장되는 라이브러리입니다. 다음을 실행하여 opus 라이브러리를 설치할 수 있습니다.
$ 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 또는 Avconv가 필요합니다. https://ffmpeg.org 또는 npm을 통해 얻을 수 있습니다.
npm에서 가져온 바이너리는 불안정한 것으로 알려져 있으므로 npm을 통해 ffmpeg를 설치하지 않는 것이 좋습니다. 공식 소스에서 설치하는 것이 좋습니다.
$ 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
FFMPEG_PATH
환경 변수를 사용하여 사용자 정의 경로에서 ffmpeg를 로드합니다.
메인 플레이어 인스턴스를 만들어 보겠습니다. 이 인스턴스는 모든 대기열과 해당 구성 요소를 처리하고 추적합니다.
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는 대부분 이벤트 기반입니다. 컨텍스트와 작업에 따라 다양한 이벤트를 내보냅니다. 트랙 재생이 시작될 때 사용자에게 알리기 위해 기본 이벤트 리스너를 추가해 보겠습니다.
// 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는 Eris를 제한적으로 지원합니다. 다음 코드를 사용하여 Eris로 Discord Player를 설정할 수 있습니다:
const { Player , createErisCompat } = require ( 'discord-player' ) ;
const player = new Player ( createErisCompat ( client ) ) ;
명령을 추가하기 전에 discord-player의 후크(예: useMainPlayer
)를 사용하려는 경우 명령에 컨텍스트를 제공해야 합니다.
// execute the command
await command . execute ( interaction ) ;
// execute the command
await player . context . provide ( { guild : interaction . guild } , ( ) => command . execute ( interaction ) ) ;
이를 통해 discord-player는 현재 길드와 대기열을 자동으로 알 수 있어 더 깔끔한 코드와 원활한 통합이 가능합니다. 이렇게 하면 플레이어 인스턴스를 명령에 전달하거나 client.player = player
같은 해킹을 사용할 필요가 없어집니다.
명령 부분으로 넘어 갑시다. 요구 사항에 따라 명령을 정의할 수 있습니다. 우리는 명령 부분에만 집중할 것입니다:
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 } ` ) ;
}
}
이것이 바로 자신만의 음악 봇을 만드는 데 필요한 전부입니다. 더 많은 특징/기능에 대해서는 설명서를 확인하세요.
오픈 소스 음악 봇 및 추출기를 포함하여 Discord Player 커뮤니티에서 구축한 엄선된 리소스 목록을 살펴보세요. 자세한 내용은 https://discord-player.js.org/showcase를 방문하세요.