maty2go
@maty2go
Начинающий програмист Discord ботов.

Как остановить выполнение цикла командой?

Я добился выполнения цикла но теперь мне нужно его как то останавливать при помощи команды тому же боту.
@commands.command("boom")
    async def boom(self, ctx):
        if ctx.author.id == 962339486220558416:
                while True:
                    await asyncio.sleep(timi)
                    await ctx.send("ахахах !")       
        else:
            embed=nextcord.Embed(title= "**Аахахах, не не не ))** " , description="Теье низя так делать )\nКак ты вообще нашел это ? ", color=nextcord.Colour.random())
            await ctx.reply(embed=embed)


timi = int(1)

вооот
  • Вопрос задан
  • 289 просмотров
Решения вопроса 1
shurshur
@shurshur
Сисадмин, просто сисадмин...
Нужно вместо while True гонять цикл по какому-то другому условию, которое рано или поздно изменится. Например, можно завести глобальную переменную, задавать ей True в команде запуска, а в команде остановки выставлять False. Да, это очень дурацкое решение, так как нельзя будет использовать команду в разных каналах одновременно. Но как бы и задача сама по себе очень дурацкая, явно попытка научиться делать ну хоть что-нибудь...

Обычно если нужно делать какие-то регулярные задачи для бота, применяют другие решения. Например, расширение tasks или модуль aioschedule. Длинный цикл в обработчике команды - это часто не очень хорошее решение. Например, если бот будет перезапущен, цикл не будет запущен заново, а если задачи цикла хранятся в сохраняемой между перезапусками очереди - то перезапуск бота не будет влиять на этот функционал.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы