import discord from discord.ext import commands from .utils.dataIO import fileIO from .utils import checks from __main__ import user_allowed, send_cmd_help import os class CustomCommands: """Custom commands.""" def __init__(self, bot): self.bot = bot self.c_commands = fileIO("data/customcom/commands.json", "load") @commands.command(pass_context=True, no_pm=True) @checks.mod_or_permissions(manage_server=True) async def addcom(self, ctx, command : str, *text): """Adds a custom command Example: !addcom yourcommand Text you want """ if text == (): await send_cmd_help(ctx) return server = ctx.message.server channel = ctx.message.channel text = " ".join(text) if not server.id in self.c_commands: self.c_commands[server.id] = {} cmdlist = self.c_commands[server.id] if command not in cmdlist: cmdlist[command] = text self.c_commands[server.id] = cmdlist fileIO("data/customcom/commands.json", "save", self.c_commands) await self.bot.say("`Custom command successfully added.`") else: await self.bot.say("`This command already exists. Use editcom to edit it.`") @commands.command(pass_context=True, no_pm=True) @checks.mod_or_permissions(manage_server=True) async def editcom(self, ctx, command : str, *text): """Edits a custom command Example: !editcom yourcommand Text you want """ if text == (): await send_cmd_help(ctx) return server = ctx.message.server channel = ctx.message.channel text = " ".join(text) if server.id in self.c_commands: cmdlist = self.c_commands[server.id] if command in cmdlist: cmdlist[command] = text self.c_commands[server.id] = cmdlist fileIO("data/customcom/commands.json", "save", self.c_commands) await self.bot.say("`Custom command successfully edited.`") else: await self.bot.say("`That command doesn't exist. Use addcom [command] [text]`") else: await self.bot.say("`There are no custom commands in this server. Use addcom [command] [text]`") @commands.command(pass_context=True, no_pm=True) @checks.mod_or_permissions(manage_server=True) async def delcom(self, ctx, command : str): """Deletes a custom command Example: !delcom yourcommand""" server = ctx.message.server channel = ctx.message.channel if server.id in self.c_commands: cmdlist = self.c_commands[server.id] if command in cmdlist: cmdlist.pop(command, None) self.c_commands[server.id] = cmdlist fileIO("data/customcom/commands.json", "save", self.c_commands) await self.bot.send_message(channel, "`Custom command successfully deleted.`") else: await self.bot.say("`That command doesn't exist.`") else: await self.bot.send_message(channel, "`There are no custom commands in this server. Use addcom [command] [text]`") async def checkCC(self, message): if message.author.id == self.bot.user.id or len(message.content) < 2 or message.channel.is_private: return if not user_allowed(message): return msg = message.content server = message.server prefix = self.get_prefix(msg) if prefix and server.id in self.c_commands.keys(): cmdlist = self.c_commands[server.id] cmd = msg[len(prefix):] if cmd in cmdlist.keys(): await self.bot.send_message(message.channel, cmdlist[cmd]) def get_prefix(self, msg): for p in self.bot.command_prefix: if msg.startswith(p): return p return False def check_folders(): if not os.path.exists("data/customcom"): print("Creating data/customcom folder...") os.makedirs("data/customcom") def check_files(): f = "data/customcom/commands.json" if not fileIO(f, "check"): print("Creating empty commands.json...") fileIO(f, "save", {}) def setup(bot): check_folders() check_files() n = CustomCommands(bot) bot.add_listener(n.checkCC, "on_message") bot.add_cog(n)