@ArtemMik
Python

Как передать state в другой handler?

У меня есть 2 хэндлера:

1) записывает message.text в state и передаёт ReplyKeyboards

2) реагирует на эти кнопки и записывает в переменные данные из state, но походу нельзя передать таким образом state, подскажите, я пожалуйста, как можно передать state во 2 хэндлер

Код:

class Cold_conductivity(StatesGroup):
    cold_conductivity = State()


@dp.message_handler(state=Cold_conductivity.cold_conductivity)
async def process_model(message: types.Message, state: FSMContext):
    try:
        async with state.proxy() as data:
            how_many_compressors = data['how_many_compressors']
            spiral_and_piston = data['spiral_and_piston']
            manufacturer = data['manufacturer']
            hull = data['hull']
            condensed = data['condensed']
            cold = data['cold']
            cold_conductivity = data['cold_conductivity'] = message.text
        if int(cold_conductivity) < 1:
            await bot.send_message(message.chat.id, "❌ Вы вводите слишком маленькое число кВт!")
        elif int(cold_conductivity) > 200:
            await bot.send_message(message.chat.id, "❌ Вы вводите слишком большое число кВт!")
        else:
            lst = [16.74, 21.24, 26.28, 28.62, 34.44, 38.85, 40.77, 44.70, 55.23]
            b = min(lst, key=lambda x: abs(int(cold_conductivity) - x))
            await bot.send_message(message.chat.id,
                                   f"Кол-во комперссоров: {how_many_compressors}\nСо спиралью или с поршнем: {spiral_and_piston}"
                                   f"\nПроизводитель: {manufacturer}\nВ корпусе или без: {hull}"
                                   f"\nС коненсатором: {condensed}\nТип холода: {cold}\nХолодопроводность: {b}")
            async with state.proxy() as data:
                data['min_conductivity'] = b
            await state.finish()
            await bot.send_message(message.chat.id, "Доп функции?", reply_markup=additional_functions)
    except ValueError:
        await bot.send_message(message.chat.id, "❌ Введите число!")


# Доп функции #


@dp.message_handler(text='Не добавлять')
async def panel(message: types.Message, state: FSMContext):
    async with state.proxy() as data:
        how_many_compressors = data['how_many_compressors']
        spiral_and_piston = data['spiral_and_piston']
        manufacturer = data['manufacturer']
        hull = data['hull']
        condensed = data['condensed']
        cold = data['cold']
        min_conductivity = data['min_conductivity']
    await bot.send_message(message.chat.id, f"{how_many_compressors}\n{spiral_and_piston}\n{manufacturer}\n{hull}\n{condensed}\n{min_conductivity}")
    await bot.send_message(message.chat.id, f"Напишите холодопроводность (от 1кВт до 200 Квт):")
    await Cold_conductivity.cold_conductivity.set()
  • Вопрос задан
  • 87 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы