akn-dev / akn /utils /expired_bot.py
randydev's picture
fix revert back and update
21bc372
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)