Недавно
AIOGRAM обновился, и поменял некоторые методы. Раньше переменные между хэндлерами можно было передавать через state,proxy() вроде бы. А сейчас я попросту не знаю как это реализовать).
Читал документацию -
https://docs.aiogram.dev/en/dev-3.x/dispatcher/fin... . Но к сожалению после нескольких попыток ничего не получилось, вываливаются ошибки).
Так всё же как реализовать
передачу данных в переменных между хэндлерами?
Отрезок кода где нужно реализовать передачу данных:
@dp.message(Form.pay_crypto_amount)
async def pay_amount(message: Message, state: FSMContext) -> None:
pay_amount_text = int(message.text)
await state.update_data(pay_crypto_amount = pay_amount_text)
await message.answer(f'— Amount: *{pay_amount_text} USD*\n\n* Select the currency you want to pay your bill with*', reply_markup=kb.crypto_choice, parse_mode='Markdown')
# Get amount in crypto by fiat summ
crypto = AioCryptoPay(token='MYTOKEN', network=Networks.MAIN_NET)
amount = await crypto.get_amount_by_fiat(summ=pay_amount_text, asset='USDT', target='USD')
invoice = await crypto.create_invoice(asset='USDT', amount=amount)
await state.clear()
while True:
if invoice.status == 'PAID':
await message.answer(f'GOOD')
elif invoice.status == 'EXPIRED':
# Инвойс истек, и платеж не был выполнен
await message.answer('Payment expired. Please try again.')
else:
# Платеж еще не выполнен, можно ожидать некоторое время и повторно проверить статус
await asyncio.sleep(30) # Подождите 30 секунд и проверьте статус снова
@dp.callback_query(F.data == 'usdt')
async def cancel(callback: CallbackQuery, state: FSMContext):
await callback.message.answer(ТУТ ДЛЯ ПРИМЕРА НУЖНО ПРОСТО ВЫВЕСТИ ПЕРЕМЕННУЮ pay_amount_text КОТОРУЮ Я ЗАДАЛ ВЫШЕ)
Нужно передать переменную pay_amount_text которую мы задаем в хэндлеры выше, в хэндлер который обрабатывает кнопку ("usdt"). Тут для примера я просто вывожу её назад в бота.