Ошибка чтения YoutubeDL с Discord.py

Я делаю бота для Discord, используя Discord.py, и постоянно сталкиваюсь с этой ошибкой, когда пользователь запрашивает воспроизведение песни, если она длится дольше определенного времени. Песня прерывается, а затем проигрыватель воспроизводит следующую песню в очереди.

Я использую state.voice.create_ytdl_player() по умолчанию, включенный в библиотеку.

Ошибка:

[tls @ 0000000000eb9ca0] Unable to read from socket
[matroska,webm @ 0000000000eb7620] Read error
[tls @ 0000000000eb9ca0] Unable to read from socket
    Last message repeated 1 times
[tls @ 0000000000eb9ca0] Failed to send close message
WARNING: unable to extract uploader nickname
WARNING: unable to extract uploader nickname

Мой код:

@commands.command(pass_context=True, no_pm=True)
async def play(self, ctx, *, song : str):
    state = self.get_voice_state(ctx.message.server)
    opts = {
        'default_search': 'auto',
        'quiet': True,
    }

    if state.voice is None:
        success = await ctx.invoke(self.summon)
        if not success:
            return

    try:
        tmp = await self.bot.send_message(ctx.message.channel, "Searching for `" + song + "`...")
        player = await state.voice.create_ytdl_player(song, ytdl_options=opts, after=state.toggle_next)
    except Exception as e:
        print(debugging.ERROR + "ERROR in 'play' command: " + str(e))
        fmt = ':warning: An error occurred while processing this request: ```py\n{}: {}\n```'
        await self.bot.send_message(ctx.message.channel, fmt.format(type(e).__name__, e))
    else:
        player.volume = 0.6
        entry = VoiceEntry(ctx.message, player)
        await self.bot.edit_message(tmp, ':notes: Added ' + str(entry) + ' to the song queue.')
        await state.songs.put(entry)

person Nanomotion    schedule 04.04.2017    source источник


Ответы (1)


Проведя небольшое исследование, я обнаружил, что добавление before_options="-reconnect 1 -reconnect_streamed 1 -reconnect_delay_max 5" к функции create_ytdl_player исправляет отключение музыки.

  • -reconnect 1 указывает проигрывателю повторно подключиться в случае сбоя подключения к видео. То же самое с -reconnect_streamed 1, за исключением потока.
  • -reconnect_delay_max 5 устанавливает тайм-аут повторного подключения на 5 секунд. Если повторное подключение не удается, оно прерывается.
person Nanomotion    schedule 12.06.2017