Я работаю над ботом Discord и пытаюсь реализовать проигрыватель musi c. Я использую пакеты Discord и youtube-dl. Это функция, которая обрабатывает команду воспроизведения (это все еще прототип):
@client.command(brief='Plays the song from the url.')
async def play(ctx, url):
voice = get(client.voice_clients, guild=ctx.guild)
if not voice.is_playing():
try:
if 'song.mp3' in os.listdir(curr_dir):
os.remove(os.path.join(curr_dir, 'song.mp3'))
await download_to_mp3(url)
voice.play(discord.FFmpegPCMAudio(os.path.join(curr_dir, 'song.mp3')))
voice.volume = 100
except youtube_dl.DownloadError:
await ctx.send('Invalid url.')
, а также функция download_to_mp3 ():
async def download_to_mp3(url):
opts = {
'outtmpl': os.path.join(curr_dir, 'song.webm'),
'format': 'bestaudio/best',
'postprocessors': [{
'key': 'FFmpegExtractAudio',
'preferredcodec': 'mp3',
'preferredquality': '192',
}],
}
with youtube_dl.YoutubeDL(opts) as ydl:
ydl.download([url])
Я хотел, чтобы она работала в таком Таким образом, пока загрузка завершается, я все еще могу использовать другие функции бота. Насколько я понимаю, оператор await гласит: «Приостановите выполнение функции play (), сделайте что-нибудь еще, пока я жду. Когда download_to_mp3 завершится, продолжайте». Однако кажется, что он читает команды, выданные во время загрузки, но выполняет их только после завершения загрузки. Как заставить его выполнять команды во время загрузки?