Как впихнуть два метода в одну функцию?
У меня есть бот на 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)