Ошибка воспроизведения музыки discord.py[voice]

Рейтинг: 1Ответов: 1Опубликовано: 22.02.2023

Создаю бота, который 24/7 воспроизводит музыку в голосовом канале. Сделал систему воспроизведения плейлистов, но после загрузки следующего возникает ошибка Not connected to voice, хотя бот подключён к голосовому каналу

Цикл:

is_play = True
while is_play:
  for j in range(int(i), len(playlist)):
    if is_play == False:
      break
    await inter.edit_original_message('**Получение информации о плейлисте...**\n*Ждите это долго*', view=None)
    try:
      with youtube_dl.YoutubeDL(YDL_OPTIONS) as ydl:
        info = ydl.extract_info(playlist[j][1], download=False)
    except:
      await inter.edit_original_message('Не удалось загрузить этот плейлист')
      break
    for m in range(len(info['entries'])):
      if is_play == False or next_playlist == True:
        next_playlist = False
        break
      name = info['entries'][m]['title']
      n = len(info['entries'])
      await inter.edit_original_message(f'Плейлист **{j+1}/{len(playlist)}**:\n```\n{playlist[j][0]}\n```\nВидео **{m+1}/{n}**:\n```\n{name}\n```', view=None)
      url = info['entries'][m]['formats'][0]['url']
      vc.play(disnake.FFmpegPCMAudio(url, **FFMPEG_OPTIONS))
      while vc.is_playing():
        await sleep(1)
  i = 0
vc = None

Полная ошибка:

Traceback (most recent call last):
  File "C:\Kirill\Python\lib\site-packages\disnake\ui\view.py", line 385, in _scheduled_task
    await item.callback(interaction)
  File "c:\Kirill\Projects\DIRECTORY\music.py", line 64, in callback
    await play_playlist(inter, inter.values[0])
  File "c:\Kirill\Projects\DIRECTORY\music.py", line 152, in play_playlist
    vc.play(disnake.FFmpegPCMAudio(url, **FFMPEG_OPTIONS))
  File "C:\Kirill\Python\lib\site-packages\disnake\voice_client.py", line 572, in play
    raise ClientException("Not connected to voice.")
disnake.errors.ClientException: Not connected to voice.

Помогите пожалуйста, уже несколько дней ищу ответ

Ответы

▲ 1Принят

По всей видимости, это происходит из-за того, что соединение с голосовым каналом прерывается между загрузкой плейлистов.

Вы можете добавить проверку наличия соединения голосового канала перед воспроизведением аудио:

vc = get(self.bot.voice_clients, guild=ctx.guild)
if vc and vc.is_connected():
    vc.play(discord.FFmpegPCMAudio(url, **FFMPEG_OPTIONS))
else:
    await ctx.send("Бот не подключен к голосовому каналу.")

Также рекомендую использовать механизмы обработки ошибок для выполнения соединения с голосовым каналом и обработки исключений при загрузке плейлистов.