feat(bot): ✨ Create p.leaderboard command.

This commit is contained in:
Nyeki.py
2024-10-18 03:05:03 -03:00
parent f265e12cb4
commit c08a40c45f
7 changed files with 244 additions and 29 deletions
@@ -0,0 +1,17 @@
from tortoise import BaseDBAsyncClient
async def upgrade(db: BaseDBAsyncClient) -> str:
return """
ALTER TABLE "calluserchannelrelationship" ADD "created_at" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP;
ALTER TABLE "user" ADD "leaderboard_position" INT;
CREATE INDEX "idx_callusercha_created_e72939" ON "calluserchannelrelationship" ("created_at");
CREATE INDEX "idx_user_leaderb_1dcee5" ON "user" ("leaderboard_position");"""
async def downgrade(db: BaseDBAsyncClient) -> str:
return """
DROP INDEX "idx_callusercha_created_e72939";
DROP INDEX "idx_user_leaderb_1dcee5";
ALTER TABLE "user" DROP COLUMN "leaderboard_position";
ALTER TABLE "calluserchannelrelationship" DROP COLUMN "created_at";"""
@@ -0,0 +1,11 @@
from tortoise import BaseDBAsyncClient
async def upgrade(db: BaseDBAsyncClient) -> str:
return """
ALTER TABLE "user" ADD "joined_at" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP;"""
async def downgrade(db: BaseDBAsyncClient) -> str:
return """
ALTER TABLE "user" DROP COLUMN "joined_at";"""
+5
View File
@@ -18,6 +18,10 @@ class User(models.Model):
is_moderator: bool = fields.BooleanField(default=False)
profiles: fields.BackwardFKRelation["Profile"]
call_rss: fields.BackwardFKRelation["CallUserChannelRelationship"]
leaderboard_position: int | None = fields.IntField(
default=None, null=True, db_index=True
)
joined_at: datetime = fields.DatetimeField(auto_now_add=True)
class Call(models.Model):
@@ -130,6 +134,7 @@ class CallUserChannelRelationship(models.Model):
)
is_masked: bool = fields.BooleanField()
mask: int = fields.BigIntField()
created_at: datetime = fields.DatetimeField(auto_now_add=True, db_index=True)
@property
def mask_name(self) -> str:
+4 -12
View File
@@ -5,9 +5,7 @@ import discord
from payphone.db import models
async def get_channel(
channel: discord.TextChannel, for_update: bool = False
) -> models.Channel:
async def get_channel(channel: discord.TextChannel, for_update: bool = False) -> models.Channel:
"""Returns a channel from the database, creating or updating it if it already exists.
Args:
@@ -18,15 +16,9 @@ async def get_channel(
models.Channel: The channel row.
"""
model = models.Channel
if for_update:
model = model.select_for_update()
row = await model.get_or_none(id=channel.id)
if row is None:
row = await models.Channel.create(id=channel.id, server_id=channel.guild.id)
row, _ = await models.Channel.update_or_create(
id=channel.id, server=channel.guild.id
)
channel_name = channel.name.replace("discord", "d").replace("wumpus", "w")
webhook_name = f"Payphone #{channel_name}"