본문 바로가기

디스코드봇

[JS] 디스코드 노래 봇 2

반응형

저번에 특정 노래만을 재생하도록 만들어놨으니 이번엔 URL을 받으면 그 노래를 반복재생하도록 추가해보았다.

else if (command.indexOf('https://www.youtube.com') != -1) {

      const playUrl = command;
      voiceChannel = message.member.voice.channel;
      if (!voiceChannel) {
        return message.reply('채널에 먼저 들가라');
      }
  
      const permissions = voiceChannel.permissionsFor(message.client.user);
      if (!permissions.has('CONNECT') || !permissions.has('SPEAK')) {
        return message.reply('권한내놔');
      }
  
      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);
        message.reply('ㅅㅂ에러');
      }
    }

 

else if 로 커맨드에 youtube url 이 섞여있다면 해당 url를 youtube에서 가져와서 재생시키도록해놨다

connection, voiceChannel, player 는 하나로 하기위에 처음 만들때 let 으로 이미 초기화해두었다.

곡 재생 종료 이벤트를 받게되면 다시 playStream() 을 호출하여 무한재생되도록 해두었다.

playStream 속에

player.play(resource);

가 들어있다.

 

반응형

'디스코드봇' 카테고리의 다른 글

[JS] 디스코드 노래 봇 5  (0) 2024.08.24
[JS] 디스코드 노래 봇 4  (1) 2024.07.14
[JS] 디스코드 노래 봇 3  (0) 2024.06.30
[JS] 디스코드 노래 봇  (1) 2024.06.16