Add admin middleware

This commit is contained in:
Zakhar Izmaylov
2024-11-17 13:11:49 +03:00
parent 9c8fafabb1
commit c2d06e10b8
6 changed files with 43 additions and 6 deletions
+4
View File
@@ -2,6 +2,7 @@ from aiogram import Bot, Dispatcher, Router
from aiogram.fsm.storage.memory import MemoryStorage
from config import API_TOKEN, CRYPTO_BOT_ENABLE, FREEKASSA_ENABLE, ROBOKASSA_ENABLE, STARS_ENABLE, YOOKASSA_ENABLE
from middlewares.admin import AdminMiddleware
from middlewares.database import DatabaseMiddleware
from middlewares.logging import LoggingMiddleware
@@ -47,3 +48,6 @@ dp.callback_query.middleware(LoggingMiddleware())
dp.message.middleware(DatabaseMiddleware())
dp.callback_query.middleware(DatabaseMiddleware())
dp.message.middleware(AdminMiddleware())
dp.callback_query.middleware(AdminMiddleware())
+1 -1
View File
@@ -23,7 +23,7 @@ class UserEditorState(StatesGroup):
displaying_user_info = State()
@router.message(Command("admin"),F.data == "admin", IsAdminFilter())
@router.message(Command("admin"), F.data == "admin", IsAdminFilter())
async def handle_admin_command(message: types.Message):
builder = InlineKeyboardBuilder()
builder.row(
+5 -1
View File
@@ -15,7 +15,7 @@ router = Router()
async def process_callback_view_profile(
callback_query: types.CallbackQuery, state: FSMContext
callback_query: types.CallbackQuery, state: FSMContext, admin: bool
):
chat_id = callback_query.from_user.id
username = callback_query.from_user.full_name
@@ -52,6 +52,10 @@ async def process_callback_view_profile(
builder.row(
InlineKeyboardButton(text="💰 Поддержать проект", callback_data="donate")
)
if admin:
builder.row(
InlineKeyboardButton(text="🔧 Администратор", callback_data="admin")
)
builder.row(
InlineKeyboardButton(text="⬅️ Главное меню", callback_data="back_to_menu")
)
+7 -3
View File
@@ -15,7 +15,7 @@ from logger import logger
router = Router()
async def send_welcome_message(chat_id: int, trial_status: int):
async def send_welcome_message(chat_id: int, trial_status: int, admin: bool):
image_path = os.path.join(os.path.dirname(__file__), "pic.jpg")
builder = InlineKeyboardBuilder()
@@ -26,6 +26,10 @@ async def send_welcome_message(chat_id: int, trial_status: int):
builder.row(
InlineKeyboardButton(text="👤 Личный кабинет", callback_data="view_profile")
)
if admin:
builder.row(
InlineKeyboardButton(text="🔧 Администратор", callback_data="admin")
)
builder.row(
InlineKeyboardButton(text="📞 Техническая поддержка", url=SUPPORT_CHAT_URL),
)
@@ -53,7 +57,7 @@ async def send_welcome_message(chat_id: int, trial_status: int):
@router.message(Command("start"))
async def start_command(message: Message):
async def start_command(message: Message, admin: bool):
logger.info(f"Received start command with text: {message.text}")
if "referral_" in message.text:
referrer_tg_id = int(message.text.split("referral_")[1])
@@ -66,7 +70,7 @@ async def start_command(message: Message):
await message.answer("Вы уже зарегистрированы в системе!")
trial_status = await get_trial(message.from_user.id)
await send_welcome_message(message.chat.id, trial_status)
await send_welcome_message(message.chat.id, trial_status, admin)
@router.callback_query(F.data == "connect_vpn")
+24
View File
@@ -0,0 +1,24 @@
from typing import Any, Awaitable, Callable, Dict
from aiogram import BaseMiddleware
from aiogram.types import 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:
if isinstance(ADMIN_ID, list):
if event.from_user.id in ADMIN_ID:
data["admin"] = True
elif isinstance(ADMIN_ID, int):
if event.from_user.id == ADMIN_ID:
data["admin"] = True
else:
data["admin"] = False
return await handler(event, data)
+2 -1
View File
@@ -28,4 +28,5 @@ yookassa==3.3.0
loguru
aiocryptopay
py3xui
sqlalchemy
sqlalchemy
robokassa