본문 바로가기

디스코드봇

[JS] 디스코드 노래 봇 3

반응형

이런저런 일이 많아 잠시 내려놓았다가 시간이 생겨 또 추가해보았다.

이번엔 직접 유튜브 링크를 작성하여 재생시키는게 아닌 

특정단어로 해당 유튜브를 재생시키는 방법을 추가했다.

고맙게도 node js 에 youtube-search 모듈이 있다.

npm install youtube-search

이후 

https://console.developers.google.com

 

Google 클라우드 플랫폼

로그인 Google 클라우드 플랫폼으로 이동

accounts.google.com

에 접속하여 프로젝트를 만들고 key를 발급받자

자세한건 아래 블로그 참고

https://bonniness.tistory.com/entry/%EA%B5%AC%EA%B8%80-Youtube-API-%EC%82%AC%EC%9A%A9-%EC%82%AC%EC%9A%A9%EC%84%A4%EC%A0%95-KEY-%EB%B0%9C%EA%B8%89-%ED%85%8C%EC%8A%A4%ED%8A%B8

 

구글 (Youtube) API 사용 (사용설정, KEY 발급, 테스트 )

(1) https://console.developers.google.com 에 접속 합니다. (2) 프로젝트를 생성 합니다. (3) 사용할 API 를 검색 및 사용 설정을 합니다. (4) API 를 사용하기 위해서 "사용자 인증정보(KEY)" 를 발급받습니다. (5)

bonniness.tistory.com

 

키를 발급받았으니 코드에 넣자

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] 디스코드 노래 봇 5  (0) 2024.08.24
[JS] 디스코드 노래 봇 4  (1) 2024.07.14
[JS] 디스코드 노래 봇 2  (1) 2024.06.16
[JS] 디스코드 노래 봇  (1) 2024.06.16