FSM aiogram Как сделать правильно?

Всем привет!
Хочу сделать так:
1)Бот отправляет инлайн клавиатуру с названиями корпусов
2)Пользователь выбирает корпус
3)Бот просит ввести номер аудитории с клавиатуры
4)К примеру, пользователь ввел "233", т.к начинается с цифры "2", бот отправит фотографию 2го этажа.

Инлайн клавиатура:

kb_student = InlineKeyboardMarkup(row_width=1).add(
        InlineKeyboardButton(text='Студенческая жизнь', callback_data='culture')) \
        .add(InlineKeyboardButton(text='Учебный процесс', callback_data='ucheba')) \
        .add(InlineKeyboardButton(text='Навигация в кампусе', callback_data='gps')) \
        .add(InlineKeyboardButton(text='Навигация в корпусах', callback_data='nav'))

kb_korpusa = InlineKeyboardMarkup(row_width=4).row(
        InlineKeyboardButton(text='Главный корпус', callback_data='korp_gk')).row(
        InlineKeyboardButton(text='Корпус №1', callback_data='korp_1'))

Вот часть кода, которая отвечает за это:

class number(StatesGroup):
    number_of_korpus = State()
    number_audit = State()


@dp.message_handler(commands=['start', 'help'])
async def command_start(message: types.Message):
    await message.answer(f'Привет!\n'
                         'Я - твой личный помощник.\n'
                         'И я помогу тебе в твоей адаптации.\n', reply_markup=kb_student)
    await message.delete()

@dp.callback_query_handler(text='nav')
async def nav_call(callback: types.CallbackQuery):
    await number.number_of_korpus.set()
    await callback.message.answer('Выберите корпус', reply_markup=kb_korpusa)


@dp.callback_query_handler(state=number.number_of_korpus)
async def audit_(callback: types.CallbackQuery, state: FSMContext):
    async with state.proxy() as data:
        data['number_of_korpus'] = callback.message.text
    await number.next()
    await callback.message.answer('С помощью клавиатуры введите номер аудитории')


@dp.message_handler(state=number.number_audit)
async def naviga(callback: types.CallbackQuery, state: FSMContext):
    if callback.data == Text(startswith='1'):
        await bot.send_photo(callback.message.chat.id, photo=open("путь к файлу"))

Ответы (1 шт):

Автор решения: oleksandrigo

Пробуйте

class InputClassroomNumber(StatesGroup):
    number_classroom = State()


@dp.message_handler(commands=['start', 'help'])
async def command_start(message: types.Message):
    kb_student = InlineKeyboardMarkup(row_width=1).add(
        InlineKeyboardButton(text='Студенческая жизнь', callback_data='culture')) \
        .add(InlineKeyboardButton(text='Учебный процесс', callback_data='ucheba')) \
        .add(InlineKeyboardButton(text='Навигация в кампусе', callback_data='gps')) \
        .add(InlineKeyboardButton(text='Навигация в корпусах', callback_data='nav'))
    await message.answer(text=f'Привет!\n'
                              f'Я - твой личный помощник.\n'
                              f'И я помогу тебе в твоей адаптации.\n',
                         reply_markup=kb_student)
    await message.delete()


@dp.callback_query_handler(text='nav')
async def nav_call(callback: types.CallbackQuery):
    kb_korpusa = InlineKeyboardMarkup(row_width=4).row(
        InlineKeyboardButton(text='Главный корпус', callback_data='korp:gk')).row(
        InlineKeyboardButton(text='Корпус №1', callback_data='korp:1'))
    await callback.message.answer('Выберите корпус', reply_markup=kb_korpusa)


@dp.callback_query_handler(text_startswith='korp:')
async def corp_choise(callback: types.CallbackQuery, state: FSMContext):
    async with state.proxy() as data:
        data['corpus_name'] = callback.data
    await callback.message.answer('С помощью клавиатуры введите номер аудитории')
    await InputClassroomNumber.number_classroom.set()


@dp.message_handler(state=InputClassroomNumber.number_classroom)
async def naviga(message: types.Message, state: FSMContext):
    if message.text.isdigit():
        async with state.proxy() as data:
            data['classroom_number'] = message.text

        # в data["corpus_name"] у вас будет korp:gk или korp:1, помните это
        await message.answer(text=f'Вы выбрали аудиторию корпуса {data["corpus_name"]} '
                                  f'{data["classroom_number"]}')
        # так как нужно просто отсекать число то вот так
        floor = message.text[:1]
        # Как вы храните свои изображения я хз, потому вот как вариант для вас
        data_with_img = {
            "korp:gk": "path",
            "korp:1": "path2",
        }
        await message.answer_photo(photo=open('plans/' + data_with_img[data["corpus_name"]] + '.jpg', 'rb'))
        await state.reset_state(with_data=False)
→ Ссылка