from os import getpid, makedirs, path from time import time from pyrogram import filters from pyrogram.types import Message, InlineKeyboardMarkup, InlineKeyboardButton from classes.poster_client import PosterClient from modules.app import app, users_with_context from modules.logger import logWrite from modules.scheduler import scheduler from modules.utils import configGet, jsonSave, locale @app.on_message(~filters.scheduled & filters.command(["shutdown"], prefixes=["", "/"])) async def cmd_kill(app: PosterClient, msg: Message): if msg.from_user.id in app.admins: global users_with_context if len(users_with_context) > 0: await msg.reply_text( f"There're {len(users_with_context)} unfinished users' contexts. If you turn off the bot, those will be lost. Please confirm shutdown using a button below.", reply_markup=InlineKeyboardMarkup( [ [ InlineKeyboardButton( "Confirm shutdown", callback_data="shutdown" ) ] ] ), ) return pid = getpid() logWrite(f"Shutting down bot with pid {pid}") await msg.reply_text( locale("shutdown", "message", locale=msg.from_user.language_code).format( pid ), ) scheduler.shutdown() makedirs(configGet("cache", "locations"), exist_ok=True) jsonSave( {"timestamp": time()}, path.join(configGet("cache", "locations"), "shutdown_time"), ) exit()