Compare commits

...

6 Commits

Author SHA1 Message Date
0fa538d079 Feat: get users command
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
2025-01-17 14:24:41 +03:00
fed548e9e8 Feat: admin help command 2025-01-17 14:10:02 +03:00
3ad4c2ea3e First hotfix
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
ci/woodpecker/manual/woodpecker Pipeline was successful
2025-01-17 14:04:35 +03:00
e3c7f96693 Merge branch 'hotfix-start-command' 2025-01-17 13:52:33 +03:00
e82c392fc8 Hotfix: user deleting tg_id 2025-01-17 13:51:57 +03:00
0a844f7369 Deploy: First ever deploy
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
ci/woodpecker/manual/woodpecker Pipeline was successful
2025-01-17 13:20:41 +03:00
2 changed files with 39 additions and 3 deletions

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('Отправьте для рассылки')

View File

@@ -30,14 +30,20 @@ class HelloHandler(Handler):
user: Optional[User] = None user: Optional[User] = None
if len(data) == 2: if len(data) == 2:
code = data[1] code = data[1]
query = User.update(telegram_id=None).where( user = User.select().where(
User.telegram_id == message.from_user.id) User.telegram_id == message.from_user.id).first()
query.execute() if user is not None:
await message.answer(f"Приветствуем в боте NwXray! Здесь вы сможете получить информацию о своем подключении к NwXray.\n\n{get_subscription_info(message.from_user.id)}",
reply_markup=self.__non_admin_main_menu(), parse_mode=ParseMode.MARKDOWN)
return
user = User.select().where( user = User.select().where(
User.code == code).first() User.code == code).first()
if user is None: if user is None:
await message.answer('Пользователь не найден, обратитесь к администратору за ссылкой!') await message.answer('Пользователь не найден, обратитесь к администратору за ссылкой!')
return return
query = User.update(telegram_id=None).where(
User.telegram_id == message.from_user.id)
query.execute()
user.telegram_id = message.from_user.id user.telegram_id = message.from_user.id
user.code = '' user.code = ''
user.save() user.save()