66 lines
3.2 KiB
Python
66 lines
3.2 KiB
Python
from typing import Optional
|
||
|
||
from aiogram import F, types
|
||
from aiogram.enums import ParseMode
|
||
from aiogram.filters import Command
|
||
from aiogram.types import (CallbackQuery, InlineKeyboardButton,
|
||
InlineKeyboardMarkup)
|
||
|
||
from nwxraybot import get_subscription_info
|
||
from nwxraybot.meta import Handler
|
||
from nwxraybot.models import User
|
||
|
||
|
||
class HelloHandler(Handler):
|
||
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):
|
||
data = message.text.split()
|
||
user: Optional[User] = None
|
||
if len(data) == 2:
|
||
code = data[1]
|
||
user = User.select().where(
|
||
User.telegram_id == message.from_user.id).first()
|
||
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.code == code).first()
|
||
if user is None:
|
||
await message.answer('Пользователь не найден, обратитесь к администратору за ссылкой!')
|
||
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.code = ''
|
||
user.save()
|
||
user = User.select().where(User.telegram_id == message.from_user.id).first()
|
||
if user is None:
|
||
await message.answer('Пользователь не найден, обратитесь к администратору за ссылкой!')
|
||
return
|
||
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)
|
||
|
||
@self.router.callback_query(F.data == 'update')
|
||
async def update_data(callback: CallbackQuery):
|
||
text = get_subscription_info(callback.from_user.id)
|
||
try:
|
||
await callback.message.edit_text(get_subscription_info(callback.from_user.id),
|
||
reply_markup=self.__non_admin_main_menu(), parse_mode=ParseMode.MARKDOWN)
|
||
except:
|
||
await callback.answer('Обновлений нет', show_alert=True)
|
||
return
|