Deploy: Get users command
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
ci/woodpecker/manual/woodpecker Pipeline was successful

This commit is contained in:
2025-01-17 14:25:47 +03:00

View File

@@ -16,6 +16,7 @@ from nwxraybot.fsm import BroadcastStates
from nwxraybot.meta import Handler from nwxraybot.meta import Handler
from nwxraybot.middlewares import AdminMiddleware from nwxraybot.middlewares import AdminMiddleware
from nwxraybot.models import User from nwxraybot.models import User
from nwxraybot.utils import get_subscription_info
class AdminHandler(Handler): class AdminHandler(Handler):
@@ -24,6 +25,17 @@ class AdminHandler(Handler):
self.router.message.middleware(AdminMiddleware()) self.router.message.middleware(AdminMiddleware())
help_text = """Список команда администратора:
`/adduser name url [01.01.1970 00:00]` - добавить пользователя
`/updateuser name 01.01.1970 00:00` - обновить информацию о пользователе
`/broadcast` - рассылка (пошагово)
`/get_users` - список пользователей
"""
@self.router.message(Command('ahelp'))
async def help(message: Message):
await message.reply(help_text, parse_mode=ParseMode.MARKDOWN)
@self.router.message(Command('adduser')) @self.router.message(Command('adduser'))
async def add_user(message: Message): async def add_user(message: Message):
mask = r"^(?P<name>[a-zA-Z0-9]+)\s(?P<url>vless://[^\s]+)($|\s(?P<date>[0-9]{2}\.[0-9]{2}\.[0-9]{4})\s(?P<time>[0-9]{2}\:[0-9]{2})$)" mask = r"^(?P<name>[a-zA-Z0-9]+)\s(?P<url>vless://[^\s]+)($|\s(?P<date>[0-9]{2}\.[0-9]{2}\.[0-9]{4})\s(?P<time>[0-9]{2}\:[0-9]{2})$)"
@@ -59,6 +71,24 @@ class AdminHandler(Handler):
query.execute() query.execute()
await message.answer('Информация о пользователе обновлена.') await message.answer('Информация о пользователе обновлена.')
@self.router.message(Command('get_users'))
async def get_users(message: Message):
def get_user_info(user: User) -> str:
date_str = "" if user.time is None else f'До: {
user.time.strftime("%d.%m.%Y %H:%M")} МСК\n'
return f"Информация о пользователе `{user.name}`:\n{date_str}Ссылка: `{user.url}`\ncode: `{user.code if user.code else 'None'}`\n\n"
users = User.select()
res = ""
for user in users:
res += get_user_info(user)
try:
await message.answer(res, parse_mode=ParseMode.MARKDOWN)
except Exception as e:
await message.answer(f"Error while getting users: {e}")
logging.error(f"Error while getting user {
user.telegram_id}: {e}")
@self.router.message(Command('broadcast')) @self.router.message(Command('broadcast'))
async def start_broadcast(message: Message, state: FSMContext): async def start_broadcast(message: Message, state: FSMContext):
await message.answer('Отправьте для рассылки') await message.answer('Отправьте для рассылки')