gitscope
← marzneshin / v0.3.2 / app/utils/report.py
https://dev.kronoz.win/r/marzneshin.git
app/utils/report.py · Python
Blame Raw
  1from datetime import datetime as dt
  2from typing import Optional
  3
  4from app import telegram
  5from app.db import Session, create_notification_reminder
  6from app.models.admin import Admin
  7from app.models.user import ReminderType, UserResponse
  8from app.utils.notification import (
  9    Notification,
 10    ReachedDaysLeft,
 11    ReachedUsagePercent,
 12    UserCreated,
 13    UserDataUsageReset,
 14    UserDeleted,
 15    UserEnabled,
 16    UserLimited,
 17    UserSubscriptionRevoked,
 18    UserUpdated,
 19    notify,
 20)
 21
 22
 23async def status_change(
 24    username: str,
 25    activation: bool,
 26    user: UserResponse,
 27    by: Optional[Admin] = None,
 28) -> None:
 29    try:
 30        await telegram.report_status_change(username, status)
 31    except Exception:
 32        pass
 33    if activation is False:
 34        await notify(
 35            UserLimited(
 36                username=username,
 37                action=Notification.Type.user_disabled,
 38                user=user,
 39            )
 40        )
 41    elif activation is True:
 42        await notify(
 43            UserEnabled(
 44                username=username,
 45                action=Notification.Type.user_enabled,
 46                user=user,
 47                by=by,
 48            )
 49        )
 50
 51
 52async def user_created(user: UserResponse, user_id: int, by: Admin) -> None:
 53    await telegram.report_new_user(
 54        user_id=user_id,
 55        username=user.username,
 56        by=by.username,
 57        expire_date=user.expire_date,
 58        data_limit=user.data_limit,
 59        # proxies=[]
 60        services=user.services,
 61    )
 62
 63    await notify(
 64        UserCreated(
 65            username=user.username,
 66            action=Notification.Type.user_created,
 67            by=by,
 68            user=user,
 69        )
 70    )
 71
 72
 73async def user_updated(user: UserResponse, by: Admin) -> None:
 74    try:
 75        await telegram.report_user_modification(
 76            username=user.username,
 77            expire_date=user.expire_date,
 78            data_limit=user.data_limit,
 79            services=user.services,
 80            by=by.username,
 81        )
 82    except Exception:
 83        pass
 84    await notify(
 85        UserUpdated(
 86            username=user.username,
 87            action=Notification.Type.user_updated,
 88            by=by,
 89            user=user,
 90        )
 91    )
 92
 93
 94async def user_deleted(username: str, by: Admin) -> None:
 95    try:
 96        await telegram.report_user_deletion(username=username, by=by.username)
 97    except Exception:
 98        pass
 99    await notify(
100        UserDeleted(
101            username=username, action=Notification.Type.user_deleted, by=by
102        )
103    )
104
105
106async def user_data_usage_reset(user: UserResponse, by: Admin) -> None:
107    try:
108        await telegram.report_user_usage_reset(
109            username=user.username,
110            by=by.username,
111        )
112    except Exception:
113        pass
114    await notify(
115        UserDataUsageReset(
116            username=user.username,
117            action=Notification.Type.data_usage_reset,
118            by=by,
119            user=user,
120        )
121    )
122
123
124async def user_subscription_revoked(user: UserResponse, by: Admin) -> None:
125    try:
126        await telegram.report_user_subscription_revoked(
127            username=user.username,
128            by=by.username,
129        )
130    except Exception:
131        pass
132    await notify(
133        UserSubscriptionRevoked(
134            username=user.username,
135            action=Notification.Type.subscription_revoked,
136            by=by,
137            user=user,
138        )
139    )
140
141
142async def data_usage_percent_reached(
143    db: Session,
144    percent: float,
145    user: UserResponse,
146    user_id: int,
147    expire: Optional[int] = None,
148) -> None:
149    await notify(
150        ReachedUsagePercent(
151            username=user.username, user=user, used_percent=percent
152        )
153    )
154    await create_notification_reminder(
155        db,
156        ReminderType.data_usage,
157        expires_at=dt.utcfromtimestamp(expire) if expire else None,
158        user_id=user_id,
159    )
160
161
162async def expire_days_reached(
163    db: Session, days: int, user: UserResponse, user_id: int, expire: int
164) -> None:
165    await notify(
166        ReachedDaysLeft(username=user.username, user=user, days_left=days)
167    )
168    await create_notification_reminder(
169        db,
170        ReminderType.expiration_date,
171        expires_at=dt.utcfromtimestamp(expire),
172        user_id=user_id,
173    )