Как остановить цикл при нажатии на кнопку aiogram?
У меня есть цикл, в нем с определенной периодичностью отправляются сообщения в бота aiogram в Telegram. При отправке сообщения появляются 2 кнопки: одна ссылкой, другая >>> должна останавливать цикл. Как мне обработать кнопку так, чтобы после ее нажатия цикла отправки сообщений прекратился.
Вот сам цикл:
for i in range(12):
# можно просто callback ниже прописать и все работать должно
await asyncio.sleep(5)
await bot.send_message(callback_query.from_user.id,
f"Напоминание:\nУ вас есть скидка {db.get_sale(callback_query.from_user.id)}% на первую покупку по промокоду {db.get_promocode(callback_query.from_user.id)} на {db.get_style(callback_query.from_user.id)} набор\n\nУ вас есть скидка 15% на первое продление по {db.get_promocode(callback_query.from_user.id)} промокуду", reply_markup=keybards.TrueMenu)
А это кнопки
TrueMenu = InlineKeyboardMarkup(row_width=3)
TrueBtn1 = InlineKeyboardButton(text="Купить", url="https://t.me/CoolHead_admin")
TrueBtn2 = InlineKeyboardButton(text="Уже купил", callback_data="TrueMenu_2")
TrueBtn3 = InlineKeyboardButton(text="Уже продлил", callback_data="TrueMenu_3")
TrueMenu.insert(TrueBtn1).insert(TrueBtn2).insert(TrueBtn3)
Я пробовал хендлер с Callback настроить, но что то не вышло!
Ответы (1 шт):
Автор решения: Андрей
→ Ссылка
stop_flag = False # инициализация флага
for i in range(12):
if stop_flag: # проверка на флаг
break # если флаг установлен, выходим из цикла
await asyncio.sleep(5)
await bot.send_message(callback_query.from_user.id,
f"Напоминание:\nУ вас есть скидка {db.get_sale(callback_query.from_user.id)}% на первую покупку по промокоду {db.get_promocode(callback_query.from_user.id)} на {db.get_style(callback_query.from_user.id)} набор\n\nУ вас есть скидка 15% на первое продление по {db.get_promocode(callback_query.from_user.id)} промокуду", reply_markup=keybards.TrueMenu)
# хэндлер на кнопку "Уже купил"
@dp.callback_query_handler(text='TrueMenu_2')
async def handle_true_menu_2(callback_query: CallbackQuery):
global stop_flag # обращаемся к глобальной переменной
stop_flag = True # устанавливаем флаг
await bot.send_message(callback_query.from_user.id, "Остановка цикла...")
Если флаг в асинхронном коде - его нужно добавлять в БД к конкретному пользователю