I’m writing a Telegram bot using aiogram 3.11. During the execution of my code, I create objects of a class, and I need to pass these objects between different handlers. I’ve been advised to look into middlewares, but I’m not sure how to implement this. Could someone explain the best way to share objects between handlers in aiogram 3.11? An example would be greatly appreciated.
I tried to use middlewares:
class InnerCallbackQueryUniqueClientMiddleware(BaseMiddleware):
async def __call__(
self,
handler: Callable[[TelegramObject, Dict[str, Any]], Awaitable[Any]],
event: types.Message,
data: Dict[str, Any]) -> Any:
user_data = UsersTable.get_or_none(UsersTable.tg_id == event.from_user.id)
if user_data:
tg_user = TgUser(
tg_id=user_data.tg_id,
name=user_data.name,
surname=user_data.surname,
username=user_data.username,
confirm_code=user_data.confirm_code,
is_attached=user_data.is_attached)
data["tg_user"] = tg_user
return await handler(event, data)
but handler:
@dp.message(StateFilter(State.START))
async def handler_button_activate(message: types.Message, state: FSMContext, data: Dict[str, Any]):
pass
causes
TypeError: handler_button_activate() missing 1 required positional argument: 'data'