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"{exp_obj.first_name}" 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)