Создание Main хендлера в aiogram
У меня есть три хендлера, каждый отвечает за обработку конкретной команды. Я хочу немного упростить работу для пользователя.
К примеру, юзер шлет запрос в бот, main хендлер его ловит и выдает юзеру инлайн клавиатуру с тремя кнопками. И при нажатии на какую-либо кнопку на клавиатуре, отправлялся запрос в конкретный хендлер для обработки. То есть, нужно в callbackdata передать объект message (именно объект, не его текст, чтобы могли следующие хендлеры с ним работать).
Но он может не влезть из-за ограничения. Натолкните на мысль, можно ли решить такой вопрос без создания велосипеда?
Ответы (2 шт):
Рекомендую познакомиться с фабрикой калбека from aiogram.utils.callback_data import CallbackData
создаем фабрику vote
callback = CallbackData('vote', 'action', 'amount')
создаем калбек на фабрике vote
callback =callback.new(action=f'main', amount=f'open')
создаем клавиатуру
markup = types.InlineKeyboardMarkup()
указываем в калбек дату наш сгенерированный калбек
markup.add(types.InliteKeyboardButton(text='text', callback_data=callback))
отправляем сообщение await message.answer(text, reply_markup=markup)
сразу покажу как его словить
@dp.callback_query_handler(callback .filter(action='vote')) def .... Плохо могу передать мыслю читай по коду
Есть способ получить текущее сообщение в любом месте кода.
from aiogram import types
types.Message.get_current()
Ну и как аналоги
types.CallbackQuery.get_current()
types.User.get_current()
types.Chat.get_current()
Dispatcher.get_current()
Bot.get_current()
О а еще можно просто сохранить в стейт и потом вызвать его.
@dp.message_handler(commands=["start"])
async def start(message: types.Message, state: FSMContext):
async with state.proxy() as data:
data["whatever_data"] = message.text
await f()
async def f():
cur_state = dp.current_state()
async with cur_state.proxy() as data:
print(data)