aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Izan <[email protected]>2021-11-02 08:48:42 +0000
committerGravatar Izan <[email protected]>2021-11-02 16:37:57 +0000
commit06d0c8fc3674fa73e118b85b0d3b444f8d7a906f (patch)
tree3ed67658e26d84d102c0e670d86d66256ca4b8e7
parentAdd 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.py44
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,