Compare commits
3 Commits
5d6310e5a4
...
34308f2cac
| Author | SHA1 | Date | |
|---|---|---|---|
| 34308f2cac | |||
| 7093f7452d | |||
| e73bc6569b |
3
main.py
3
main.py
@@ -1,4 +1,3 @@
|
||||
import asyncio
|
||||
import logging
|
||||
from sys import exit
|
||||
|
||||
@@ -21,5 +20,5 @@ if __name__ == "__main__":
|
||||
|
||||
# Start bot
|
||||
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))
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
from aiogram import Bot, Dispatcher, Router
|
||||
|
||||
from nwxraybot.middlewares import UserMiddleware
|
||||
|
||||
from .meta import Handler
|
||||
|
||||
|
||||
@@ -7,6 +9,7 @@ class NwXrayBot:
|
||||
def __init__(self, token: str) -> None:
|
||||
self.bot = Bot(token=token)
|
||||
self.dp = Dispatcher()
|
||||
self.dp.message.middleware(UserMiddleware())
|
||||
|
||||
def include_routers(self, *routers: Handler):
|
||||
for router in routers:
|
||||
|
||||
@@ -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.types import (CallbackQuery, InlineKeyboardButton,
|
||||
InlineKeyboardMarkup)
|
||||
|
||||
from nwxraybot.meta import Handler
|
||||
from nwxraybot.models import User
|
||||
|
||||
|
||||
class HelloHandler(Handler):
|
||||
def __init__(self, bot) -> None:
|
||||
super().__init__(bot)
|
||||
def __non_admin_main_menu(self):
|
||||
markup = [[
|
||||
InlineKeyboardButton(text="Обновить данные",
|
||||
callback_data='update')
|
||||
]]
|
||||
return InlineKeyboardMarkup(
|
||||
inline_keyboard=markup
|
||||
)
|
||||
|
||||
def __init__(self) -> None:
|
||||
super().__init__()
|
||||
|
||||
@self.router.message(Command("start"))
|
||||
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()
|
||||
|
||||
@@ -6,8 +6,8 @@ from nwxraybot.models import User
|
||||
|
||||
|
||||
class MenuHandler(Handler):
|
||||
def __init__(self, bot) -> None:
|
||||
super().__init__(bot)
|
||||
def __init__(self) -> None:
|
||||
super().__init__()
|
||||
|
||||
@self.router.message()
|
||||
async def menu(message: types.Message) -> None:
|
||||
|
||||
@@ -1,13 +1,16 @@
|
||||
from typing import Optional
|
||||
|
||||
from aiogram import Bot, Router
|
||||
|
||||
|
||||
class Handler:
|
||||
bot: Bot
|
||||
bot: Optional[Bot]
|
||||
router: Router
|
||||
|
||||
def __init__(self, bot) -> None:
|
||||
assert isinstance(bot.bot, Bot)
|
||||
self.bot = bot.bot
|
||||
def __init__(self, bot: Optional[Bot] = None) -> None:
|
||||
if bot:
|
||||
assert isinstance(bot.bot, Optional[Bot])
|
||||
self.bot = bot.bot
|
||||
self.router = Router()
|
||||
|
||||
def __call__(self) -> Router:
|
||||
|
||||
1
nwxraybot/middlewares/__init__.py
Normal file
1
nwxraybot/middlewares/__init__.py
Normal file
@@ -0,0 +1 @@
|
||||
from nwxraybot.middlewares.user import UserMiddleware
|
||||
22
nwxraybot/middlewares/user.py
Normal file
22
nwxraybot/middlewares/user.py
Normal 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)
|
||||
Reference in New Issue
Block a user