feat(shard): ✨ Ban people with over 3 warns, even if the moderator specifies a warn.

This commit is contained in:
2025-03-30 23:53:27 -03:00
parent 0200da236b
commit d0f8962654
6 changed files with 50 additions and 5 deletions
+8 -1
View File
@@ -115,6 +115,9 @@ class Admin(base.Cog):
except discord.Forbidden: except discord.Forbidden:
pass pass
user: models.User = await models.User.get(id=user.id)
user.set_cache(self.bot.redis)
@commands.command(aliases=["sup"]) @commands.command(aliases=["sup"])
@commands.is_owner() @commands.is_owner()
async def supporter( async def supporter(
@@ -159,7 +162,11 @@ class Admin(base.Cog):
- Bot Moderator - Bot Moderator
""" """
report = await models.Report.filter(resolved=False).select_related("reported_by").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 🍪 !!")
+9 -2
View File
@@ -79,7 +79,7 @@ class ReportView(discord.ui.View):
user = await models.User.get_cache_or_db(self.bot.redis, self.report.user_id) user = await models.User.get_cache_or_db(self.bot.redis, self.report.user_id)
if select.values[0] == "warn": if select.values[0] == "warn" and user.warns_count < 3:
user.warns_count += 1 user.warns_count += 1
await user.save(force_update=True) await user.save(force_update=True)
await user.set_cache(self.bot.redis) await user.set_cache(self.bot.redis)
@@ -104,6 +104,13 @@ class ReportView(discord.ui.View):
), ),
) )
warn = models.Warn(
user_id=self.report.user_id,
report=self.report,
created_by_id=interaction.user.id,
)
await warn.save()
try: try:
await (await self.bot.get_or_fetch_user(self.report.user_id)).send( await (await self.bot.get_or_fetch_user(self.report.user_id)).send(
embed=embed embed=embed
@@ -156,7 +163,7 @@ class ReportView(discord.ui.View):
expires_at = None expires_at = None
if select.values[0] == "ban": if select.values[0] in ["ban", "warn"]:
expiry_times = { expiry_times = {
1: datetime.now(timezone.utc) + timedelta(days=1), 1: datetime.now(timezone.utc) + timedelta(days=1),
2: datetime.now(timezone.utc) + timedelta(days=7), 2: datetime.now(timezone.utc) + timedelta(days=7),
+3 -1
View File
@@ -2,6 +2,8 @@ from dataclasses import dataclass
import orjson import orjson
import discord
from payphone.db import models from payphone.db import models
from payphone.bot import Payphone from payphone.bot import Payphone
from payphone.core import masks from payphone.core import masks
@@ -551,7 +553,7 @@ class CallHandler:
return return
for webhook in await channel.webhooks(): for webhook in await channel.webhooks():
if webhook.name == "Payphone" and webhook.token is not None: if webhook.user == self.bot.user and webhook.token is not None:
await self.bot.redis.hset( await self.bot.redis.hset(
"calls:channels:webhooks", channel_id, webhook.url "calls:channels:webhooks", channel_id, webhook.url
) )
@@ -0,0 +1,19 @@
from tortoise import BaseDBAsyncClient
async def upgrade(db: BaseDBAsyncClient) -> str:
return """
CREATE TABLE IF NOT EXISTS "warn" (
"id" SERIAL NOT NULL PRIMARY KEY,
"user_id" BIGINT NOT NULL,
"reason" TEXT,
"created_at" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
"created_by_id" BIGINT NOT NULL REFERENCES "user" ("id") ON DELETE CASCADE,
"report_id" BIGINT REFERENCES "report" ("id") ON DELETE CASCADE
);
COMMENT ON TABLE "warn" IS 'A warn.';"""
async def downgrade(db: BaseDBAsyncClient) -> str:
return """
DROP TABLE IF EXISTS "warn";"""
+10
View File
@@ -144,6 +144,16 @@ class User(models.Model):
) )
class Warn(models.Model):
"""A warn."""
user_id = fields.BigIntField()
report = fields.ForeignKeyField("models.Report", null=True)
reason = fields.TextField(null=True, default=None)
created_at = fields.DatetimeField(auto_now_add=True)
created_by = fields.ForeignKeyField("models.User", related_name="created_warns")
class Ban(models.Model): class Ban(models.Model):
""" """
A ban. A ban.
Generated
+1 -1
View File
@@ -414,7 +414,7 @@ wheels = [
[[package]] [[package]]
name = "payphone" name = "payphone"
version = "0.64.0" version = "0.65.0"
source = { virtual = "." } source = { virtual = "." }
dependencies = [ dependencies = [
{ name = "aerich" }, { name = "aerich" },