Discord music bot 10 секунд музыки и выключение звука

Музыка играет секунд 10-15 и выключается все время в одном месте практически введите сюда описание изображения

Вот логи, ошибок нет

введите сюда описание изображения

import discord
from discord.ext import commands
import asyncio
import yt_dlp

intents = discord.Intents.default()
intents.message_content = True

client = commands.Bot(command_prefix='w!', intents=intents)


FFMPEG_PATH = "E:\\ffmpeg-2024-03-14-git-2129d66a66-full_build\\bin\\ffmpeg.exe"  

discord.FFmpegPCMAudio.executable = FFMPEG_PATH


FFMPEG_OPTIONS = {
    'before_options': '-reconnect 1 -reconnect_streamed 1 -reconnect_delay_max 5',
    'options': '-vn',
}

@client.event
async def on_ready():
    print('Bot is online.')


@client.command()
async def join(ctx):
    if not ctx.author.voice or not ctx.author.voice.channel:
        await ctx.send('You are not in a voice channel!')
        return

    try:
        voice_channel = ctx.guild.voice_client
        voice_client = await voice_channel.connect()
        await ctx.send(f'Joined {voice_channel}')
    except discord.ClientException as e:
        await ctx.send(f"Failed to connect to voice channel: {e}")


@client.command()
async def play(ctx, url):
    if not ctx.author.voice or not ctx.author.voice.channel:
        await ctx.send('You are not in a voice channel!')
        return

    voice_channel = ctx.author.voice.channel

    try:
        voice_client = ctx.voice_client
        if voice_client is None:
            voice_client = await voice_channel.connect()

        ydl_opts = {
            'format': 'bestaudio/best',
            'postprocessors': [{
            'key': 'FFmpegExtractAudio',
            'preferredcodec': 'mp3',
            'preferredquality': '192',
            }],
            'outtmpl': 'downloads/%(title)s.%(ext)s',  
            'quiet': True,  # Меньше выводить информации в консоль
            'noplaylist': True,  # Не загружать плейлисты
            'nocheckcertificate': True,  # Не проверять сертификаты SSL
                   }


        with yt_dlp.YoutubeDL(ydl_opts) as ydl:
            info = ydl.extract_info(url, download=False)
            URL = info['url']

        if voice_client is not None:
            voice_client.play(discord.FFmpegPCMAudio(URL))
            await ctx.send(f'Now playing: {url}')

    except Exception as e:
        await ctx.send(f'An error occurred while playing the music: {e}')


@client.event
async def on_command_error(ctx, error):
    await ctx.send(f'An error occurred: {error}')


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

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

Он выполняется, но потом идет другой код и все.

Для решения проблемы вам нужно добавить задержку перед остановкой воспроизведения музыки. Для этого вы можете использовать функцию asyncio.sleep из модуля asyncio, чтобы приостановить выполнение кода на определенный период времени перед остановкой музыки.

    if voice_client is not None:
        voice_client.play(discord.FFmpegPCMAudio(URL))
        await ctx.send(f'Сейчас играет: {url}')

        # Добавление задержки в 10(примерно столько) секунд перед остановкой музыки
        await asyncio.sleep(10)
        voice_client.stop()
        await ctx.send('Музыка остановлена.')

except Exception as e:
    await ctx.send(f'Произошла ошибка при воспроизведении музыки: {e}')

Нуууу как то так

→ Ссылка