После 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 в плане качества воспроизведения. Если не сработает, напишите в комментарии, постараюсь быстро ответить.