Как остановить проигрывание музыки в музыкальном боте discord.py, если используется аргумент after?
Делаю музыкального бота на Python с помощью discord.py. Сам бот уже формирует какую-никакую очередь, проигрывает музыку. Однако столкнулся с такой проблемой:
async def playSong(ctx, voice, path):
print("начинаю играть")
if not voice.is_playing():
# Если ничего не играет, играем первую песню из очереди
queue = sl.getQueue(path)
if len(queue) == 0:
return
print("ничего не играет")
print(queue)
# Если мы дошли до сюда, то список не пуст, значит нужно проиграть
# первую песню списка, после чего удалить её из него
song = discord.FFmpegPCMAudio(path + queue[0] + ".mp3")
if not os.path.exists(path + queue[0] + ".mp3"):
# Эта проверка нужна на случай, если трек ещё не успел скачаться
print(" *[Dimebag] Система не может найти файл " + queue[0] + ".mp3" + " и пытается снова")
await asyncio.sleep(3)
await playSong(ctx, voice, path)
return
# Если мы здесь, то значит композиция найдена, начинаем проигрывание
try:
voice.play(song, after = lambda e: run(playSong(ctx, voice, path)))
except:
print("*[Dimebag] Произошла незначительная ошибка при использовании функции playnow")
print(" Удалили 1 элемент списка")
# Обновляем список треков, исключая проигрываемый
new_queue = queue[1:]
sl.updateQueue(path, new_queue)
Чтобы играть песни по очереди у меня есть вот такая закольцованная функция. Она работает, однако у меня есть команда /stop, которая должна остановить всё воспроизведение. Проблема как раз-таки в аргументе after.
Например, в очереди у нас 3 песни. Причём первая из них уже играет, а остальные 2 хранятся в очереди. Если я пропишу команду /stop, то остановится проигрывание первой из них, но так как при начале её проигрывания ввелась функция в параметр after, то после своего завершения, она незамедлительно начинает воспроизводить вторую песню.
Мне же нужно, чтобы они все перестали играть. Можно ли как-то этого добиться? Честно, уже голову сломал, пока ничего дельного не приходит. Буду очень благодарен за подсказку.