feat: implement referral payment system and enhance ticket management
This commit is contained in:
@@ -8,6 +8,7 @@ from sqlalchemy.ext.asyncio import AsyncSession
|
||||
from config import settings
|
||||
from db.models.tickets import TicketStatus
|
||||
from db.models.users import User
|
||||
from keyboards.admins import ticket_actions
|
||||
from misc import utils
|
||||
from repositories import UserRepository
|
||||
from repositories.tickets import TicketRepository
|
||||
@@ -51,9 +52,14 @@ class UserService:
|
||||
|
||||
@staticmethod
|
||||
async def format_admin_support_message(
|
||||
ticket_number: int, user: TelegramUser, rw_user: RWUserInfo | None, balance: int
|
||||
ticket_number: int,
|
||||
user: TelegramUser,
|
||||
rw_user: RWUserInfo | None,
|
||||
balance: int,
|
||||
referal_id: int | None = None,
|
||||
):
|
||||
username_display = utils.format_username(user.username)
|
||||
referal_display = utils.format_referal_id(referal_id)
|
||||
|
||||
if rw_user is None:
|
||||
# Пользователь не найден в Remnawave
|
||||
@@ -62,6 +68,8 @@ class UserService:
|
||||
full_name=user.full_name,
|
||||
username_display=username_display,
|
||||
telegram_id=user.id,
|
||||
referal_id=referal_display,
|
||||
balance=balance,
|
||||
)
|
||||
|
||||
status_icon, status_text = utils.format_status(rw_user.status)
|
||||
@@ -85,6 +93,7 @@ class UserService:
|
||||
hwid_limit=hwid_limit,
|
||||
squads=squads,
|
||||
remnawave_uuid=rw_user.uuid,
|
||||
referal_id=referal_display,
|
||||
)
|
||||
|
||||
async def add_user(
|
||||
@@ -126,7 +135,9 @@ class UserService:
|
||||
user_id=user.id,
|
||||
username=user.username,
|
||||
balance=db_user.balance,
|
||||
referal_id=db_user.referal_id,
|
||||
),
|
||||
reply_markup=ticket_actions,
|
||||
)
|
||||
return
|
||||
except Exception:
|
||||
@@ -159,7 +170,9 @@ class UserService:
|
||||
user_id=user.id,
|
||||
username=user.username,
|
||||
balance=db_user.balance,
|
||||
referal_id=db_user.referal_id,
|
||||
),
|
||||
reply_markup=ticket_actions,
|
||||
)
|
||||
|
||||
async def support_forward_message(self, session: AsyncSession, msg: Message, rw: RemnawaveSDK):
|
||||
@@ -205,7 +218,9 @@ class UserService:
|
||||
user=msg.from_user,
|
||||
rw_user=rw_user,
|
||||
balance=user.balance,
|
||||
referal_id=user.referal_id,
|
||||
),
|
||||
reply_markup=ticket_actions,
|
||||
)
|
||||
await msg.copy_to(settings.admin_group_id, message_thread_id=thread.message_thread_id)
|
||||
|
||||
@@ -230,6 +245,8 @@ class UserService:
|
||||
|
||||
async def close_ticket(self, session: AsyncSession, msg: Message):
|
||||
thread_id = msg.message_thread_id
|
||||
if not thread_id:
|
||||
return
|
||||
ticket = await self.ticket_repository.get_ticket_by_thread_id(session, thread_id=thread_id)
|
||||
|
||||
await msg.bot.edit_forum_topic(
|
||||
@@ -247,9 +264,14 @@ class UserService:
|
||||
|
||||
async def update_user_link(
|
||||
self, session: AsyncSession, user_id: int, rw_sdk: RemnawaveSDK
|
||||
) -> User | None:
|
||||
) -> User:
|
||||
rw_user = await get_user_by_telegram_id(rw_sdk, user_id)
|
||||
|
||||
user = await self.user_repository.get_user_by_id(session, user_id)
|
||||
|
||||
if not rw_user:
|
||||
return user
|
||||
|
||||
link = utils.get_subscription_link(rw_user.short_uuid)
|
||||
|
||||
user = await self.user_repository.update_user_link(session, user_id, link)
|
||||
|
||||
Reference in New Issue
Block a user