|
import asyncio |
|
from box import Box |
|
from datetime import datetime as dt |
|
from datetime import timedelta |
|
from pytz import timezone |
|
from pyrogram.types import * |
|
from akn.utils.database import db |
|
from akn.utils.logger import LOGS |
|
|
|
WHY_TRY_DO = """ |
|
Hey, {user} |
|
|
|
Sorry, your bot {bot} has expired. |
|
|
|
You can upgrade to premium for an extended period: |
|
- 1 month or 2 months of premium |
|
- But don’t worry, you still get a free 7-day trial every week! |
|
|
|
If you're interested, feel free to purchase premium at any time! |
|
""" |
|
|
|
reply_markup = InlineKeyboardMarkup( |
|
[ |
|
[ |
|
InlineKeyboardButton( |
|
text="🆕 New expiry", |
|
callback_data="expiredtt" |
|
) |
|
] |
|
] |
|
) |
|
|
|
async def add_time_watch( |
|
user_id, |
|
first_name, |
|
username, |
|
bot_token, |
|
client_name, |
|
days, |
|
disconnected: bool = False |
|
): |
|
try: |
|
now = dt.now(timezone("Asia/Jakarta")) |
|
expire_date = now + timedelta(days=days) |
|
LOGS.info(f"Setting expiration time for user {user_id}: {expire_date}") |
|
await db.set_expired_date( |
|
user_id, |
|
first_name, |
|
username, |
|
expire_date, |
|
bot_token, |
|
client_name, |
|
disconnected |
|
) |
|
except Exception as e: |
|
LOGS.info(f"Error: {e}") |
|
|
|
async def watch_do_time(user_id, client, assistant): |
|
while True: |
|
now = dt.now(timezone("Asia/Jakarta")) |
|
time = now.strftime("%d-%m-%Y") |
|
|
|
exp = await db.get_expired_date(user_id) |
|
exp_obj = Box(exp or {}) |
|
if not exp_obj: |
|
await asyncio.sleep(30) |
|
continue |
|
expired_on = exp_obj.expire_date |
|
if not expired_on: |
|
await asyncio.sleep(30) |
|
continue |
|
if isinstance(expired_on, str): |
|
expired_on = dt.strptime(expired_on, "%d-%m-%Y") |
|
|
|
if expired_on.tzinfo is None: |
|
expired_on = timezone("Asia/Jakarta").localize(expired_on) |
|
|
|
LOGS.info(f"Expiration date for user {user_id}: {expired_on.strftime('%d-%m-%Y')}") |
|
|
|
if now >= expired_on: |
|
send_mention = f"<a href='tg://user?id={exp_obj.user_id}'>{exp_obj.first_name}</a>" |
|
await client.stop() |
|
await assistant.send_message( |
|
exp_obj.user_id, |
|
WHY_TRY_DO.format( |
|
user=send_mention, |
|
bot=exp_obj.username |
|
) |
|
) |
|
await db.set_expired_date( |
|
user_id=exp_obj.user_id, |
|
first_name=exp_obj.first_name, |
|
username=exp_obj.username, |
|
expire_date=None, |
|
bot_token=exp_obj.user_client.bot_token, |
|
client_name=exp_obj.user_client.client_name, |
|
disconnected=True |
|
) |
|
LOGS.info(f"bot {exp_obj.username} has expired") |
|
break |
|
else: |
|
await asyncio.sleep(30) |