# modules/usage/usage_stats.py from __future__ import annotations from discord.ext import commands import discord COUNTER_KEY_PREFIX = "cmd::" def _key_from_app(cmd: discord.app_commands.Command) -> str: return f"{COUNTER_KEY_PREFIX}{getattr(cmd, 'qualified_name', None) or getattr(cmd, 'name', 'unknown')}" class UsageStatsCog(commands.Cog): """Slash-only metrics; count once per successful app command completion.""" def __init__(self, bot: commands.Bot): self.bot = bot print("[usage] UsageStatsCog init (slash-only)") @commands.Cog.listener() async def on_app_command_completion(self, interaction: discord.Interaction, command: discord.app_commands.Command): dm = getattr(self.bot, "data_manager", None) if not dm: return try: key = _key_from_app(command) newv = dm.incr_counter(key, 1) print(f"[usage] app ++ {key} -> {newv}") except Exception as e: print("[usage] app !! incr failed:", repr(e)) async def setup(bot: commands.Bot): if getattr(bot, "_usage_stats_loaded", False): print("[usage] UsageStatsCog already loaded; skipping duplicate add") return await bot.add_cog(UsageStatsCog(bot)) bot._usage_stats_loaded = True print("[usage] UsageStatsCog loaded (slash-only)")