diff --git a/aurora/aurora.py b/aurora/aurora.py index 3b4ddd5..cdf6406 100644 --- a/aurora/aurora.py +++ b/aurora/aurora.py @@ -25,7 +25,7 @@ from .utilities.config import config, register_config from .utilities.database import connect, create_guild_table, fetch_case, mysql_log from .utilities.embed_factory import embed_factory from .utilities.logger import logger -from .utilities.utils import check_conf, check_moddable, check_permissions, fetch_channel_dict, fetch_user_dict, generate_dict, log, send_evidenceformat +from .utilities.utils import check_moddable, check_permissions, fetch_channel_dict, fetch_user_dict, generate_dict, log, send_evidenceformat class Aurora(commands.Cog): @@ -572,12 +572,13 @@ class Aurora(commands.Cog): database = connect() if export: - cursor = database.cursor(dictionary=True) + database.row_factory = sqlite3.Row + cursor = database.cursor() - query = """SELECT * - FROM moderation_%s + query = f"""SELECT * + FROM moderation_{interaction.guild.id} ORDER BY moderation_id DESC;""" - cursor.execute(query, (interaction.guild.id,)) + cursor.execute(query) results = cursor.fetchall() @@ -599,22 +600,22 @@ class Aurora(commands.Cog): cursor = database.cursor() if target: - query = """SELECT * - FROM moderation_%s - WHERE target_id = %s + query = f"""SELECT * + FROM moderation_{interaction.guild.id} + WHERE target_id = ? ORDER BY moderation_id DESC;""" - cursor.execute(query, (interaction.guild.id, target.id)) + cursor.execute(query, (target.id,)) elif moderator: - query = """SELECT * - FROM moderation_%s - WHERE moderator_id = %s + query = f"""SELECT * + FROM moderation_{interaction.guild.id} + WHERE moderator_id = ? ORDER BY moderation_id DESC;""" - cursor.execute(query, (interaction.guild.id, moderator.id)) + cursor.execute(query, (moderator.id,)) else: - query = """SELECT * - FROM moderation_%s + query = f"""SELECT * + FROM moderation_{interaction.guild.id} ORDER BY moderation_id DESC;""" - cursor.execute(query, (interaction.guild.id,)) + cursor.execute(query) results = cursor.fetchall() result_dict_list = [] @@ -694,15 +695,15 @@ class Aurora(commands.Cog): database = connect() cursor = database.cursor() - query_1 = "SELECT * FROM moderation_%s WHERE moderation_id = %s;" - cursor.execute(query_1, (interaction.guild.id, case)) + query_1 = f"SELECT * FROM moderation_{interaction.guild.id} WHERE moderation_id = ?;" + cursor.execute(query_1, (case,)) result_1 = cursor.fetchone() if result_1 is None or case == 0: await interaction.response.send_message(content=f"There is no moderation with a case number of {case}.", ephemeral=True) return - query_2 = "SELECT * FROM moderation_%s WHERE moderation_id = %s AND resolved = 0;" - cursor.execute(query_2, (interaction.guild.id, case)) + query_2 = f"SELECT * FROM moderation_{interaction.guild.id} WHERE moderation_id = ? AND resolved = 0;" + cursor.execute(query_2, (case,)) result_2 = cursor.fetchone() if result_2 is None: await interaction.response.send_message(content=f"This moderation has already been resolved!\nUse `/case {case}` for more information.", ephemeral=True) @@ -754,9 +755,9 @@ class Aurora(commands.Cog): except discord.NotFound: pass - resolve_query = f"UPDATE `moderation_{interaction.guild.id}` SET resolved = 1, changes = %s, resolved_by = %s, resolve_reason = %s WHERE moderation_id = %s" + resolve_query = f"UPDATE `moderation_{interaction.guild.id}` SET resolved = 1, changes = ?, resolved_by = ?, resolve_reason = ? WHERE moderation_id = ?" else: - resolve_query = f"UPDATE `moderation_{interaction.guild.id}` SET resolved = 1, changes = %s, resolved_by = %s, resolve_reason = %s WHERE moderation_id = %s" + resolve_query = f"UPDATE `moderation_{interaction.guild.id}` SET resolved = 1, changes = ?, resolved_by = ?, resolve_reason = ? WHERE moderation_id = ?" cursor.execute(resolve_query, (json.dumps(changes), interaction.user.id, reason, case_dict['moderation_id'])) database.commit() @@ -850,10 +851,6 @@ class Aurora(commands.Cog): parsed_time = None case_dict = await fetch_case(case, interaction.guild.id) if case_dict: - conf = await check_conf(['mysql_database']) - if conf: - raise(LookupError) - if duration: try: parsed_time = parse(sval=duration, as_timedelta=True, raise_exception=True) @@ -915,13 +912,12 @@ class Aurora(commands.Cog): database = connect() cursor = database.cursor() - db = await config.mysql_database() if parsed_time: - update_query = f"UPDATE `{db}`.`moderation_{interaction.guild.id}` SET changes = %s, reason = %s, duration = %s, end_timestamp = %s WHERE moderation_id = %s" + update_query = f"UPDATE `moderation_{interaction.guild.id}` SET changes = %s, reason = %s, duration = %s, end_timestamp = %s WHERE moderation_id = %s" cursor.execute(update_query, (json.dumps(changes), reason, parsed_time, end_timestamp, case)) else: - update_query = f"UPDATE `{db}`.`moderation_{interaction.guild.id}` SET changes = %s, reason = %s WHERE moderation_id = %s" + update_query = f"UPDATE `moderation_{interaction.guild.id}` SET changes = %s, reason = %s WHERE moderation_id = %s" cursor.execute(update_query, (json.dumps(changes), reason, case)) database.commit() @@ -938,19 +934,14 @@ class Aurora(commands.Cog): @tasks.loop(minutes=1) async def handle_expiry(self): - conf = await check_conf(['mysql_database']) - if conf: - raise(LookupError) - database = connect() cursor = database.cursor() - db = await config.mysql_database() guilds: list[discord.Guild] = self.bot.guilds for guild in guilds: if not await self.bot.cog_disabled_in_guild(self, guild): - tempban_query = f"SELECT target_id, moderation_id FROM moderation_{guild.id} WHERE end_timestamp != 0 AND end_timestamp <= %s AND moderation_type = 'TEMPBAN' AND expired = 0" + tempban_query = f"SELECT target_id, moderation_id FROM moderation_{guild.id} WHERE end_timestamp != 0 AND end_timestamp <= ? AND moderation_type = 'TEMPBAN' AND expired = 0" try: cursor.execute(tempban_query, (time.time(),)) @@ -975,10 +966,10 @@ class Aurora(commands.Cog): except [discord.errors.NotFound, discord.errors.Forbidden, discord.errors.HTTPException] as e: print(f"Failed to unban {user.name}#{user.discriminator} ({user.id}) from {guild.name} ({guild.id})\n{e}") - expiry_query = f"UPDATE `{db}`.`moderation_{guild.id}` SET expired = 1 WHERE (end_timestamp != 0 AND end_timestamp <= %s AND expired = 0 AND moderation_type != 'BLACKLIST') OR (expired = 0 AND resolved = 1 AND moderation_type != 'BLACKLIST')" + expiry_query = f"UPDATE `moderation_{guild.id}` SET expired = 1 WHERE (end_timestamp != 0 AND end_timestamp <= ? AND expired = 0 AND moderation_type != 'BLACKLIST') OR (expired = 0 AND resolved = 1 AND moderation_type != 'BLACKLIST')" cursor.execute(expiry_query, (time.time(),)) - blacklist_query = f"SELECT target_id, moderation_id, role_id FROM moderation_{guild.id} WHERE end_timestamp != 0 AND end_timestamp <= %s AND moderation_type = 'BLACKLIST' AND expired = 0" + blacklist_query = f"SELECT target_id, moderation_id, role_id FROM moderation_{guild.id} WHERE end_timestamp != 0 AND end_timestamp <= ? AND moderation_type = 'BLACKLIST' AND expired = 0" try: cursor.execute(blacklist_query, (time.time(),)) result = cursor.fetchall() diff --git a/aurora/utilities/database.py b/aurora/utilities/database.py index 5ec1883..d5e963a 100644 --- a/aurora/utilities/database.py +++ b/aurora/utilities/database.py @@ -10,7 +10,7 @@ from discord import Guild from redbot.core import data_manager from .logger import logger -from .utils import check_conf, generate_dict, get_next_case_number +from .utils import generate_dict, get_next_case_number def connect() -> sqlite3.Connection: @@ -37,43 +37,39 @@ async def create_guild_table(guild: Guild): except sqlite3.ProgrammingError: query = f""" CREATE TABLE `moderation_{guild.id}` ( - moderation_id INT UNIQUE PRIMARY KEY NOT NULL, - timestamp INT NOT NULL, - moderation_type LONGTEXT NOT NULL, - target_type LONGTEXT NOT NULL, - target_id LONGTEXT NOT NULL, - moderator_id LONGTEXT NOT NULL, - role_id LONGTEXT, - duration LONGTEXT, - end_timestamp INT, - reason LONGTEXT, - resolved BOOL NOT NULL, - resolved_by LONGTEXT, - resolve_reason LONGTEXT, - expired BOOL NOT NULL, - changes JSON NOT NULL, - metadata JSON NOT NULL + moderation_id INTEGER PRIMARY KEY, + timestamp INTEGER NOT NULL, + moderation_type TEXT NOT NULL, + target_type TEXT NOT NULL, + target_id TEXT NOT NULL, + moderator_id TEXT NOT NULL, + role_id TEXT, + duration TEXT, + end_timestamp INTEGER, + reason TEXT, + resolved INTEGER NOT NULL, + resolved_by TEXT, + resolve_reason TEXT, + expired INTEGER NOT NULL, + changes TEXT NOT NULL, + metadata TEXT NOT NULL ) """ cursor.execute(query) - index_query_1 = "CREATE INDEX idx_target_id ON moderation_%s(target_id(25));" - cursor.execute(index_query_1, (guild.id,)) + index_query_1 = "CREATE INDEX idx_target_id ON moderation_{}(target_id);" + cursor.execute(index_query_1.format(guild.id)) - index_query_2 = ( - "CREATE INDEX idx_moderator_id ON moderation_%s(moderator_id(25));" - ) - cursor.execute(index_query_2, (guild.id,)) + index_query_2 = "CREATE INDEX idx_moderator_id ON moderation_{}(moderator_id);" + cursor.execute(index_query_2.format(guild.id)) - index_query_3 = ( - "CREATE INDEX idx_moderation_id ON moderation_%s(moderation_id);" - ) - cursor.execute(index_query_3, (guild.id,)) + index_query_3 = "CREATE INDEX idx_moderation_id ON moderation_{}(moderation_id);" + cursor.execute(index_query_3.format(guild.id)) insert_query = f""" INSERT INTO `moderation_{guild.id}` (moderation_id, timestamp, moderation_type, target_type, target_id, moderator_id, role_id, duration, end_timestamp, reason, resolved, resolved_by, resolve_reason, expired, changes, metadata) - VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) """ insert_values = ( 0, @@ -98,7 +94,7 @@ async def create_guild_table(guild: Guild): database.commit() logger.debug( - "SQLite Table (moderation_%s) created for %s (%s)", + "SQLite Table (moderation_?) created for ? (?)", guild.id, guild.name, guild.id, @@ -122,9 +118,9 @@ async def mysql_log( resolved_by: str = None, resolved_reason: str = None, expired: bool = None, - changes: list = [], - metadata: dict = {}, -) -> int: # pylint: disable=dangerous-default-value + changes: list = [], # pylint: disable=dangerous-default-value + metadata: dict = {}, # pylint: disable=dangerous-default-value +) -> int: if not timestamp: timestamp = int(time.time()) @@ -155,7 +151,7 @@ async def mysql_log( moderation_id = await get_next_case_number(guild_id=guild_id, cursor=cursor) - sql = f"INSERT INTO `moderation_{guild_id}` (moderation_id, timestamp, moderation_type, target_type, target_id, moderator_id, role_id, duration, end_timestamp, reason, resolved, resolved_by, resolve_reason, expired, changes, metadata) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)" + sql = f"INSERT INTO `moderation_{guild_id}` (moderation_id, timestamp, moderation_type, target_type, target_id, moderator_id, role_id, duration, end_timestamp, reason, resolved, resolved_by, resolve_reason, expired, changes, metadata) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)" val = ( moderation_id, timestamp, @@ -210,8 +206,8 @@ async def fetch_case(moderation_id: int, guild_id: str) -> dict: database = connect() cursor = database.cursor() - query = "SELECT * FROM moderation_%s WHERE moderation_id = %s;" - cursor.execute(query, (guild_id, moderation_id)) + query = f"SELECT * FROM moderation_{guild_id} WHERE moderation_id = ?;" + cursor.execute(query, (moderation_id,)) result = cursor.fetchone() cursor.close() diff --git a/aurora/utilities/utils.py b/aurora/utilities/utils.py index 2c5c970..3a52f91 100644 --- a/aurora/utilities/utils.py +++ b/aurora/utilities/utils.py @@ -10,17 +10,6 @@ from redbot.core import commands from .config import config -async def check_conf(config_list: list): - """Checks if any required config options are not set.""" - not_found_list = [] - - for item in config_list: - if await config.item() == " ": - not_found_list.append(item) - - return not_found_list - - def check_permissions( user: User, permissions: list,