import os from config import COMMANDS_DIR from utils.storage import save_tracked_channels class AdminCommands: def __init__(self, bot): self.bot = bot async def cmd_addcmd(self, message): """Add a custom command""" try: parts = message.content.split(" ", 2) if len(parts) < 3: await message.reply("Usage: .addcmd ", silent=True) return cmd_name, code = parts[1], parts[2] cmd_path = os.path.join(COMMANDS_DIR, f"{cmd_name}.py") with open(cmd_path, "w") as f: f.write("async def run(msg):\n") for line in code.split("\n"): f.write(f" {line}\n") self.bot.reload_commands() await message.reply(f"Command {cmd_name} saved.", silent=True) except Exception as e: await message.reply(f"Error: {e}", silent=True) async def cmd_delcmd(self, message): """Delete a custom command""" cmd_name = message.content.split(" ", 1)[1] cmd_path = os.path.join(COMMANDS_DIR, f"{cmd_name}.py") if os.path.exists(cmd_path): os.remove(cmd_path) self.bot.reload_commands() await message.reply(f"Command {cmd_name} deleted.", silent=True) else: await message.reply(f"Command {cmd_name} not found.", silent=True) async def cmd_listcmds(self, message): """List all custom commands""" cmds = list(self.bot.loaded_commands.keys()) await message.reply("Saved commands:\n" + ", ".join(cmds) if cmds else "No saved commands.", silent=True) async def cmd_trackmessages(self, message): """Start tracking messages in the current channel""" channel_id = message.channel.id if channel_id not in self.bot.tracked_channels: self.bot.tracked_channels.append(channel_id) save_tracked_channels(self.bot.tracked_channels) await message.reply(f"Tracking messages in this channel {message.channel.name}.", silent=True) else: await message.reply("This channel is already being tracked.", silent=True) async def cmd_untrackmessages(self, message): """Stop tracking messages in the current channel""" channel_id = message.channel.id if channel_id in self.bot.tracked_channels: self.bot.tracked_channels.remove(channel_id) save_tracked_channels(self.bot.tracked_channels) await message.reply(f"Stopped tracking messages in {message.channel.name}.", silent=True) else: await message.reply("This channel is not being tracked.", silent=True) async def cmd_loadcog(self, message): """ Load a cog Usage: .loadcog """ content = message.content.strip() parts = content.split() if len(parts) != 2: await message.edit(content="❌ Usage: `.loadcog `") return cog_name = parts[1] if self.bot.cog_manager.load_cog(cog_name): await message.edit(content=f"✅ Loaded cog: `{cog_name}`") else: await message.edit(content=f"❌ Failed to load cog: `{cog_name}`") async def cmd_unloadcog(self, message): """ Unload a cog Usage: .unloadcog """ content = message.content.strip() parts = content.split() if len(parts) != 2: await message.edit(content="❌ Usage: `.unloadcog `") return cog_name = parts[1] if self.bot.cog_manager.unload_cog(cog_name): await message.edit(content=f"✅ Unloaded cog: `{cog_name}`") else: await message.edit(content=f"❌ Failed to unload cog: `{cog_name}`") async def cmd_reloadcog(self, message): """ Reload a cog Usage: .reloadcog """ content = message.content.strip() parts = content.split() if len(parts) != 2: await message.edit(content="❌ Usage: `.reloadcog `") return cog_name = parts[1] if self.bot.cog_manager.reload_cog(cog_name): await message.edit(content=f"✅ Reloaded cog: `{cog_name}`") else: await message.edit(content=f"❌ Failed to reload cog: `{cog_name}`") async def cmd_listcogs(self, message): """ List all loaded cogs Usage: .listcogs """ if not self.bot.cog_manager.cogs: await message.edit(content="No cogs are currently loaded.") return cog_list = "\n".join(f"• {name}" for name in sorted(self.bot.cog_manager.cogs.keys())) await message.edit(content=f"**Loaded Cogs:**\n{cog_list}")