diff options
author | lexicade <jasonnlelong@gmail.com> | 2023-01-27 21:06:30 +0000 |
---|---|---|
committer | lexicade <jasonnlelong@gmail.com> | 2023-01-27 21:06:30 +0000 |
commit | 52801b4de1d63cd01191acf7fcee137977140ec0 (patch) | |
tree | 08271a1f1e3e8060486b6651c67c9934867c648e /cogs/Macro.py | |
parent | 8df873808c86805624851356f5dea76ec621de23 (diff) |
Diffstat (limited to 'cogs/Macro.py')
-rw-r--r-- | cogs/Macro.py | 219 |
1 files changed, 219 insertions, 0 deletions
diff --git a/cogs/Macro.py b/cogs/Macro.py new file mode 100644 index 0000000..cef67f3 --- /dev/null +++ b/cogs/Macro.py @@ -0,0 +1,219 @@ +from discord.ext import commands +import discord +import pickle +import os +import MySQLdb +import configparser +from discord.ext.commands.cooldowns import BucketType +import time +import datetime +colours = { "default": 0, + "teal": 0x1abc9c, + "dark teal": 0x11806a, + "green": 0x2ecc71, + "dark green": 0x1f8b4c, + "blue": 0x3498db, + "dark blue": 0x206694, + "purple": 0x9b59b6, + "dark purple": 0x71368a, + "magenta": 0xe91e63, + "dark magenta": 0xad1457, + "gold": 0xf1c40f, + "dark gold": 0xc27c0e, + "orange": 0xe67e22, + "dark orange": 0xa84300, + "red": 0xe74c3c, + "dark red": 0x992d22, + "lighter grey": 0x95a5a6, + "dark grey": 0x607d8b, + "light grey": 0x979c9f, + "darker grey": 0x546e7a, + "blurple": 0x7289da, + "greyple": 0x99aab5} + + +class Macro(commands.Cog): + def __init__(self, bot): + self.bot = bot + global cooldown_dict + cooldown_dict = {} + + def blacklist_check(ctx): + # Read config + config = configparser.ConfigParser() + config.read('config.ini') + + # Create database link + db = MySQLdb.connect(host=config["mysqldb"]["host"], user=config["mysqldb"]["user"], + passwd=config["mysqldb"]["passwd"], db=config["mysqldb"]["db"]) + c = db.cursor() + c.execute("SELECT `user_id` from `blacklist` WHERE `user_id` = %s" % str(ctx.author.id)) + result = c.fetchone() + + if result is None: + return True + else: + return + + @staticmethod + async def cooldown_check(ctx): + global cooldown_dict + # if cooldown_dict is None: + d = datetime.datetime.now() + unixtime = time.mktime(d.timetuple()) + cooldown_dict[ctx.author.id] = unixtime + #await ctx.channel.send(content=int(unixtime)) + + return True + # if result is None: + # return True + # else: + # return + + def bot_admin_check(ctx): + # Read config + config = configparser.ConfigParser() + config.read('config.ini') + + results = list(map(int, config["conf"]["bot_admins"].split(","))) + + return ctx.message.author.id in list(results) + + @commands.check(blacklist_check) + @commands.group(invoke_without_command=True) + async def macro(self, ctx): + """WIP.""" + prefix = await self.bot.get_prefix(ctx.message) + prefix.remove(f"<@{self.bot.user.id}> ") + prefix.remove(f"<@!{self.bot.user.id}> ") + prefix = prefix[0] + message_embed = discord.Embed(title=f"Commands for `{prefix}macro`", + description="WIP", + colour=colours["blue"]) + message_embed.add_field(name=f"{prefix}macro add [trigger word] [content]", + value="Adds a new macro for you to use.", + inline=False) + message_embed.add_field(name=f"{prefix}macro list", + value="Get a list of your current macros", inline=False) + message_embed.add_field(name=f"{prefix}macro remove [trigger word]", + value="Removes a macro from current macros.", inline=False) + await ctx.send(embed=message_embed) + True + + @commands.check(blacklist_check) + @macro.command() + async def add(self, ctx, *arg): + arg = list(arg) + + trigger_word = arg.pop(0) + trigger_phrase = " ".join(arg) + + try: + user_macros = await self.load_obj(ctx.author.id) + except EOFError: + user_macros = {} + + if user_macros is None: + user_macros = {trigger_word, trigger_phrase} + else: + user_macros = dict(user_macros) + user_macros[trigger_word] = trigger_phrase + + await self.save_obj(user_macros, ctx.author.id) + await ctx.send(content=f"({trigger_word})({trigger_phrase})") + + @commands.check(blacklist_check) + @macro.command() + async def remove(self, ctx, arg): + arg = str(arg) + + try: + user_macros = await self.load_obj(ctx.author.id) + except EOFError: + user_macros = {} + + reslt = user_macros.pop(arg, "0") + if reslt is None: + await ctx.send(content=f"No macro with the name {arg} exists.") + else: + await self.save_obj(user_macros, ctx.author.id) + await ctx.send(content=f"Removed {reslt}") + + # if arg in user_macros: + # user_macros.remove(arg) + # await ctx.send(content=str(user_macros)) + # else: + # await ctx.send(content="No: " + str(user_macros)) + + @commands.check(blacklist_check) + @macro.command() + async def list(self, ctx): + user_dict = await self.load_obj(ctx.author.id) + + msg = "" + offset = 1 + + for item in user_dict: + msg = f"{msg}\n{item}) {user_dict[item]}" + + embed_msg = discord.Embed(title="List of Macros", + description=msg, + colour=colours["blue"]) + + await ctx.send(embed=embed_msg) + + # @commands.cooldown(1, 60.0, BucketType.user) + @commands.check(blacklist_check) + @commands.Cog.listener() + async def on_message(self, ctx): + if await self.cooldown_check(ctx): + try: + user_macros = await self.load_obj(ctx.author.id) + except EOFError: + user_macros = {} + + for macro in user_macros: + if macro == ctx.content: + await ctx.channel.send(content=user_macros[macro]) + + @commands.check(bot_admin_check) + @macro.command() + async def blacklist(self, ctx, user: discord.Member): + # Read config + config = configparser.ConfigParser() + config.read('config.ini') + + # Create database link + db = MySQLdb.connect(host=config["mysqldb"]["host"], user=config["mysqldb"]["user"], + passwd=config["mysqldb"]["passwd"], db=config["mysqldb"]["db"]) + c = db.cursor() + c.execute("INSERT INTO `blacklist` (`user_id`, `reason`) VALUES (%s,'%s');" % (user.id, "")) + db.commit() + + message_embed = discord.Embed(title=f"Blacklisted {user}", + description="", + colour=colours["blue"]) + await ctx.send(embed=message_embed) + + @staticmethod + async def save_obj(obj, filename: str): + with open(f"./macros/{filename}.pkl", 'wb') as f: + pickle.dump(obj, f, pickle.HIGHEST_PROTOCOL) + + @staticmethod + async def load_obj(owner_id): + if not os.path.isfile(f"./macros/{owner_id}.pkl"): + os.mknod(f"./macros/{owner_id}.pkl") + + with open(f"./macros/{owner_id}.pkl", "rb") as f: + return pickle.load(f) + + +def setup(bot): + print("INFO: Loading [Macro]... ", end="") + bot.add_cog(Macro(bot)) + print("Done!") + + +def teardown(bot): + print("INFO: Unloading [Macro]")
\ No newline at end of file |