From 04c7616661c26d9115a4271449e561f28a561fe9 Mon Sep 17 00:00:00 2001 From: Zakhar Izmaylov Date: Sat, 9 Nov 2024 12:20:07 +0300 Subject: [PATCH] Add middleware logging --- bot.py | 3 +++ middlewares/logging.py | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+) create mode 100644 middlewares/logging.py diff --git a/bot.py b/bot.py index 5fdfc304..48e21d5f 100644 --- a/bot.py +++ b/bot.py @@ -13,6 +13,7 @@ from handlers.admin import admin, admin_panel, user_editor from handlers.keys import key_management, keys from handlers.payment import freekassa_pay, yookassa_pay from middlewares.admin import AdminMiddleware +from middlewares.logging import UserActivityMiddleware dp.include_router(admin.router) dp.include_router(admin_panel.router) @@ -28,3 +29,5 @@ dp.include_router(notifications.router) dp.message.middleware(AdminMiddleware()) dp.callback_query.middleware(AdminMiddleware()) +dp.message.middleware(UserActivityMiddleware()) +dp.callback_query.middleware(UserActivityMiddleware()) diff --git a/middlewares/logging.py b/middlewares/logging.py new file mode 100644 index 00000000..253eb329 --- /dev/null +++ b/middlewares/logging.py @@ -0,0 +1,36 @@ +from typing import Any, Awaitable, Callable, Dict + +from aiogram import BaseMiddleware +from aiogram.types import CallbackQuery, Message, TelegramObject +from loguru import logger + +class UserActivityMiddleware(BaseMiddleware): + async def __call__( + self, + handler: Callable[[TelegramObject, Dict[str, Any]], Awaitable[Any]], + event: TelegramObject, + data: Dict[str, Any], + ) -> Any: + user_id = None + username = None + action = None + + if isinstance(event, Message): + user_id = event.from_user.id + username = event.from_user.username + action = f"Message: {event.text}" + elif isinstance(event, CallbackQuery): + user_id = event.from_user.id + username = event.from_user.username + action = f"Callback: {event.data}" + + # Логируем действие пользователя + logger.info( + f"User Activity - " + f"User ID: {user_id}, " + f"Username: {username}, " + f"Action: {action}" + ) + + # Продолжаем выполнение обработчика + return await handler(event, data) \ No newline at end of file