1import logging
2from datetime import datetime
3
4from telebot.apihelper import ApiTelegramException
5from telebot.formatting import escape_html
6
7from app import telegram
8from app.config.env import TELEGRAM_ADMIN_ID, TELEGRAM_LOGGER_CHANNEL_ID
9from app.utils.system import readable_size
10
11logger = logging.getLogger(__name__)
12
13
14async def report(message: str, parse_mode="html", keyboard=None):
15 if telegram.bot and (TELEGRAM_ADMIN_ID or TELEGRAM_LOGGER_CHANNEL_ID):
16 try:
17 if TELEGRAM_LOGGER_CHANNEL_ID:
18 await telegram.bot.send_message(
19 TELEGRAM_LOGGER_CHANNEL_ID, message, parse_mode=parse_mode
20 )
21 else:
22 for admin in TELEGRAM_ADMIN_ID:
23 await telegram.bot.send_message(
24 admin,
25 message,
26 parse_mode=parse_mode,
27 reply_markup=keyboard,
28 )
29 except ApiTelegramException as e:
30 logger.error(e)
31
32
33async def report_new_user(
34 user_id: int,
35 username: str,
36 by: str,
37 expire_date: datetime,
38 data_limit: int,
39 services: list,
40):
41 text = """\
42🆕 <b>#Created</b>
43➖➖➖➖➖➖➖➖➖
44<b>Username :</b> <code>{username}</code>
45<b>Traffic Limit :</b> <code>{data_limit}</code>
46<b>Expire Date :</b> <code>{expire_date}</code>
47<b>Services :</b> <code>{services}</code>
48➖➖➖➖➖➖➖➖➖
49<b>By :</b> <b>#{by}</b>""".format(
50 by=escape_html(by),
51 username=escape_html(username),
52 data_limit=readable_size(data_limit) if data_limit else "Unlimited",
53 expire_date=(
54 expire_date.strftime("%H:%M:%S %Y-%m-%d")
55 if expire_date
56 else "Never"
57 ),
58 services="" if not services else ", ".join([s.name for s in services]),
59 )
60
61 return await report(text)
62
63
64async def report_user_modification(
65 username: str,
66 expire_date: datetime,
67 data_limit: int,
68 services: list,
69 by: str,
70):
71 text = """\
72✏️ <b>#Modified</b>
73➖➖➖➖➖➖➖➖➖
74<b>Username :</b> <code>{username}</code>
75<b>Traffic Limit :</b> <code>{data_limit}</code>
76<b>Expire Date :</b> <code>{expire_date}</code>
77<b>Services :</b> <code>{services}</code>
78➖➖➖➖➖➖➖➖➖
79<b>By :</b> <b>#{by}</b>\
80 """.format(
81 by=escape_html(by),
82 username=escape_html(username),
83 data_limit=readable_size(data_limit) if data_limit else "Unlimited",
84 expire_date=(
85 expire_date.strftime("%H:%M:%S %Y-%m-%d")
86 if expire_date
87 else "Never"
88 ),
89 services=", ".join([s.name for s in services]),
90 )
91
92 return await report(text)
93
94
95async def report_user_deletion(username: str, by: str):
96 text = """\
97🗑 <b>#Deleted</b>
98➖➖➖➖➖➖➖➖➖
99<b>Username</b> : <code>{username}</code>
100➖➖➖➖➖➖➖➖➖
101<b>By</b> : <b>#{by}</b>\
102 """.format(
103 by=escape_html(by), username=escape_html(username)
104 )
105 return await report(text)
106
107
108async def report_status_change(username: str, status: str):
109 _status = {
110 "active": "✅ <b>#Activated</b>",
111 "on_hold": "🟡 <b>#On_Hold</b>",
112 "limited": "🪫 <b>#Limited</b>",
113 "expired": "🕔 <b>#Expired</b>",
114 }
115 text = """\
116{status}
117➖➖➖➖➖➖➖➖➖
118<b>Username</b> : <code>{username}</code>\
119 """.format(
120 username=escape_html(username), status=_status[status]
121 )
122 return await report(text)
123
124
125async def report_user_usage_reset(username: str, by: str):
126 text = """
127🔁 <b>#Reset</b>
128➖➖➖➖➖➖➖➖➖
129<b>Username</b> : <code>{username}</code>
130➖➖➖➖➖➖➖➖➖
131<b>By</b> : <b>#{by}</b>\
132 """.format(
133 by=escape_html(by), username=escape_html(username)
134 )
135
136 return await report(text)
137
138
139async def report_user_subscription_revoked(username: str, by: str):
140 text = """
141🔁 <b>#Revoked</b>
142➖➖➖➖➖➖➖➖➖
143<b>Username</b> : <code>{username}</code>
144➖➖➖➖➖➖➖➖➖
145<b>By</b> : <b>#{by}</b>\
146 """.format(
147 by=escape_html(by), username=escape_html(username)
148 )
149
150 return await report(text)