Не работает очередь вопроизведения музыки у дискорд бота, что делать?
Я попробовал разобраться как реализовать очередь воспроизведения, но зашёл в тупик, и как понимаю написал глупость. Буду рад любой помощи:>
Если это максимально глупая ошибка, то прошу без хейта, я только учусь.
songs = asyncio.Queue()
play_next_song = asyncio.Event()
async def audio_player_task():
while True:
play_next_song.clear()
current = await songs.get()
current.start()
await play_next_song.wait()
def toggle_next(self):
client.loop.call_soon_threadsafe(play_next_song.set)
@bot.command(name='play')
async def play(ctx, *, url: str):
if ctx.author.voice is None:
embed = discord.Embed(title=f'подключись к каналу', color=discord.Color.red())
bot_msg = await ctx.send(embed=embed)
await asyncio.sleep(5)
await bot_msg.delete()
voice_channel = ctx.author.voice.channel
if ctx.voice_client is None:
await voice_channel.connect()
else:
await ctx.voice_client.move_to(voice_channel)
ctx.voice_client.stop()
FFMPEG_OPTIONS = {'before_options': '-reconnect 1 -reconnect_streamed 1 -reconnect_delay_max 5', 'options': '-vn'}
YDL_OPTIONS = {'format':"bestaudio", 'noplaylist': True, 'default_search': 'auto', 'forceduration': True, 'quiet': True}
vc = ctx.voice_client
with youtube_dl.YoutubeDL(YDL_OPTIONS) as ydl:
info = ydl.extract_info(url, download=False)
if 'entries' in info:
url2 = info['entries'][0]["formats"][0]
elif 'formats' in info:
url2 = info["formats"][0]
url = info["webpage_url"]
stream_url = url2["url"]
source = await discord.FFmpegOpusAudio.from_probe(stream_url, **FFMPEG_OPTIONS)
vc.play(source, after = toggle_next)
await songs.put(vc.play)
client.loop.create_task(audio_player_task())