Files
Solo_bot/middlewares/admin.py
T
2024-11-09 10:36:16 +03:00

58 lines
1.9 KiB
Python

from functools import wraps
from typing import Any, Awaitable, Callable, Dict
from aiogram import BaseMiddleware
from aiogram.types import CallbackQuery, Message, TelegramObject
from config import ADMIN_ID
class AdminMiddleware(BaseMiddleware):
async def __call__(
self,
handler: Callable[[TelegramObject, Dict[str, Any]], Awaitable[Any]],
event: TelegramObject,
data: Dict[str, Any],
) -> Any:
# Проверяем, является ли пользователь администратором
user_id = None
if isinstance(event, Message):
user_id = event.from_user.id
elif isinstance(event, CallbackQuery):
user_id = event.from_user.id
if user_id not in int(ADMIN_ID):
data["is_admin"] = False
else:
data["is_admin"] = True
return await handler(event, data)
def admin_only():
def decorator(func):
@wraps(func)
async def wrapper(*args, **kwargs):
# Извлекаем объект события (Message или CallbackQuery)
event = args[0]
# Определяем ID пользователя
user_id = event.from_user.id if hasattr(event, "from_user") else None
if user_id not in int(ADMIN_ID):
# Можно отправить сообщение или просто return
if isinstance(event, Message):
await event.answer("У вас нет доступа к этой команде.")
elif isinstance(event, CallbackQuery):
await event.answer(
"У вас нет доступа к этому действию.", show_alert=True
)
return None
return await func(*args, **kwargs)
return wrapper
return decorator