import platform from sys import version as pyver import psutil from pyrogram import __version__ as pyrover from pyrogram import filters from pyrogram.errors import MessageIdInvalid from pyrogram.types import InputMediaPhoto, Message from pytgcalls.__version__ import __version__ as pytgver import config from DragMusic import app from DragMusic.core.userbot import assistants from DragMusic.misc import SUDOERS, mongodb from DragMusic.plugins import ALL_MODULES from DragMusic.utils.database import get_served_chats, get_served_users, get_sudoers from DragMusic.utils.decorators.language import language, languageCB from DragMusic.utils.inline.stats import back_stats_buttons, stats_buttons from config import BANNED_USERS, OWNER_ID @app.on_message(filters.command(["stats", "gstats"]) & ~BANNED_USERS) @language async def stats_global(client, message: Message, _): # Allow sudo users and owner to use it from anywhere if message.from_user.id not in SUDOERS and message.from_user.id != OWNER_ID: # Restrict access to only the group with username @dragbackup if message.chat.username != "dragbackup": return await message.reply_text( "Tʜɪs ᴄᴏᴍᴍᴀɴᴅ ᴄᴀɴ ᴏɴʟʏ ʙᴇ ᴜsᴇᴅ ɪɴ ᴛʜᴇ @ᴅʀᴀɢʙᴀᴄᴋᴜᴘ .." ) upl = stats_buttons(_, True) await message.reply_photo( photo=config.STATS_IMG_URL, caption=_["gstats_2"].format(app.mention), reply_markup=upl, ) @app.on_callback_query(filters.regex("stats_back") & ~BANNED_USERS) @languageCB async def home_stats(client, CallbackQuery, _): # Allow sudo users and owner to use it from anywhere if CallbackQuery.from_user.id not in SUDOERS and CallbackQuery.from_user.id != OWNER_ID: # Restrict access to only the group with username @dragbackup if CallbackQuery.message.chat.username != "dragbackup": return await CallbackQuery.answer("Tʜɪs ᴄᴏᴍᴍᴀɴᴅ ᴄᴀɴ ᴏɴʟʏ ʙᴇ ᴜsᴇᴅ ɪɴ ᴛʜᴇ @ᴅʀᴀɢʙᴀᴄᴋᴜᴘ ɢʀᴏᴜᴘ.", show_alert=True) upl = stats_buttons(_, True) await CallbackQuery.edit_message_text( text=_["gstats_2"].format(app.mention), reply_markup=upl, ) @app.on_callback_query(filters.regex("TopOverall") & ~BANNED_USERS) @languageCB async def overall_stats(client, CallbackQuery, _): # Allow sudo users and owner to use it from anywhere if CallbackQuery.from_user.id not in SUDOERS and CallbackQuery.from_user.id != OWNER_ID: # Restrict access to only the group with username @dragbackup if CallbackQuery.message.chat.username != "dragbackup": return await CallbackQuery.answer("Tʜɪs ᴄᴏᴍᴍᴀɴᴅ ᴄᴀɴ ᴏɴʟʏ ʙᴇ ᴜsᴇᴅ ɪɴ ᴛʜᴇ @ᴅʀᴀɢʙᴀᴄᴋᴜᴘ ɢʀᴏᴜᴘ.", show_alert=True) await CallbackQuery.answer() upl = back_stats_buttons(_) try: await CallbackQuery.answer() except: pass await CallbackQuery.edit_message_text(_["gstats_1"].format(app.mention)) served_chats = len(await get_served_chats()) served_users = len(await get_served_users()) text = _["gstats_3"].format( app.mention, len(assistants), len(BANNED_USERS), served_chats, served_users, len(ALL_MODULES), len(SUDOERS), config.AUTO_LEAVING_ASSISTANT, config.DURATION_LIMIT_MIN, ) med = InputMediaPhoto(media=config.STATS_IMG_URL, caption=text) try: await CallbackQuery.edit_message_media(media=med, reply_markup=upl) except MessageIdInvalid: await CallbackQuery.message.reply_photo( photo=config.STATS_IMG_URL, caption=text, reply_markup=upl ) @app.on_callback_query(filters.regex("bot_stats_sudo")) @languageCB async def bot_stats(client, CallbackQuery, _): # Allow sudo users and owner to use it from anywhere if CallbackQuery.from_user.id not in SUDOERS and CallbackQuery.from_user.id != OWNER_ID: # Restrict access to only the group with username @dragbackup if CallbackQuery.message.chat.username != "dragbackup": return await CallbackQuery.answer("Tʜɪs ᴄᴏᴍᴍᴀɴᴅ ᴄᴀɴ ᴏɴʟʏ ʙᴇ ᴜsᴇᴅ ɪɴ ᴛʜᴇ @ᴅʀᴀɢʙᴀᴄᴋᴜᴘ ɢʀᴏᴜᴘ.", show_alert=True) upl = back_stats_buttons(_) try: await CallbackQuery.answer() except: pass await CallbackQuery.edit_message_text(_["gstats_1"].format(app.mention)) p_core = psutil.cpu_count(logical=False) t_core = psutil.cpu_count(logical=True) ram = str(round(psutil.virtual_memory().total / (1024.0**3))) + " ɢʙ" try: cpu_freq = psutil.cpu_freq().current if cpu_freq >= 1000: cpu_freq = f"{round(cpu_freq / 1000, 2)}ɢʜᴢ" else: cpu_freq = f"{round(cpu_freq, 2)}ᴍʜᴢ" except: cpu_freq = "ғᴀɪʟᴇᴅ ᴛᴏ ғᴇᴛᴄʜ" hdd = psutil.disk_usage("/") total = hdd.total / (1024.0**3) used = hdd.used / (1024.0**3) free = hdd.free / (1024.0**3) call = await mongodb.command("dbstats") datasize = call["dataSize"] / 1024 storage = call["storageSize"] / 1024 served_chats = len(await get_served_chats()) served_users = len(await get_served_users()) text = _["gstats_5"].format( app.mention, len(ALL_MODULES), platform.system(), ram, p_core, t_core, cpu_freq, pyver.split()[0], pyrover, pytgver, str(total)[:4], str(used)[:4], str(free)[:4], served_chats, served_users, len(BANNED_USERS), len(await get_sudoers()), str(datasize)[:6], storage, call["collections"], call["objects"], ) med = InputMediaPhoto(media=config.STATS_IMG_URL, caption=text) try: await CallbackQuery.edit_message_media(media=med, reply_markup=upl) except MessageIdInvalid: await CallbackQuery.message.reply_photo( photo=config.STATS_IMG_URL, caption=text, reply_markup=upl )