Как получить данные из функции с CallbackQuery в функцию с message

Имеется функция main_analise, вызываемая с inline кнопки (все функции очень сильно упрощены для понимания)

async def main_analise(call: CallbackQuery, bot: Bot, state: FSMContext):
    await call.answer()
    context_data = await state.get_data()
        number = context_data_json.get('number') # получаем некое значение из машины состояний
    a = number + number 
    await bot.send_message(call.from_user.id, 'a', reply_markup=InlineKeyboardMarkup(inline_keyboard=[
                [InlineKeyboardButton(text='Указать нужное число', callback_data='choise_new')]]))


async def choise_new(call: CallbackQuery, bot: Bot, state: FSMContext): # вызывается с inline кнопки из функции выше , main_analise
    await call.answer()
    await bot.send_message(call.from_user.id, f'Введите новое число')
    await state.set_state(StepsAnalise.choise_new_get) # ожидаем ввода числа для перехода к ф-и choise_new_get


async def choise_new_get(message: Message, bot: Bot, state: FSMContext, call: CallbackQuery):
    number = message.text
    await state.update_data(number=number)
    await bot.send_message(message.from_user.id, f'Новое число введено')
    await main_analise(call, bot, state)

При таком написании аргументов ф-и choise_new_get вылетает ошибка missing 1 required positional argument: 'call' Если из аргументов убрать call: CallbackQuery, то ошибка та же

async def choise_new_get(call: CallbackQuery, bot: Bot, state: FSMContext):
    number = call.message.text  # нерабочий код
    await state.update_data(number=number)
    await bot.send_message(call.from_user.id, f'Новое число введено')
    await main_analise(call, bot, state)

при таком написании функции choise_new_get не удается получить значение number, да и функция callback уже не с inline кнопки запускается. Как в таких случаях поступать? Ниже хэндлеры

def router.analise_number(router: Router) -> None:
    router.callback_query.register(main_analise, F.data=='main_analise')
    router.callback_query.register(choise_new, F.data=='choise_new')
    router.message.register(choise_new_get, StepsAnalise.choise_new_get)

Возможно ли совместить в одной функции и call: CallbackQuery и message: Message и есть какое-то более интересное решение?


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