diff --git a/aurora/importers/aurora.py b/aurora/importers/aurora.py index 44cab98..29d153e 100644 --- a/aurora/importers/aurora.py +++ b/aurora/importers/aurora.py @@ -62,7 +62,12 @@ class ImportAuroraView(ui.View): case["target_type"] = "USER" if "role_id" not in case or not case["role_id"]: - case["role_id"] = 0 + case["role_id"] = None + else: + case["role_id"] = int(case["role_id"]) + + case["target_id"] = int(case["target_id"]) + case["moderator_id"] = int(case["moderator_id"]) if "changes" not in case or not case["changes"]: case["changes"] = [] @@ -74,11 +79,11 @@ class ImportAuroraView(ui.View): if not metadata.get("imported_from"): metadata.update({"imported_from": "Aurora"}) - if case["duration"] != "NULL": + if case["duration"] != "NULL" and case["duration"] is not None: hours, minutes, seconds = map(int, case["duration"].split(":")) duration = timedelta(hours=hours, minutes=minutes, seconds=seconds) else: - duration = "NULL" + duration = None await mysql_log( self.ctx.guild.id, diff --git a/aurora/models.py b/aurora/models.py index d93c025..c4013cb 100644 --- a/aurora/models.py +++ b/aurora/models.py @@ -75,4 +75,8 @@ class JSONEncoder(json.JSONEncoder): return int(o.timestamp()) if isinstance(o, timedelta): return str(o) + if isinstance(o, Moderation): + return o.model_dump() + if isinstance(o, None): + return "NULL" return super().default(o) diff --git a/aurora/utilities/database.py b/aurora/utilities/database.py index a2bcb92..95ad7c8 100644 --- a/aurora/utilities/database.py +++ b/aurora/utilities/database.py @@ -8,8 +8,7 @@ from discord import Guild from redbot.core import data_manager from .logger import logger -from .utils import (convert_timedelta_to_str, generate_dict, - get_next_case_number) +from .utils import convert_timedelta_to_str, generate_dict, get_next_case_number def connect() -> sqlite3.Connection: @@ -42,9 +41,9 @@ async def create_guild_table(guild: Guild): 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, + target_id INTEGER NOT NULL, + moderator_id INTEGER NOT NULL, + role_id INTEGER, duration TEXT, end_timestamp INTEGER, reason TEXT, @@ -52,8 +51,8 @@ async def create_guild_table(guild: Guild): resolved_by TEXT, resolve_reason TEXT, expired INTEGER NOT NULL, - changes TEXT NOT NULL, - metadata TEXT NOT NULL + changes JSON NOT NULL, + metadata JSON NOT NULL ) """ cursor.execute(query) @@ -111,8 +110,8 @@ async def mysql_log( target_type: str, target_id: int, role_id: int, - duration: timedelta, - reason: str, + duration: timedelta = None, + reason: str = None, database: sqlite3.Connection = None, timestamp: int = None, resolved: bool = False, @@ -125,13 +124,14 @@ async def mysql_log( if not timestamp: timestamp = int(time.time()) - if duration != "NULL": + if duration != "NULL" and duration is not None: end_timedelta = datetime.fromtimestamp(timestamp) + duration end_timestamp = int(end_timedelta.timestamp()) duration = convert_timedelta_to_str(duration) else: - end_timestamp = 0 + duration = None + end_timestamp = None if not expired: if int(time.time()) > end_timestamp: @@ -139,11 +139,17 @@ async def mysql_log( else: expired = 0 - if resolved_by is None: - resolved_by = "NULL" + if reason == "NULL": + reason = None - if resolved_reason is None: - resolved_reason = "NULL" + if resolved_by == "NULL": + resolved_by = None + + if resolved_reason == "NULL": + resolved_reason = None + + if role_id == 0: + role_id = None if not database: database = connect()