diff --git a/cogs/moderation/__init__.py b/cogs/moderation/__init__.py index 459ae0d..56b43a2 100644 --- a/cogs/moderation/__init__.py +++ b/cogs/moderation/__init__.py @@ -51,8 +51,8 @@ class Moderation(commands.GroupCog, name="moderation"): await self._invoke_hybrid(context, "kick", user=user, reason=reason) @moderation_group.command(name="purge") - async def moderation_group_purge(self, context: Context, amount: int): - await self._invoke_hybrid(context, "purge", amount=amount) + async def moderation_group_purge(self, context: Context, amount: int, user: discord.Member = None): + await self._invoke_hybrid(context, "purge", amount=amount, user=user) @moderation_group.command(name="warnings") async def moderation_group_warnings(self, context: Context): @@ -91,8 +91,8 @@ class Moderation(commands.GroupCog, name="moderation"): name="purge", description="Delete a number of messages." ) - async def purge(self, context, amount: int): - return await purge_command()(self, context, amount=amount) + async def purge(self, context, amount: int, user: discord.Member = None): + return await purge_command()(self, context, amount=amount, user=user) @commands.check(_require_group_prefix) @commands.hybrid_command( diff --git a/cogs/moderation/purge.py b/cogs/moderation/purge.py index a18b185..ed5b9a5 100644 --- a/cogs/moderation/purge.py +++ b/cogs/moderation/purge.py @@ -3,7 +3,6 @@ from discord import app_commands from discord.ext import commands from discord.ext.commands import Context - def purge_command(): @commands.hybrid_command( name="purge", @@ -11,16 +10,38 @@ def purge_command(): ) @commands.has_guild_permissions(manage_messages=True) @commands.bot_has_permissions(manage_messages=True) - @app_commands.describe(amount="The amount of messages that should be deleted.") - async def purge(self, context, amount: int): - await context.send("Deleting messages...") - purged_messages = await context.channel.purge(limit=amount + 1) + @app_commands.describe( + amount="The amount of messages that should be deleted.", + user="The user whose messages should be deleted (optional)." + ) + async def purge(self, context, amount: int, user: discord.Member = None): + if context.interaction: + await context.defer(ephemeral=True) + + if user: + deleted_count = 0 + + def check(message): + nonlocal deleted_count + if message.author == user and deleted_count < amount: + deleted_count += 1 + return True + return False + + purged_messages = await context.channel.purge(limit=300, check=check) + else: + purged_messages = await context.channel.purge(limit=amount) + embed = discord.Embed( title="Purge", - description=f"**{context.author}** cleared **{len(purged_messages)-1}** messages!", + description=f"**{context.author}** cleared **{len(purged_messages)}** messages!" + (f" from **{user}**" if user else ""), color=0x7289DA, ) embed.set_author(name="Moderation", icon_url="https://yes.nighty.works/raw/CPKHQd.png") - await context.channel.send(embed=embed) + + if context.interaction: + await context.send(embed=embed, ephemeral=True) + else: + await context.send(embed=embed, delete_after=10) - return purge + return purge \ No newline at end of file