diff --git a/payphone/bot.py b/payphone/bot.py index 74c704f..3cd07ab 100644 --- a/payphone/bot.py +++ b/payphone/bot.py @@ -312,6 +312,10 @@ class Payphone(commands.AutoShardedBot): await ban.save() + await models.User.filter(id=user_id).update( + bans_count=expressions.F("bans_count") + 1 + ) + await self.redis.set(f"banned:{user_id}", 1, exat=expires_at) return ban diff --git a/payphone/cogs/admin/cog.py b/payphone/cogs/admin/cog.py index ec2bf66..975fb5a 100644 --- a/payphone/cogs/admin/cog.py +++ b/payphone/cogs/admin/cog.py @@ -52,7 +52,7 @@ class Admin(base.Cog): await ctx.send( f"✅ Toggled the moderator role {'on' if user.is_moderator else 'off'} for <@{user.id}>.", - allowed_mentions=discord.AllowedMentions(users=False) + allowed_mentions=discord.AllowedMentions(users=False), ) @commands.command(aliases=["b"]) @@ -168,12 +168,14 @@ class Admin(base.Cog): .select_related("reported_by") .first() ) + remaining_reports = await models.Report.filter(resolved=False).count() if report is None: return await ctx.send("✅ No reports left, have this cookie 🍪 !!") await ctx.send( - embed=embeds.report_embed(report), view=views.ReportView(self.bot, report) + embed=embeds.report_embed(report), + view=views.ReportView(self.bot, report, (0, remaining_reports)), ) @commands.command(aliases=["bs", "ws"]) @@ -208,6 +210,10 @@ class Admin(base.Cog): .order_by("-created_at") ) + if user.bans_count != len(bans): + user.bans_count = len(bans) + await user.save() + if not bans and not warns: if user.bans_count or user.warns_count: await ctx.send( @@ -262,6 +268,7 @@ class Admin(base.Cog): if ban.expired_by else "" ) + + f" · {user.warns_count}w, {user.bans_count}b" ), ) if ban.report @@ -281,6 +288,7 @@ class Admin(base.Cog): if ban.expired_by else "" ) + + f" · {user.warns_count}w, {user.bans_count}b" ), ) ) @@ -315,7 +323,7 @@ class Admin(base.Cog): ), thumbnail=warn.report.user_avatar_url, footer=discord.EmbedFooter( - text=f"Warned by {(await self.bot.get_or_fetch_user(warn.created_by.id)).display_name}" + text=f"Warned by {(await self.bot.get_or_fetch_user(warn.created_by.id)).display_name} · {user.warns_count}w, {user.bans_count}b" ), ) if warn.report @@ -329,7 +337,7 @@ class Admin(base.Cog): ) ], footer=discord.EmbedFooter( - text=f"Warned by {(await self.bot.get_or_fetch_user(warn.created_by.id)).display_name}" + text=f"Warned by {(await self.bot.get_or_fetch_user(warn.created_by.id)).display_name} · {user.warns_count}w, {user.bans_count}b" ), ) ) @@ -464,7 +472,7 @@ class Admin(base.Cog): @checks.is_moderator() async def lock(self, ctx: commands.Context) -> None: """Closes and locks a thread. - + Permissions: - Bot Moderator - In Payphone Hub diff --git a/payphone/cogs/admin/views.py b/payphone/cogs/admin/views.py index 9e341f0..c13e674 100644 --- a/payphone/cogs/admin/views.py +++ b/payphone/cogs/admin/views.py @@ -11,18 +11,32 @@ from payphone.cogs.admin import embeds class ReportView(discord.ui.View): """The report view.""" - def __init__(self, bot: Payphone, report: models.Report) -> None: + def __init__( + self, bot: Payphone, report: models.Report, counter: tuple[int, int] + ) -> None: """Initializes the ReportView. Args: bot (Payphone): The bot. report (models.Report): The report. + counter (tuple[int, int]): The amount of reports checked during this session, and the + total amount of reports assigned to be checked during this session. """ super().__init__(timeout=None) + self.add_item( + discord.ui.Button( + label=f"{counter[0]}/{counter[1]}", + disabled=True, + style=discord.ButtonStyle.gray, + row=1, + ) + ) + self.bot = bot self.report = report + self.counter = counter @discord.ui.select( placeholder="Select an action", @@ -70,6 +84,7 @@ class ReportView(discord.ui.View): .select_related("reported_by") .first() ) + reports_remaining = await models.Report.filter(resolved=False).count() if report is None: self.stop() @@ -82,7 +97,12 @@ class ReportView(discord.ui.View): else: await interaction.response.edit_message( - embed=embeds.report_embed(report), view=ReportView(self.bot, report) + embed=embeds.report_embed(report), + view=ReportView( + self.bot, + report, + (self.counter[0] + 1, reports_remaining + self.counter[0] + 1), + ), ) user = await models.User.get_cache_or_db(self.bot.redis, self.report.user_id) @@ -255,6 +275,7 @@ class ReportView(discord.ui.View): await self.report.save() report = await models.Report.filter(resolved=False).first() + reports_remaining = await models.Report.filter(resolved=False).count() if report is None: self.stop() @@ -266,5 +287,10 @@ class ReportView(discord.ui.View): ) await interaction.response.edit_message( - embed=embeds.report_embed(report), view=ReportView(self.bot, report) + embed=embeds.report_embed(report), + view=ReportView( + self.bot, + report, + (self.counter[0] + 1, reports_remaining + self.counter[0] + 1), + ), ) diff --git a/payphone/cogs/calls/cog.py b/payphone/cogs/calls/cog.py index f52fb6b..96e8045 100644 --- a/payphone/cogs/calls/cog.py +++ b/payphone/cogs/calls/cog.py @@ -567,7 +567,8 @@ class Calls(base.Cog): await webhook.edit_message(propagation_id, content=payload.data["content"]) @commands.message_command( - name="Report Message" if not constants.IS_DEBUG else "(Dev) Report Message" + name="Report Message" if not constants.IS_DEBUG else "(Dev) Report Message", + guild_ids=[constants.PAYPHONE_HUB_ID] if not constants.IS_DEBUG else None, ) async def report_message( self, ctx: discord.ApplicationContext, message: discord.Message diff --git a/uv.lock b/uv.lock index 069e9e8..cc2171a 100644 --- a/uv.lock +++ b/uv.lock @@ -465,7 +465,7 @@ wheels = [ [[package]] name = "payphone" -version = "0.84.0" +version = "0.85.0" source = { virtual = "." } dependencies = [ { name = "aerich" },