После 10 секунд бот выключает песню и молчит

@bot.event
async def on_ready():
    print("Бот готов к работе")


@bot.command()
async def play(ctx, url):
    channel = ctx.author.voice.channel
    if not channel:
        await ctx.send("Вы должны быть подключены к голосовому каналу, чтобы использовать эту команду.")
        return

    ydl_opts = {
        'format': 'bestaudio/best',
        'postprocessors': [{
            'key': 'FFmpegExtractAudio',
            'preferredcodec': 'mp3',
            'preferredquality': '192',
        }],
    }

    with youtube_dl.YoutubeDL(ydl_opts) as ydl:
        info = ydl.extract_info(url, download=True)
        filename = ydl.prepare_filename(info)

    voice_client = await channel.connect()

    voice_client.play(discord.FFmpegPCMAudio(filename))
    await ctx.send(f"Сейчас играет: {info['title']}")

    
    duration = info.get('duration', 0)
    await asyncio.sleep(duration)
    await voice_client.disconnect()


@bot.command()
async def leave(ctx):
    voice_client = ctx.voice_client
    await voice_client.disconnect()

бот отключается с текстом якобы все в порядке " discord.player: ffmpeg process 1736 successfully terminated with return code of 0."


Ответы (2 шт):

Автор решения: Jocker

Добавьте к вызову метода discord.FFmpegPCMAudio второй аргумент с опциями: discord.FFmpegPCMAudio(filename, **ffmpeg_options)

А сами опции должны быть такими:

ffmpeg_options = {
    "before_options": "-reconnect 1 -reconnect_streamed 1 -reconnect_delay_max 5 -nostdin",
    "options": "-vn",
}

Это позволит поддерживать постоянное соединение и не прерывать поток.

→ Ссылка
Автор решения: Unclear

Попробуйте использовать FFmpegOpusAudio:

fpg_opt = {"before_options":"-reconnect 1 -reconnect_streamed 1 -reconnect_delay_max 100", "options":"-vn"}
voice_client.play(discord.FFmpegOpusAudio(source=source, bitrate=320, **fpg_opt))

На своём опыте проверил, что FFmpegOpusAudio лучше FFmpegPCMAudio в плане качества воспроизведения. Если не сработает, напишите в комментарии, постараюсь быстро ответить.

→ Ссылка