diff options
author | 2021-11-02 08:48:42 +0000 | |
---|---|---|
committer | 2021-11-02 16:37:57 +0000 | |
commit | 06d0c8fc3674fa73e118b85b0d3b444f8d7a906f (patch) | |
tree | 3ed67658e26d84d102c0e670d86d66256ca4b8e7 | |
parent | Add support for `!infractions by <m|me|uid>` (diff) |
Address Review
- Add `format_infraction_count` and migrate
- Improve logic for `actor` being `"m"`/`"me"`
- Rename `search_by_user` to `search_by_actor`
- Better Ordering Logic (thanks @ChrisLovering)
- Make embed title consistent with other search embeds
-rw-r--r-- | bot/exts/moderation/infraction/management.py | 44 |
1 files changed, 28 insertions, 16 deletions
diff --git a/bot/exts/moderation/infraction/management.py b/bot/exts/moderation/infraction/management.py index 8c1ef057c..64913831a 100644 --- a/bot/exts/moderation/infraction/management.py +++ b/bot/exts/moderation/infraction/management.py @@ -243,8 +243,9 @@ class ModManagement(commands.Cog): else: user_str = str(user.id) + formatted_infraction_count = self.format_infraction_count(len(infraction_list)) embed = discord.Embed( - title=f"Infractions for {user_str} ({len(infraction_list)} total)", + title=f"Infractions for {user_str} ({formatted_infraction_count} total)", colour=discord.Colour.orange() ) await self.send_infraction_list(ctx, embed, infraction_list) @@ -256,45 +257,44 @@ class ModManagement(commands.Cog): 'bot/infractions/expanded', params={'search': reason} ) + + formatted_infraction_count = self.format_infraction_count(len(infraction_list)) embed = discord.Embed( - title=f"Infractions matching `{reason}` ({len(infraction_list)} total)", + title=f"Infractions matching `{reason}` ({formatted_infraction_count} total)", colour=discord.Colour.orange() ) await self.send_infraction_list(ctx, embed, infraction_list) # endregion - # region: Search infractions by given user + # region: Search for infractions by given actor @infraction_group.command(name="by", aliases=("b",)) - async def search_by_user( + async def search_by_actor( self, ctx: Context, - user: t.Union[discord.Member, t.Literal["m", "me"]], + actor: t.Union[discord.Member, t.Literal["m", "me"]], oldest_first: bool = False ) -> None: """ - Search for infractions made by `user`. + Search for infractions made by `actor`. - Use "m" or "me" as the `user` to get infractions by author. + Use "m" or "me" as the `actor` to get infractions by author. Use "1" for `oldest_first` to send oldest infractions first. """ - if isinstance(user, discord.Member): - moderator_id = user.id - moderator_name_discrim = str(user) - else: - moderator_id = ctx.author.id - moderator_name_discrim = str(ctx.author) + if isinstance(actor, str): + actor = ctx.author infraction_list = await self.bot.api_client.get( 'bot/infractions/expanded', params={ - 'actor__id': str(moderator_id), - 'ordering': f'{["-", ""][oldest_first]}inserted_at' # `'inserted_at'` makes api return oldest first + 'actor__id': str(actor.id), + 'ordering': f'{"-"[oldest_first:]}inserted_at' # `'inserted_at'` makes api return oldest first } ) + formatted_infraction_count = self.format_infraction_count(len(infraction_list)) embed = discord.Embed( - title=f"Infractions by `{moderator_name_discrim}` (`{moderator_id}`)", + title=f"Infractions by `{actor}` ({formatted_infraction_count} total)", colour=discord.Colour.orange() ) @@ -303,6 +303,18 @@ class ModManagement(commands.Cog): # endregion # region: Utility functions + @staticmethod + def format_infraction_count(infraction_count: int) -> str: + """ + Returns a string-formatted infraction count. + + API limits returned infractions to a maximum of 100, so if `infraction_count` + is 100 then we return `"100+"`. Otherwise, return `str(infraction_count)`. + """ + if infraction_count == 100: + return "100+" + return str(infraction_count) + async def send_infraction_list( self, ctx: Context, |