Aiogram 3
Не нашел как можно получить callback и записать его в state, поэтому решил сделать примитивно (тем более там всего 4 варианта) и обработать каждый вариант. Но после этого мне нужно записать полученную категорию куда - нибудь, чтобы после этого я мог использовать ее в следующей функции расчета стоимости.
from aiogram import Router, F
from aiogram.types import CallbackQuery, Message
from aiogram.fsm.context import FSMContext
from aiogram.fsm.state import StatesGroup, State
from app.keyboards import calculation as kb
from app.texts import calculation as txt
router = Router()
choosed_category = ''
class CalculateCost(StatesGroup):
choosing_cost = State()
@router.callback_query(F.data == 'calculation')
async def calculation(callback: CallbackQuery):
await callback.answer()
await callback.message.answer(txt.category, reply_markup=kb.category)
@router.callback_query(F.data == 'shirt_shorts')
async def ss(callback: CallbackQuery, state: FSMContext):
global choosed_category
choosed_category = callback.data
await callback.answer()
await callback.message.answer('Ты выбрал(а) категорию Футболка / Шорты \n' + txt.calculation)
await state.set_state(CalculateCost.choosing_cost)
@router.callback_query(F.data == 'sweatshirt_pants')
async def sp(callback: CallbackQuery, state: FSMContext):
global choosed_category
choosed_category = callback.data
await callback.answer()
await callback.message.answer('Ты выбрал(а) категорию Толстовка / Штаны \n' + txt.calculation)
await state.set_state(CalculateCost.choosing_cost)
@router.callback_query(F.data == 'footwear_outerwear')
async def fo(callback: CallbackQuery, state: FSMContext):
global choosed_category
choosed_category = callback.data
await callback.answer()
await callback.message.answer('Ты выбрал(а) категорию Обувь / Верхняя одежда \n' + txt.calculation)
await state.set_state(CalculateCost.choosing_cost)
@router.callback_query(F.data == 'socks_underwear')
async def su(callback: CallbackQuery, state: FSMContext):
global choosed_category
choosed_category = callback.data
await callback.answer()
await callback.message.answer('Ты выбрал(а) категорию Носки / Нижнее белье \n' + txt.calculation)
await state.set_state(CalculateCost.choosing_cost)
@router.message(CalculateCost.choosing_cost)
async def calculate(message: Message, state: FSMContext):
try:
cost = int(message.text)
if choosed_category == 'shirt_shorts':
cost = cost * 1
elif choosed_category == 'sweatshirt_pants':
cost = cost * 2
elif choosed_category == 'footwear_outerwear':
cost = cost * 3
elif choosed_category == 'socks_underwear':
cost = cost * 4
await message.answer(txt.calculate[0] + '<u>' + str(cost) + '</u>' + txt.calculate[1], reply_markup=kb.calculate)
await state.clear()
except ValueError:
await message.answer(txt.calculate_wrong)
await state.set_state(CalculateCost.choosing_cost)