feat(shard): ✨ Let people know when their report helped moderators ban or warn someone.
This commit is contained in:
@@ -159,7 +159,7 @@ class Admin(base.Cog):
|
|||||||
- Bot Moderator
|
- Bot Moderator
|
||||||
"""
|
"""
|
||||||
|
|
||||||
report = await models.Report.filter(resolved=False).first()
|
report = await models.Report.filter(resolved=False).select_related("reported_by").first()
|
||||||
|
|
||||||
if report is None:
|
if report is None:
|
||||||
return await ctx.send("✅ No reports left, have this cookie 🍪 !!")
|
return await ctx.send("✅ No reports left, have this cookie 🍪 !!")
|
||||||
|
|||||||
@@ -57,7 +57,11 @@ class ReportView(discord.ui.View):
|
|||||||
self.report.resolved = True
|
self.report.resolved = True
|
||||||
await self.report.save()
|
await self.report.save()
|
||||||
|
|
||||||
report = await models.Report.filter(resolved=False).first()
|
report = (
|
||||||
|
await models.Report.filter(resolved=False)
|
||||||
|
.select_related("reported_by")
|
||||||
|
.first()
|
||||||
|
)
|
||||||
|
|
||||||
if report is None:
|
if report is None:
|
||||||
self.stop()
|
self.stop()
|
||||||
@@ -108,6 +112,16 @@ class ReportView(discord.ui.View):
|
|||||||
except discord.Forbidden:
|
except discord.Forbidden:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
try:
|
||||||
|
await (
|
||||||
|
await self.bot.get_or_fetch_user(self.report.reported_by.id)
|
||||||
|
).send(
|
||||||
|
f"🔔 You've helped us warn `{(await self.bot.get_or_fetch_user(self.report.user_id)).display_name}` with your report. Thank you so much!"
|
||||||
|
)
|
||||||
|
|
||||||
|
except discord.Forbidden:
|
||||||
|
pass
|
||||||
|
|
||||||
elif select.values[0] == "approve":
|
elif select.values[0] == "approve":
|
||||||
embed = discord.Embed(
|
embed = discord.Embed(
|
||||||
color=constants.APPROVE_COLOR,
|
color=constants.APPROVE_COLOR,
|
||||||
@@ -198,6 +212,16 @@ class ReportView(discord.ui.View):
|
|||||||
except discord.Forbidden:
|
except discord.Forbidden:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
try:
|
||||||
|
await (
|
||||||
|
await self.bot.get_or_fetch_user(self.report.reported_by.id)
|
||||||
|
).send(
|
||||||
|
f"🔔 You've helped us ban `{(await self.bot.get_or_fetch_user(self.report.user_id)).display_name}` with your report. Thank you so much!"
|
||||||
|
)
|
||||||
|
|
||||||
|
except discord.Forbidden:
|
||||||
|
pass
|
||||||
|
|
||||||
@discord.ui.button(label="Skip", style=discord.ButtonStyle.gray)
|
@discord.ui.button(label="Skip", style=discord.ButtonStyle.gray)
|
||||||
async def skip_callback(
|
async def skip_callback(
|
||||||
self, _button: discord.ui.Button, interaction: discord.Interaction
|
self, _button: discord.ui.Button, interaction: discord.Interaction
|
||||||
|
|||||||
@@ -216,7 +216,7 @@ class Calls(base.Cog):
|
|||||||
if message.author.bot or ctx.valid or message.author.system:
|
if message.author.bot or ctx.valid or message.author.system:
|
||||||
return
|
return
|
||||||
|
|
||||||
if message.type in [discord.MessageType.default, discord.MessageType.reply]:
|
if message.type not in [discord.MessageType.default, discord.MessageType.reply]:
|
||||||
return
|
return
|
||||||
|
|
||||||
if await self.bot.is_banned(message.author.id):
|
if await self.bot.is_banned(message.author.id):
|
||||||
@@ -630,6 +630,7 @@ class Calls(base.Cog):
|
|||||||
"reply_user_avatar_url": (
|
"reply_user_avatar_url": (
|
||||||
replying_to.author.display_avatar.url if replying_to else None
|
replying_to.author.display_avatar.url if replying_to else None
|
||||||
),
|
),
|
||||||
|
"reported_by_id": ctx.author.id,
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,13 @@
|
|||||||
|
from tortoise import BaseDBAsyncClient
|
||||||
|
|
||||||
|
|
||||||
|
async def upgrade(db: BaseDBAsyncClient) -> str:
|
||||||
|
return """
|
||||||
|
ALTER TABLE "report" ADD "reported_by_id" BIGINT;
|
||||||
|
ALTER TABLE "report" ADD CONSTRAINT "fk_report_user_3a7d2f49" FOREIGN KEY ("reported_by_id") REFERENCES "user" ("id") ON DELETE CASCADE;"""
|
||||||
|
|
||||||
|
|
||||||
|
async def downgrade(db: BaseDBAsyncClient) -> str:
|
||||||
|
return """
|
||||||
|
ALTER TABLE "report" DROP CONSTRAINT IF EXISTS "fk_report_user_3a7d2f49";
|
||||||
|
ALTER TABLE "report" DROP COLUMN "reported_by_id";"""
|
||||||
+12
-3
@@ -28,8 +28,13 @@ class Report(models.Model):
|
|||||||
reply_user_avatar_url = fields.TextField(null=True, default=None)
|
reply_user_avatar_url = fields.TextField(null=True, default=None)
|
||||||
created_at = fields.DatetimeField(auto_now_add=True)
|
created_at = fields.DatetimeField(auto_now_add=True)
|
||||||
resolved = fields.BooleanField(default=False, index=True)
|
resolved = fields.BooleanField(default=False, index=True)
|
||||||
|
reported_by = fields.ForeignKeyField(
|
||||||
|
"models.User", related_name="reports", null=True
|
||||||
|
)
|
||||||
resolved_at = fields.DatetimeField(null=True)
|
resolved_at = fields.DatetimeField(null=True)
|
||||||
resolved_by = fields.ForeignKeyField("models.User", null=True)
|
resolved_by = fields.ForeignKeyField(
|
||||||
|
"models.User", related_name="resolved_reports", null=True
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class UserFlag(enum.IntFlag):
|
class UserFlag(enum.IntFlag):
|
||||||
@@ -150,7 +155,9 @@ class Ban(models.Model):
|
|||||||
created_at = fields.DatetimeField(auto_now_add=True)
|
created_at = fields.DatetimeField(auto_now_add=True)
|
||||||
expires_at = fields.DatetimeField(null=True)
|
expires_at = fields.DatetimeField(null=True)
|
||||||
created_by = fields.ForeignKeyField("models.User", related_name="created_bans")
|
created_by = fields.ForeignKeyField("models.User", related_name="created_bans")
|
||||||
expired_by = fields.ForeignKeyField("models.User", related_name="expired_bans", null=True)
|
expired_by = fields.ForeignKeyField(
|
||||||
|
"models.User", related_name="expired_bans", null=True
|
||||||
|
)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def is_expired(self) -> bool:
|
def is_expired(self) -> bool:
|
||||||
@@ -158,7 +165,9 @@ class Ban(models.Model):
|
|||||||
Whether the ban is expired.
|
Whether the ban is expired.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
return self.expires_at is not None and self.expires_at < datetime.now(timezone.utc)
|
return self.expires_at is not None and self.expires_at < datetime.now(
|
||||||
|
timezone.utc
|
||||||
|
)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
"""
|
"""
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
version = 1
|
version = 1
|
||||||
revision = 1
|
|
||||||
requires-python = ">=3.12"
|
requires-python = ">=3.12"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -128,7 +127,7 @@ version = "8.1.8"
|
|||||||
source = { registry = "https://pypi.org/simple" }
|
source = { registry = "https://pypi.org/simple" }
|
||||||
dependencies = [
|
dependencies = [
|
||||||
{ name = "anyio" },
|
{ name = "anyio" },
|
||||||
{ name = "colorama", marker = "sys_platform == 'win32'" },
|
{ name = "colorama", marker = "platform_system == 'Windows'" },
|
||||||
]
|
]
|
||||||
sdist = { url = "https://files.pythonhosted.org/packages/cb/b5/e1e5fdf1c1bb7e6e614987c120a98d9324bf8edfaa5f5cd16a6235c9d91b/asyncclick-8.1.8.tar.gz", hash = "sha256:0f0eb0f280e04919d67cf71b9fcdfb4db2d9ff7203669c40284485c149578e4c", size = 232900 }
|
sdist = { url = "https://files.pythonhosted.org/packages/cb/b5/e1e5fdf1c1bb7e6e614987c120a98d9324bf8edfaa5f5cd16a6235c9d91b/asyncclick-8.1.8.tar.gz", hash = "sha256:0f0eb0f280e04919d67cf71b9fcdfb4db2d9ff7203669c40284485c149578e4c", size = 232900 }
|
||||||
wheels = [
|
wheels = [
|
||||||
@@ -198,7 +197,7 @@ name = "click"
|
|||||||
version = "8.1.8"
|
version = "8.1.8"
|
||||||
source = { registry = "https://pypi.org/simple" }
|
source = { registry = "https://pypi.org/simple" }
|
||||||
dependencies = [
|
dependencies = [
|
||||||
{ name = "colorama", marker = "sys_platform == 'win32'" },
|
{ name = "colorama", marker = "platform_system == 'Windows'" },
|
||||||
]
|
]
|
||||||
sdist = { url = "https://files.pythonhosted.org/packages/b9/2e/0090cbf739cee7d23781ad4b89a9894a41538e4fcf4c31dcdd705b78eb8b/click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a", size = 226593 }
|
sdist = { url = "https://files.pythonhosted.org/packages/b9/2e/0090cbf739cee7d23781ad4b89a9894a41538e4fcf4c31dcdd705b78eb8b/click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a", size = 226593 }
|
||||||
wheels = [
|
wheels = [
|
||||||
@@ -414,7 +413,7 @@ wheels = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "payphone"
|
name = "payphone"
|
||||||
version = "0.60.0"
|
version = "0.61.0"
|
||||||
source = { virtual = "." }
|
source = { virtual = "." }
|
||||||
dependencies = [
|
dependencies = [
|
||||||
{ name = "aerich" },
|
{ name = "aerich" },
|
||||||
|
|||||||
Reference in New Issue
Block a user