В aiogram 3.2.0 вы можете использовать FSM (Finite State Machine) для обработки статусов пользователей и передачи данных между хендлерами.
Вот пример того, как можно реализовать это:
1. Сначала определите состояния пользователя в составном стейт-машине (FSM). Например, вам может понадобиться состояние "ожидание оплаты" и состояние "ожидание геолокации".
```python
from aiogram.dispatcher import FSMContext
from aiogram.dispatcher.filters import Command
# Определение состояний
class PaymentState(StatesGroup):
waiting_for_payment = State()
waiting_for_location = State()
# Обработчик команды /start
@dp.message_handler(Command('start'))
async def cmd_start(message: types.Message, state: FSMContext):
# Сохраняем состояние пользователя
await state.set_state(PaymentState.waiting_for_payment)
await message.reply('Пожалуйста, совершите оплату.')
# Обработчик успешной оплаты
@dp.message_handler(content_types=types.ContentType.SUCCESSFUL_PAYMENT, state=PaymentState.waiting_for_payment)
async def successful_payment(message: types.Message, state: FSMContext):
# Получаем данные об оплате
successful_payment_data = message.successful_payment
# Сохраняем данные об оплате в состоянии
await state.update_data(successful_payment_data=successful_payment_data)
# Переходим к следующему состоянию ожидания геолокации
await state.set_state(PaymentState.waiting_for_location)
await message.reply('Оплата прошла успешно. Теперь отправьте геолокацию.')
# Обработчик геолокации
@dp.message_handler(content_types=types.ContentType.LOCATION, state=PaymentState.waiting_for_location)
async def handle_location(message: types.Message, state: FSMContext):
# Получаем данные об оплате из состояния
data = await state.get_data()
successful_payment_data = data.get('successful_payment_data')
# Отправляем геолокацию и данные об оплате
await message.reply_location(latitude=message.location.latitude, longitude=message.location.longitude)
await message.reply(f'Данные об оплате: {successful_payment_data}')
```
2. Каждый раз, когда пользователь выполняет оплату, его состояние переходит в "ожидание оплаты" и все ожидающие оплату сообщения маркируются как "ожидающие" (например, сообщением `await message.reply('Пожалуйста, совершите оплату.')`). Когда пользователь совершает оплату, его состояние переходит в "ожидание геолокации" (в хендлере `successful_payment`), и он получает сообщение с просьбой отправить геолокацию (`await message.reply('Оплата прошла успешно. Теперь отправьте геолокацию.')`).
3. В хендлере `handle_location` пользователь получает геолокацию (`message.location`) и данные об оплате (`successful_payment_data`).
Это простой пример использования состояний FSM для передачи данных между хендлерами в aiogram. Вы также можете использовать SQLAlchemy для сохранения данных о пользователе и их получения в разных хендлерах.