diff --git a/redbot/cogs/modlog/modlog.py b/redbot/cogs/modlog/modlog.py index aa406c819..03f677d86 100644 --- a/redbot/cogs/modlog/modlog.py +++ b/redbot/cogs/modlog/modlog.py @@ -7,7 +7,7 @@ import discord from redbot.core import checks, commands, modlog from redbot.core.bot import Red from redbot.core.i18n import Translator, cog_i18n -from redbot.core.utils.chat_formatting import box +from redbot.core.utils.chat_formatting import box, pagify from redbot.core.utils.menus import DEFAULT_CONTROLS, menu _ = Translator("ModLog", __file__) @@ -129,39 +129,76 @@ class ModLog(commands.Cog): @commands.guild_only() async def casesfor(self, ctx: commands.Context, *, member: Union[discord.Member, int]): """Display cases for the specified member.""" - try: - if isinstance(member, int): - cases = await modlog.get_cases_for_member( - bot=ctx.bot, guild=ctx.guild, member_id=member + async with ctx.typing(): + try: + if isinstance(member, int): + cases = await modlog.get_cases_for_member( + bot=ctx.bot, guild=ctx.guild, member_id=member + ) + else: + cases = await modlog.get_cases_for_member( + bot=ctx.bot, guild=ctx.guild, member=member + ) + except discord.NotFound: + return await ctx.send(_("That user does not exist.")) + except discord.HTTPException: + return await ctx.send( + _("Something unexpected went wrong while fetching that user by ID.") ) - else: - cases = await modlog.get_cases_for_member( - bot=ctx.bot, guild=ctx.guild, member=member + + if not cases: + return await ctx.send(_("That user does not have any cases.")) + + embed_requested = await ctx.embed_requested() + if embed_requested: + rendered_cases = [await case.message_content(embed=True) for case in cases] + elif not embed_requested: + rendered_cases = [] + for case in cases: + message = _("{case}\n**Timestamp:** {timestamp}").format( + case=await case.message_content(embed=False), + timestamp=datetime.utcfromtimestamp(case.created_at).strftime( + "%Y-%m-%d %H:%M:%S UTC" + ), + ) + rendered_cases.append(message) + + await menu(ctx, rendered_cases, DEFAULT_CONTROLS) + + @commands.command() + @commands.guild_only() + async def listcases(self, ctx: commands.Context, *, member: Union[discord.Member, int]): + """List cases for the specified member.""" + async with ctx.typing(): + try: + if isinstance(member, int): + cases = await modlog.get_cases_for_member( + bot=ctx.bot, guild=ctx.guild, member_id=member + ) + else: + cases = await modlog.get_cases_for_member( + bot=ctx.bot, guild=ctx.guild, member=member + ) + except discord.NotFound: + return await ctx.send(_("That user does not exist.")) + except discord.HTTPException: + return await ctx.send( + _("Something unexpected went wrong while fetching that user by ID.") ) - except discord.NotFound: - return await ctx.send(_("That user does not exist.")) - except discord.HTTPException: - return await ctx.send( - _("Something unexpected went wrong while fetching that user by ID.") - ) + if not cases: + return await ctx.send(_("That user does not have any cases.")) - if not cases: - return await ctx.send(_("That user does not have any cases.")) - - embed_requested = await ctx.embed_requested() - if embed_requested: - rendered_cases = [await case.message_content(embed=True) for case in cases] - elif not embed_requested: rendered_cases = [] + message = "" for case in cases: - message = _("{case}\n**Timestamp:** {timestamp}").format( + message += _("{case}\n**Timestamp:** {timestamp}\n\n").format( case=await case.message_content(embed=False), timestamp=datetime.utcfromtimestamp(case.created_at).strftime( "%Y-%m-%d %H:%M:%S UTC" ), ) - rendered_cases.append(message) - + for page in pagify(message, ["\n\n", "\n"], priority=True): + rendered_cases.append(page) await menu(ctx, rendered_cases, DEFAULT_CONTROLS) @commands.command()