Задать вопрос
@SenaTORxxx
Недопрограммист

Не определяется connection, что делать?

Так вот, код запускается, но не работает должным образом...
Вот весь код...
client.on('message', async message => {
    if (!message.guild) return;
  
    if (message.content === '/join') {
      if (message.member.voice.channel) {
        let connection = message.member.voice.channel.join();
        return message.channel.send('Подключено');   
      } else {
        return message.channel.send('Вы должны сначала подключится к голосовому чату')
      }
    }
  });
  client.on('message', async message =>{
    if(message.content === "/help"){
        return message.channel.send(' ``` /help - помощь по командам\n /join - присоединится к голосовому чату(Вы должны быть подключены к голосовому чату)\n /play - воспроизведение музыки ``` ');
    }
  });
  async function play(connection, song) {
    let music = await ytdl(song, {filter: 'audioonly'})

    connection.playStream(music, {valume: 0.5})
    .on('end', () =>{
        songs.shift()
        if(songs.length > 0) play(connection, song)
        else connection.disconnect()
    })
}
  client.on('message', async message =>{
    if(message.content === "/play"){
       var song = "https://www.youtube.com/watch?v=2ncEBRUmc_w&list=RDw1IYWHHI2-E&index=2";
        if(song === 1){ play(connection, song)}
        else{connection.disconnect()}
    }
  });


А вот ошибка: UnhandledPromiseRejectionWarning: ReferenceError: connection is not defined
  • Вопрос задан
  • 181 просмотр
Подписаться 1 Средний 2 комментария
Решения вопроса 1
pashted
@pashted
тыжпрограммист
вы объявляете
let connection = message.member.voice.channel.join()
вверху в одной области видимости, а при вызове if(song === 1){ play(connection, song)} передаете туда эту же переменную из другой области видимости. Конечно же она будет undefined
можно поступить так:
let connection;
client.on('message', async message => {
    if (!message.guild) return;
  
    if (message.content === '/join') {
      if (message.member.voice.channel) {
        connection = message.member.voice.channel.join();
        return message.channel.send('Подключено');   
      } else {
        return message.channel.send('Вы должны сначала подключится к голосовому чату')
      }
    }
  });
  client.on('message', async message =>{
    if(message.content === "/help"){
        return message.channel.send(' ``` /help - помощь по командам\n /join - присоединится к голосовому чату(Вы должны быть подключены к голосовому чату)\n /play - воспроизведение музыки ``` ');
    }
  });
  async function play(song) {
    let music = await ytdl(song, {filter: 'audioonly'})

    connection.playStream(music, {valume: 0.5})
    .on('end', () =>{
        songs.shift()
        if(songs.length > 0) play(song)
        else connection.disconnect()
    })
}
  client.on('message', async message =>{
    if(message.content === "/play"){
       var song = "https://www.youtube.com/watch?v=2ncEBRUmc_w&list=RDw1IYWHHI2-E&index=2";
        if(song === 1){ play(song)}
        else{connection.disconnect()}
    }
  });


правда, это очень грубо и не будет работать правильно, если у вас будет много подключений. сделайте объект, в котором они будут храниться по отдельности.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы