@nikto_211

Отмена цикла командой?

@bot.command()
async def xpfarmm(ctx, amount=10):
    await ctx.message.delete()
    for f in range(amount):

Как отменить данный цикл командой ?
  • Вопрос задан
  • 32 просмотра
Пригласить эксперта
Ответы на вопрос 1
@Vindicar
Простого способа нет, так как каждое обращение к команде создаст новый выполняющийся экземпляр xpfarmm().
Один способ - создать хранилище вида "id пользователя - логический признак". Например, словарь (dict). Каждому пользователю сопоставишь логическое значение. Если значения для id пользователя нет в словаре - пользователь не запустил команду. Если значение есть, и это True - команда выполняется. Если значение есть, и это False - команда должна быть остановлена.
Тогда при запуске команды xpfarm:
1. Убеждаешься, что id пользователя нет в словаре. Иначе отказ. (Пользователь ведь не может запустит ькоманду второй раз пока она работает?)
2. Вносишь True в словарь для id пользователя.
3. Входишь в цикл. На каждой итерации цикла проверяешь, не изменилось ли значение в словаре на False. Если изменилось, делаешь break.
4. По выходу из цикла удаляешь значение из словаря.

Убедись, что задержку в цикле делаешь через await asyncio.sleep(), иначе бот уснёт пока цикл не закончится, и не будет ни на что реагировать!

А чтобы отменить, делаешь отдельную команду, которая ищет id пользователя в словаре. Если оно есть - заменяет его на False.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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