feat(bot): ✨ Support for banning and warning by username.

This commit is contained in:
Nyeki.py
2024-10-18 13:23:29 -03:00
parent 8c628400e1
commit 91b3f7d14a
3 changed files with 19 additions and 6 deletions
+6 -2
View File
@@ -55,6 +55,11 @@ class DiscordUserID(converter.Converter):
): ):
return int(argument.split("?", 1)[0].rsplit("/", 1)[1]) return int(argument.split("?", 1)[0].rsplit("/", 1)[1])
user = await models.User.get_or_none(username=argument)
if user is not None:
return user.id
if argument.lower() in ["reply", "."]: if argument.lower() in ["reply", "."]:
if ctx.message.reference is not None: if ctx.message.reference is not None:
ref = ctx.message.reference ref = ctx.message.reference
@@ -73,7 +78,6 @@ class DiscordUserID(converter.Converter):
raise converter.BadArgument() raise converter.BadArgument()
else: return msg.author.id
return msg.author.id
raise converter.BadArgument() raise converter.BadArgument()
@@ -0,0 +1,11 @@
from tortoise import BaseDBAsyncClient
async def upgrade(db: BaseDBAsyncClient) -> str:
return """
CREATE INDEX "idx_user_usernam_9987ab" ON "user" ("username");"""
async def downgrade(db: BaseDBAsyncClient) -> str:
return """
DROP INDEX "idx_user_usernam_9987ab";"""
+2 -4
View File
@@ -13,7 +13,7 @@ from payphone.core import config, constants
class User(models.Model): class User(models.Model):
id: int = fields.BigIntField(primary_key=True) id: int = fields.BigIntField(primary_key=True)
username: str = fields.CharField(max_length=32) username: str = fields.CharField(max_length=32, db_index=True)
is_masked: bool = fields.BooleanField(default=False) is_masked: bool = fields.BooleanField(default=False)
is_moderator: bool = fields.BooleanField(default=False) is_moderator: bool = fields.BooleanField(default=False)
profiles: fields.BackwardFKRelation["Profile"] profiles: fields.BackwardFKRelation["Profile"]
@@ -21,9 +21,7 @@ class User(models.Model):
leaderboard_position: int | None = fields.IntField( leaderboard_position: int | None = fields.IntField(
default=None, null=True, db_index=True default=None, null=True, db_index=True
) )
leaderboard_calls_count: int | None = fields.IntField( leaderboard_calls_count: int | None = fields.IntField(default=None, null=True)
default=None, null=True
)
joined_at: datetime = fields.DatetimeField(auto_now_add=True) joined_at: datetime = fields.DatetimeField(auto_now_add=True)