From 6219f0da67c74dd52401d93484605ee7328e66f5 Mon Sep 17 00:00:00 2001 From: Michael H Date: Fri, 17 Jan 2020 18:51:49 -0500 Subject: [PATCH] [Modlog API] Add resolution for people inpacted by bad casetypes (#3333) * add resolution for people inpacted by bad casetypes * *some* amount of notice on this * Fine. * clearer warnings * actually, unnneded --- redbot/cogs/modlog/modlog.py | 7 +++++++ redbot/core/modlog.py | 32 +++++++++++++++++++++----------- 2 files changed, 28 insertions(+), 11 deletions(-) diff --git a/redbot/cogs/modlog/modlog.py b/redbot/cogs/modlog/modlog.py index 0ab2f85c6..3c9f1ba55 100644 --- a/redbot/cogs/modlog/modlog.py +++ b/redbot/cogs/modlog/modlog.py @@ -26,6 +26,13 @@ class ModLog(commands.Cog): """Manage modlog settings.""" pass + @checks.is_owner() + @modlogset.command(hidden=True, name="fixcasetypes") + async def reapply_audittype_migration(self, ctx: commands.Context): + """Command to fix misbehaving casetypes.""" + await modlog.handle_auditype_key() + await ctx.tick() + @modlogset.command() @commands.guild_only() async def modlog(self, ctx: commands.Context, channel: discord.TextChannel = None): diff --git a/redbot/core/modlog.py b/redbot/core/modlog.py index 5758b9b33..700203497 100644 --- a/redbot/core/modlog.py +++ b/redbot/core/modlog.py @@ -142,6 +142,18 @@ async def _init(bot: Red): bot.add_listener(on_member_unban) +async def handle_auditype_key(): + all_casetypes = { + casetype_name: { + inner_key: inner_value + for inner_key, inner_value in casetype_data.items() + if inner_key != "audit_type" + } + for casetype_name, casetype_data in (await _conf.custom(_CASETYPES).all()).items() + } + await _conf.custom(_CASETYPES).set(all_casetypes) + + async def _migrate_config(from_version: int, to_version: int): if from_version == to_version: return @@ -170,16 +182,7 @@ async def _migrate_config(from_version: int, to_version: int): await _conf.guild(cast(discord.Guild, discord.Object(id=guild_id))).clear_raw("cases") if from_version < 3 <= to_version: - all_casetypes = { - casetype_name: { - inner_key: inner_value - for inner_key, inner_value in casetype_data.items() - if inner_key != "audit_type" - } - for casetype_name, casetype_data in (await _conf.custom(_CASETYPES).all()).items() - } - - await _conf.custom(_CASETYPES).set(all_casetypes) + await handle_auditype_key() await _conf.schema_version.set(3) if from_version < 4 <= to_version: @@ -507,8 +510,15 @@ class CaseType: self.image = image self.case_str = case_str self.guild = guild + + if "audit_type" in kwargs: + kwargs.pop("audit_type", None) + log.warning( + "Fix this using the hidden command: `modlogset fixcasetypes` in Discord: " + "Got outdated key in casetype: audit_type" + ) if kwargs: - log.warning("Got unexpected keys in case %s", ",".join(kwargs.keys())) + log.warning("Got unexpected key(s) in casetype: %s", ",".join(kwargs.keys())) async def to_json(self): """Transforms the case type into a dict and saves it"""