feat: started proxy alerts

This commit is contained in:
2024-08-26 14:28:46 +03:00
parent dba5c60080
commit 2ebbde9f33
8 changed files with 121 additions and 2 deletions

View File

@@ -0,0 +1,8 @@
from aiogram import types
from aiogram.filters import Filter
class ProxyStatusFilter(Filter):
async def __call__(self, data: types.CallbackQuery) -> bool:
return data.data.startswith('proxy_status')

View File

@@ -0,0 +1,7 @@
from aiogram import types
from aiogram.filters import Filter
class RefreshProxyFilter(Filter):
async def __call__(self, data: types.CallbackQuery) -> bool:
return data.data.startswith('refresh_proxy_status')

View File

@@ -34,6 +34,11 @@ class NeuroApiRouter(Router):
self.message.register(handler.handler, handler.filter)
def add_callback_query_handler(self, callback: MessageHandlerABC, *args: Any):
handler = callback(self.bot, *args)
self.callback_query.register(handler.handler, handler.filter)
class Handler:
bot: Bot
@@ -71,4 +76,12 @@ class Handler:
args = handler[1:] if len(handler)>1 else []
self.router.add_message_handler(handler[0], *args)
else:
self.router.add_message_handler(handler)
self.router.add_message_handler(handler)
def add_callback_handlers(self, handlers: List[MessageHandlerABC] | List[Tuple[MessageHandlerABC] | Optional[Tuple[Any, ...]]]):
for handler in handlers:
if isinstance(handler, tuple):
args = handler[1:] if len(handler)>1 else []
self.router.add_callback_query_handler(handler[0], *args)
else:
self.router.add_callback_query_handler(handler)

View File

@@ -0,0 +1,17 @@
from datetime import datetime
from aiogram import types
from aiogram.utils.keyboard import InlineKeyboardBuilder
from handlers.filters.proxy_status import ProxyStatusFilter
from ..handler import MessageHandlerABC
class ProxyStatusCallback(MessageHandlerABC):
filter = ProxyStatusFilter()
async def _command(self, data: types.CallbackQuery):
builder = InlineKeyboardBuilder()
builder.button(text="Обновить статус🔄", callback_data="refresh_proxy_status")
date = datetime.now().strftime("%d.%m.%Y %H:%M:%S")
await self.bot.edit_message_text(f'{date} - Работаит', data.message.chat.id, data.message.message_id, reply_markup=builder.as_markup())

View File

@@ -0,0 +1,18 @@
from datetime import datetime
from aiogram import types
from aiogram.utils.keyboard import InlineKeyboardBuilder
from handlers.filters.refresh_proxy import RefreshProxyFilter
from ..handler import MessageHandlerABC
class RefreshProxyStatusCallback(MessageHandlerABC):
filter = RefreshProxyFilter()
async def _command(self, data: types.CallbackQuery):
builder = InlineKeyboardBuilder()
builder.button(text="Обновить статус🔄", callback_data="refresh_proxy_status")
date = datetime.now().strftime("%d.%m.%Y %H:%M:%S")
await self.bot.edit_message_text(f'{date} - Работаит', data.message.chat.id, data.message.message_id, reply_markup=builder.as_markup())

View File

@@ -0,0 +1,38 @@
import json
import os
from aiogram.filters import CommandStart
from aiogram.types import Message
from aiogram.utils.keyboard import InlineKeyboardBuilder
from neuroapi import neuroapi
from ..handler import MessageHandlerABC
class ProxyStartCommand(MessageHandlerABC):
filter = CommandStart()
async def _command(self, message: Message):
builder = InlineKeyboardBuilder()
builder.button(text="Статус прокси📝", callback_data="proxy_status")
is_admin = await neuroapi.admin.is_admin(message.from_user.id)
if is_admin:
builder.button(text="Всё плохо", callback_data="proxy_disable")
markup = None # builder.as_markup()
#TODO: Users to send list
users = dict()
if os.path.exists('users.json'):
with open('users.json', 'r') as f:
users = json.load(f)['users']
else:
with open('users.json', 'w+') as f:
json.dump({'users': [message.from_user.id]}, f)
await message.answer('Приветствуем, теперь вы будете получать оповещения о статусе прокси.', reply_markup=markup)

View File

@@ -0,0 +1,17 @@
from aiogram import Bot
from handlers.handler import Handler
from handlers.message_handlers.proxy.proxy_status_command import \
ProxyStatusCallback
from handlers.message_handlers.proxy.refresh_proxy_status_command import \
RefreshProxyStatusCallback
from handlers.message_handlers.proxy.start_command import ProxyStartCommand
from neuroapi.types import BotSettings as BotSettingsType
class ProxyCommands(Handler):
settings: BotSettingsType
def __init__(self, bot: Bot) -> None:
super().__init__(bot)
self.add_handlers([ProxyStartCommand])
self.add_callback_handlers([ProxyStatusCallback, RefreshProxyStatusCallback])

View File

@@ -9,6 +9,7 @@ from aiogram.fsm.storage.redis import RedisStorage
from redis import asyncio as redis
from handlers.admin_commands import AdminCommands
from handlers.proxy_commands import ProxyCommands
from handlers.user_commands import UserCommands
from neuroapi.config import GlobalConfig as Config
from neuroapi.types import NeuroApiBot
@@ -31,7 +32,7 @@ async def proxy_bot()->None:
logging.warning('Proxy bot needs token in environment')
return
bot = NeuroApiBot(config.proxy_token)
bot.include_router()
bot.include_router(ProxyCommands)
await bot.start()
async def main() -> None: