Compare commits

..

3 Commits

Author SHA1 Message Date
34308f2cac Feat: started main user interface 2025-01-02 22:01:29 +03:00
7093f7452d Feat: added user middleware 2025-01-02 22:01:05 +03:00
e73bc6569b Feat: removed unnecessary bot 2025-01-02 22:00:44 +03:00
7 changed files with 60 additions and 12 deletions

View File

@@ -1,4 +1,3 @@
import asyncio
import logging import logging
from sys import exit from sys import exit
@@ -21,5 +20,5 @@ if __name__ == "__main__":
# Start bot # Start bot
bot = NwXrayBot(config.bot_token.get_secret_value()) bot = NwXrayBot(config.bot_token.get_secret_value())
bot.include_routers(HelloHandler(bot), MenuHandler(bot)) bot.include_routers(HelloHandler(), MenuHandler())
uvloop.run(bot.start(skip_updates=True)) uvloop.run(bot.start(skip_updates=True))

View File

@@ -1,5 +1,7 @@
from aiogram import Bot, Dispatcher, Router from aiogram import Bot, Dispatcher, Router
from nwxraybot.middlewares import UserMiddleware
from .meta import Handler from .meta import Handler
@@ -7,6 +9,7 @@ class NwXrayBot:
def __init__(self, token: str) -> None: def __init__(self, token: str) -> None:
self.bot = Bot(token=token) self.bot = Bot(token=token)
self.dp = Dispatcher() self.dp = Dispatcher()
self.dp.message.middleware(UserMiddleware())
def include_routers(self, *routers: Handler): def include_routers(self, *routers: Handler):
for router in routers: for router in routers:

View File

@@ -1,13 +1,33 @@
from aiogram import types import json
from datetime import datetime
from aiogram import F, types
from aiogram.enums import ParseMode
from aiogram.filters import Command from aiogram.filters import Command
from aiogram.types import (CallbackQuery, InlineKeyboardButton,
InlineKeyboardMarkup)
from nwxraybot.meta import Handler from nwxraybot.meta import Handler
from nwxraybot.models import User
class HelloHandler(Handler): class HelloHandler(Handler):
def __init__(self, bot) -> None: def __non_admin_main_menu(self):
super().__init__(bot) markup = [[
InlineKeyboardButton(text="Обновить данные",
callback_data='update')
]]
return InlineKeyboardMarkup(
inline_keyboard=markup
)
def __init__(self) -> None:
super().__init__()
@self.router.message(Command("start")) @self.router.message(Command("start"))
async def hello(message: types.Message): async def hello(message: types.Message):
await message.reply("Приветствуем в боте NwXray! Здесь вы сможете получить информацию о своем подключении к NwXray") await message.reply("Приветствуем в боте NwXray! Здесь вы сможете получить информацию о своем подключении к NwXray", reply_markup=self.__non_admin_main_menu())
@self.router.callback_query(F.data == 'update')
async def update_data(callback: CallbackQuery):
await callback.message.delete()

View File

@@ -6,8 +6,8 @@ from nwxraybot.models import User
class MenuHandler(Handler): class MenuHandler(Handler):
def __init__(self, bot) -> None: def __init__(self) -> None:
super().__init__(bot) super().__init__()
@self.router.message() @self.router.message()
async def menu(message: types.Message) -> None: async def menu(message: types.Message) -> None:

View File

@@ -1,12 +1,15 @@
from typing import Optional
from aiogram import Bot, Router from aiogram import Bot, Router
class Handler: class Handler:
bot: Bot bot: Optional[Bot]
router: Router router: Router
def __init__(self, bot) -> None: def __init__(self, bot: Optional[Bot] = None) -> None:
assert isinstance(bot.bot, Bot) if bot:
assert isinstance(bot.bot, Optional[Bot])
self.bot = bot.bot self.bot = bot.bot
self.router = Router() self.router = Router()

View File

@@ -0,0 +1 @@
from nwxraybot.middlewares.user import UserMiddleware

View File

@@ -0,0 +1,22 @@
from typing import Any, Awaitable, Callable, Dict, Optional
from aiogram import BaseMiddleware
from aiogram.enums import ChatType
from aiogram.types import Message
from nwxraybot.models import User
class UserMiddleware(BaseMiddleware):
def __init__(self) -> None:
pass
async def __call__(self, handler: Callable[[Message, Dict[str, Any]], Awaitable[Any]], event: Message, data: Dict[str, Any]) -> Any:
if event.chat.type != ChatType.PRIVATE:
return None
user: Optional[User] = User.select().where(
User.id == event.from_user.id).first()
if user is None:
await event.answer("Вы не зарегистрированы в системе, обратитесь к админам за доступом!")
return None
return await handler(event, data)