gitscope
← marzneshin / v0.6.1 / app/telegram/report.py
https://dev.kronoz.win/r/marzneshin.git
app/telegram/report.py · Python
Blame Raw
  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)