Add admin middleware
This commit is contained in:
@@ -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())
|
||||
|
||||
@@ -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
@@ -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
@@ -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")
|
||||
|
||||
@@ -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
@@ -28,4 +28,5 @@ yookassa==3.3.0
|
||||
loguru
|
||||
aiocryptopay
|
||||
py3xui
|
||||
sqlalchemy
|
||||
sqlalchemy
|
||||
robokassa
|
||||
Reference in New Issue
Block a user