В библиотеке aiogram, чтобы остановить цикл при нажатии на кнопку, вы можете использовать метод register_callback_query_handler() в сочетании с stop_propagation=True, чтобы предотвратить дальнейшую обработку событий.
# Создаем состояние, в котором мы ожидаем нажатие на кнопку
class MyStates(StatesGroup):
waiting_for_button = State()
# Обработчик команды /start
@dp.message_handler(commands=["start"])
async def start(message: types.Message):
# Отправляем сообщение с кнопкой
keyboard = types.InlineKeyboardMarkup()
button = types.InlineKeyboardButton(text="Остановить", callback_data="stop")
keyboard.add(button)
await message.answer("Нажмите на кнопку, чтобы остановить цикл", reply_markup=keyboard)
# Устанавливаем состояние "waiting_for_button"
await MyStates.waiting_for_button.set()
# Обработчик нажатия на кнопку
@dp.callback_query_handler(Text(equals="stop"), state=MyStates.waiting_for_button)
async def stop_callback(query: CallbackQuery, state: FSMContext):
# Останавливаем цикл и удаляем состояние
await query.answer("Цикл остановлен")
await state.finish()
# Вызываем stop_propagation=True, чтобы предотвратить дальнейшую обработку событий
return await query.message.edit_text("Вы остановили цикл", reply_markup=None, disable_web_page_preview=True, stop_propagation=True)
# Запускаем бота
if __name__ == "__main__":
executor.start_polling(dp, skip_updates=True)