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 aiogram.fsm.storage.memory import MemoryStorage
|
||||||
|
|
||||||
from config import API_TOKEN, CRYPTO_BOT_ENABLE, FREEKASSA_ENABLE, ROBOKASSA_ENABLE, STARS_ENABLE, YOOKASSA_ENABLE
|
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.database import DatabaseMiddleware
|
||||||
from middlewares.logging import LoggingMiddleware
|
from middlewares.logging import LoggingMiddleware
|
||||||
|
|
||||||
@@ -47,3 +48,6 @@ dp.callback_query.middleware(LoggingMiddleware())
|
|||||||
|
|
||||||
dp.message.middleware(DatabaseMiddleware())
|
dp.message.middleware(DatabaseMiddleware())
|
||||||
dp.callback_query.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()
|
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):
|
async def handle_admin_command(message: types.Message):
|
||||||
builder = InlineKeyboardBuilder()
|
builder = InlineKeyboardBuilder()
|
||||||
builder.row(
|
builder.row(
|
||||||
|
|||||||
+5
-1
@@ -15,7 +15,7 @@ router = Router()
|
|||||||
|
|
||||||
|
|
||||||
async def process_callback_view_profile(
|
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
|
chat_id = callback_query.from_user.id
|
||||||
username = callback_query.from_user.full_name
|
username = callback_query.from_user.full_name
|
||||||
@@ -52,6 +52,10 @@ async def process_callback_view_profile(
|
|||||||
builder.row(
|
builder.row(
|
||||||
InlineKeyboardButton(text="💰 Поддержать проект", callback_data="donate")
|
InlineKeyboardButton(text="💰 Поддержать проект", callback_data="donate")
|
||||||
)
|
)
|
||||||
|
if admin:
|
||||||
|
builder.row(
|
||||||
|
InlineKeyboardButton(text="🔧 Администратор", callback_data="admin")
|
||||||
|
)
|
||||||
builder.row(
|
builder.row(
|
||||||
InlineKeyboardButton(text="⬅️ Главное меню", callback_data="back_to_menu")
|
InlineKeyboardButton(text="⬅️ Главное меню", callback_data="back_to_menu")
|
||||||
)
|
)
|
||||||
|
|||||||
+7
-3
@@ -15,7 +15,7 @@ from logger import logger
|
|||||||
router = Router()
|
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")
|
image_path = os.path.join(os.path.dirname(__file__), "pic.jpg")
|
||||||
|
|
||||||
builder = InlineKeyboardBuilder()
|
builder = InlineKeyboardBuilder()
|
||||||
@@ -26,6 +26,10 @@ async def send_welcome_message(chat_id: int, trial_status: int):
|
|||||||
builder.row(
|
builder.row(
|
||||||
InlineKeyboardButton(text="👤 Личный кабинет", callback_data="view_profile")
|
InlineKeyboardButton(text="👤 Личный кабинет", callback_data="view_profile")
|
||||||
)
|
)
|
||||||
|
if admin:
|
||||||
|
builder.row(
|
||||||
|
InlineKeyboardButton(text="🔧 Администратор", callback_data="admin")
|
||||||
|
)
|
||||||
builder.row(
|
builder.row(
|
||||||
InlineKeyboardButton(text="📞 Техническая поддержка", url=SUPPORT_CHAT_URL),
|
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"))
|
@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}")
|
logger.info(f"Received start command with text: {message.text}")
|
||||||
if "referral_" in message.text:
|
if "referral_" in message.text:
|
||||||
referrer_tg_id = int(message.text.split("referral_")[1])
|
referrer_tg_id = int(message.text.split("referral_")[1])
|
||||||
@@ -66,7 +70,7 @@ async def start_command(message: Message):
|
|||||||
await message.answer("Вы уже зарегистрированы в системе!")
|
await message.answer("Вы уже зарегистрированы в системе!")
|
||||||
|
|
||||||
trial_status = await get_trial(message.from_user.id)
|
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")
|
@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
|
loguru
|
||||||
aiocryptopay
|
aiocryptopay
|
||||||
py3xui
|
py3xui
|
||||||
sqlalchemy
|
sqlalchemy
|
||||||
|
robokassa
|
||||||
Reference in New Issue
Block a user