import logging from os import getpid from time import time import pyrogram from libbot import config_get from pyrogram.client import Client from pyrogram.errors import BadRequest from pyrogram.raw.all import layer from pyrogram.types import BotCommand, BotCommandScopeChat from ujson import loads logger = logging.getLogger(__name__) class PyroClient(Client): def __init__(self): with open("config.json", "r", encoding="utf-8") as f: config = loads(f.read()) super().__init__( name="bwtbot", api_id=config["bot"]["api_id"], api_hash=config["bot"]["api_hash"], bot_token=config["bot"]["bot_token"], workers=config["bot"]["workers"], plugins=dict(root="plugins", exclude=config["disabled_plugins"]), sleep_threshold=120, ) async def start(self): await super().start() self.start_time = time() logger.info( "Bot is running with Pyrogram v%s (Layer %s) and has started as @%s on PID %s.", pyrogram.__version__, layer, self.me.username, getpid(), ) try: await self.send_message( chat_id=await config_get("chat_id", "reports"), text=f"Bot started PID `{getpid()}`", ) except BadRequest: logger.warning("Unable to send message to report chat.") await self.set_bot_commands( [ BotCommand("help", "Меню допомоги"), BotCommand("balance", "Баланс картки"), BotCommand("topup", "Поповнити картку"), BotCommand("setcard", "Прив'язати картку"), BotCommand("resetcard", "Відв'язати картку"), ], language_code="uk", ) await self.set_bot_commands( [ BotCommand("help", "Меню допомоги"), BotCommand("balance", "Баланс картки"), BotCommand("topup", "Поповнити картку"), BotCommand("setcard", "Прив'язати картку"), BotCommand("resetcard", "Відв'язати картку"), ], language_code="ru", ) await self.set_bot_commands( [ BotCommand("help", "Help menu"), BotCommand("balance", "Card's balance"), BotCommand("topup", "Refill card"), BotCommand("setcard", "Link card"), BotCommand("resetcard", "Unlink card"), ] ) await self.set_bot_commands( [ BotCommand("help", "Help menu"), BotCommand("balance", "Card's balance"), BotCommand("topup", "Refill card"), BotCommand("setcard", "Link card"), BotCommand("resetcard", "Unlink card"), BotCommand("shutdown", "Turn off the bot"), ], scope=BotCommandScopeChat(chat_id=await config_get("owner_id")), ) async def stop(self): try: await self.send_message( chat_id=await config_get("chat_id", "reports"), text=f"Bot stopped with PID `{getpid()}`", ) except BadRequest: logger.warning("Unable to send message to report chat.") await super().stop() logger.warning(f"Bot stopped with PID {getpid()}.")