import time from pyrogram import Client, enums, filters from pyrogram.types import Message from Backend import StartTime, __version__, db from Backend.helper.custom_filter import CustomFilters from Backend.helper.pyro import get_readable_file_size, get_readable_time from Backend.helper.settings_manager import SettingsManager from Backend.logger import LOGGER #----- Owner-only /stats: aggregate content and system metrics across DBs @Client.on_message(filters.command('stats') & filters.private & CustomFilters.owner, group=10) async def stats_command(client: Client, message: Message): status_msg = await message.reply_text("π Gathering statsβ¦", quote=True) try: total_movies = total_tv = total_episodes = total_streams = total_db_size = 0 for i in range(1, db.current_db_index + 1): storage = db.dbs.get(f"storage_{i}") if storage is None: continue total_movies += await storage["movie"].count_documents({}) async for movie in storage["movie"].find({}, {"telegram": 1}): total_streams += len(movie.get("telegram", [])) total_tv += await storage["tv"].count_documents({}) async for show in storage["tv"].find({}, {"seasons": 1}): for season in show.get("seasons", []): for episode in season.get("episodes", []): total_episodes += 1 total_streams += len(episode.get("telegram", [])) try: db_stats = await storage.command("dbStats") total_db_size += db_stats.get("dataSize", 0) except Exception: pass uptime_sec = int(time.time() - StartTime) channels_count = len(SettingsManager.current().auth_channels) text = ( f"
π Telegram-Stremio v{__version__}\n\n" f"Content\n" f" π¬ Movies:
{total_movies}\n"
f" πΊ TV Shows: {total_tv}\n"
f" π Episodes: {total_episodes}\n"
f" π Total streams: {total_streams}\n\n"
f"System\n"
f" β± Uptime: {get_readable_time(uptime_sec)}\n"
f" πΎ DB size: {get_readable_file_size(total_db_size)}\n"
f" π Storage DBs: {db.current_db_index}\n"
f" π‘ AUTH channels: {channels_count}\n"
)
await status_msg.edit_text(text, parse_mode=enums.ParseMode.HTML)
except Exception as e:
LOGGER.error(f"[Stats] Error: {e}")
await status_msg.edit_text(f"β Error gathering stats: {e}", parse_mode=enums.ParseMode.HTML)