From f34bd29cfca34b79738e3221839a8ebe6cf45b88 Mon Sep 17 00:00:00 2001 From: "Nyeki.py" <84998222+Nekidev@users.noreply.github.com> Date: Sat, 19 Oct 2024 23:46:50 -0300 Subject: [PATCH] feat(bot): :sparkles: Notify the reporter when their report has been accepted. --- payphone/bot.py | 3 +++ payphone/cogs/mods/modals.py | 1 + payphone/cogs/mods/views.py | 39 +++++++++++++++++++++++++++++++----- 3 files changed, 38 insertions(+), 5 deletions(-) diff --git a/payphone/bot.py b/payphone/bot.py index e65e1f9..f5115a2 100644 --- a/payphone/bot.py +++ b/payphone/bot.py @@ -146,6 +146,7 @@ class Payphone(commands.AutoShardedBot): duration: timedelta | None, reason: str, moderator: discord.User | discord.Member | models.User | int | None = None, + report_id: int | None = None ) -> models.Ban: """Bans a user from Payphone. @@ -155,6 +156,7 @@ class Payphone(commands.AutoShardedBot): reason (str): The reason of the ban. moderator (discord.User | discord.Member | models.User | int | None, optional): The moderator who performed the action. + report_id (int | None, optional): The ID of the report the ban is related to. Returns: models.Ban: The newly created ban. @@ -198,6 +200,7 @@ class Payphone(commands.AutoShardedBot): reason=reason, expires_at=until, banned_by_id=mod_id, + report_id=report_id ) await redis.set(key, "1", ex=300) diff --git a/payphone/cogs/mods/modals.py b/payphone/cogs/mods/modals.py index 33067e0..a2edc6d 100644 --- a/payphone/cogs/mods/modals.py +++ b/payphone/cogs/mods/modals.py @@ -61,6 +61,7 @@ class BanUserModal(discord.ui.Modal): duration, self.children[0].value, interaction.user.id, + self.report_id ) try: diff --git a/payphone/cogs/mods/views.py b/payphone/cogs/mods/views.py index 9a75648..2ee144d 100644 --- a/payphone/cogs/mods/views.py +++ b/payphone/cogs/mods/views.py @@ -1,4 +1,5 @@ import discord +from discord import errors from discord.ext import pages from discord.utils import find @@ -6,7 +7,7 @@ from tortoise import transactions from payphone import bot from payphone.db import models -from payphone.core import constants +from payphone.core import constants, formatting as fmt from payphone.cogs.mods import modals, views, embeds @@ -139,7 +140,7 @@ class ReportView(discord.ui.View): report.status = models.ReportStatus.ACCEPTED await report.save() - report = ( + next_report = ( await models.Report.filter(status=models.ReportStatus.ON_REVIEW) .order_by("id") .limit(1) @@ -149,7 +150,35 @@ class ReportView(discord.ui.View): ) total = await models.Report.filter(status=models.ReportStatus.ON_REVIEW).count() - if report is None: + banned_user_ids = ( + await models.Ban.filter(report=report) + .distinct() + .values_list("user_id", flat=True) + ) + + if len(banned_user_ids) > 0: + profiles = [rs.profile for rs in report.call.call_rss if rs.user_id in banned_user_ids] + + try: + await (await self.bot.get_or_fetch_user(report.reported_by_id)).send( + f"🔔 Your report for call `{report.call_id}` helped us ban " + + fmt.text_join( + [ + ( + f"`{p.name}`" + if p.user_id != report.reported_by_id + else "`you`" + ) + for p in profiles + ] + ) + + ". Thank you for your report!" + ) + + except errors.DiscordException: + pass + + if next_report is None: await interaction.response.edit_message( content="✅ No reports left, have this cookie 🍪 !!", embed=None, @@ -158,8 +187,8 @@ class ReportView(discord.ui.View): return await interaction.response.edit_message( - embed=embeds.ReportEmbed(self.bot, report), - view=views.ReportView(self.bot, report, total), + embed=embeds.ReportEmbed(self.bot, next_report), + view=views.ReportView(self.bot, next_report, total), ) @discord.ui.button(label="Decline", style=discord.ButtonStyle.red, row=2)