Как впихнуть два метода в одну функцию?

У меня есть бот на aiogram. Задача бота принимать в себя данные от пользователей. Я не хочу убирать концепцию callback'a в боте но... инлайн сообщения требуют аргумента в функции

async def checkname(query: CallbackQuery):

Но так как бот принимает на себя вводимые данные, то он должен читать текст сообщений пользователей. Но тут необходим:

async def checkname(message: types.Message):
     msg = message.text

Но так как аио не принимает в себя два аргумента функций одновременно, я задался вопросом - каким образом можно запихнуть в одну функцию И callback И message


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

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

Что если попробовать функцию внутри функции

async def checkname(query: CallbackQuery):
async def checkname_2(message: types.Message):
msg = message.text
return checkname_2
→ Ссылка
Автор решения: oleksandrigo

Штош. Вот вам небольшой пример кода, как должно работать то что вы хотите. (вроде)

from aiogram import Bot, Dispatcher, executor, types
from aiogram.contrib.fsm_storage.memory import MemoryStorage
from aiogram.dispatcher.filters.state import StatesGroup, State
from aiogram.types import InlineKeyboardMarkup, InlineKeyboardButton

from data import config

bot = Bot(token=config.BOT_TOKEN)
storage = MemoryStorage()
dp = Dispatcher(bot, storage=storage)


class InputData(StatesGroup):
    input_fio = State()


@dp.message_handler(commands=["start"])
async def start(message: types.Message):
    markup = InlineKeyboardMarkup().add(InlineKeyboardButton("ввести фио", callback_data="fio_input"))
    await message.answer("привет вот клавиатура", reply_markup=markup)


@dp.callback_query_handler(text="fio_input")
async def fio_call(call: types.CallbackQuery):
    await call.answer()
    await call.message.answer("Введите ваше ФИО")
    await InputData.input_fio.set()


@dp.message_handler(state=InputData.input_fio)
async def fio_input(message: types.Message):
    await message.answer(f"Ваше ФИО - {message.text}")
    

if __name__ == '__main__':
    executor.start_polling(dp, skip_updates=True)
→ Ссылка