반응형
이런저런 일이 많아 잠시 내려놓았다가 시간이 생겨 또 추가해보았다.
이번엔 직접 유튜브 링크를 작성하여 재생시키는게 아닌
특정단어로 해당 유튜브를 재생시키는 방법을 추가했다.
고맙게도 node js 에 youtube-search 모듈이 있다.
npm install youtube-search
이후
https://console.developers.google.com
에 접속하여 프로젝트를 만들고 key를 발급받자
자세한건 아래 블로그 참고
키를 발급받았으니 코드에 넣자
const { Client, GatewayIntentBits } = require('discord.js');
const { joinVoiceChannel, createAudioPlayer, createAudioResource, AudioPlayerStatus } = require('@discordjs/voice');
const ytdl = require('ytdl-core');
const { token, youtubeApiKey } = require('./discordConfig.js');
const sodium = require('libsodium-wrappers'); // 추가된 부분
const search = require('youtube-search'); // 유튜브 검색 추가
//유튜브 api 사용옵션
const opts = {
maxResults: 1,
key: youtubeApiKey,
type: 'video'
};
상단 토큰 부분에 youtubeApiKey 를 추가하고 search를 정의하여 require 로 youtube-search 모듈을 가져왔다.
무료 사용 제한은 하루에 1000건 검색으로 알고있다.
이후 사용은 아래 search 코드와 같다.
search(query, opts, async (err, results) => {
if (err) return console.error(err);
if (results.length === 0) {
return message.reply('검색 결과가 없습니다.');
}
const playUrl = results[0].link; //유튜브 검색결과로 youtube link 생성
try {
connection = joinVoiceChannel({
channelId: voiceChannel.id,
guildId: message.guild.id,
adapterCreator: message.guild.voiceAdapterCreator,
});
const playStream = () => {
const stream = ytdl(playUrl, {
filter: 'audioonly',
fmt: "mp3",
highWaterMark: 1 << 62,
liveBuffer: 1 << 62,
dlChunkSize: 0, //disabling chunking is recommended in discord bot
bitrate: 128,
quality: "lowestaudio"
});
const resource = createAudioResource(stream);
player.play(resource);
}
player = createAudioPlayer();
playStream();
connection.subscribe(player);
player.on(AudioPlayerStatus.Idle, () => {
playStream();
});
} catch (error) {
console.error(error);
}
});
이전 포스팅에서 작성한 코드에 유튜브 검색해서 나온 link 만 집어넣어 작동하도록 만들었다.
이제 명령어를 정리하며 차근차근 넓혀야겠다.
반응형
'디스코드봇' 카테고리의 다른 글
[JS] 디스코드 노래 봇 6 (1) | 2024.10.17 |
---|---|
[JS] 디스코드 노래 봇 5 (0) | 2024.08.24 |
[JS] 디스코드 노래 봇 4 (1) | 2024.07.14 |
[JS] 디스코드 노래 봇 2 (1) | 2024.06.16 |
[JS] 디스코드 노래 봇 (1) | 2024.06.16 |