selfbot-legacy/bot/commands/admin_commands.py

131 lines
4.9 KiB
Python

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 <name> <code>", 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 <cog_name>
"""
content = message.content.strip()
parts = content.split()
if len(parts) != 2:
await message.edit(content="❌ Usage: `.loadcog <cog_name>`")
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 <cog_name>
"""
content = message.content.strip()
parts = content.split()
if len(parts) != 2:
await message.edit(content="❌ Usage: `.unloadcog <cog_name>`")
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 <cog_name>
"""
content = message.content.strip()
parts = content.split()
if len(parts) != 2:
await message.edit(content="❌ Usage: `.reloadcog <cog_name>`")
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}")