diff --git a/payphone/cogs/users/cog.py b/payphone/cogs/users/cog.py index 4fb2568..1fbefd8 100644 --- a/payphone/cogs/users/cog.py +++ b/payphone/cogs/users/cog.py @@ -55,8 +55,9 @@ class Users(base.Cog): user_counts.sort(key=lambda i: i[1]) - for i, user_id in enumerate(user_counts): - users_map[user_id[0]].leaderboard_position = i + 1 + for i, user_map in enumerate(user_counts): + users_map[user_map[0]].leaderboard_position = i + 1 + users_map[user_map[0]].leaderboard_calls_count = user_map[1] await models.User.bulk_update(users_map.values(), ["leaderboard_position"], 500) @@ -393,7 +394,11 @@ class Users(base.Cog): ) rows = [ - [f"#{pos + 1}", fmt.trim(user.profiles[0].name, 10)] + [ + f"#{pos + 1}", + fmt.trim(user.profiles[0].name, 10), + f"{user.leaderboard_calls_count if user.leaderboard_calls_count is not None else "?"} call{"s" if user.leaderboard_calls_count != 1 else ""}", + ] for pos, user in enumerate(top_users) ] @@ -401,14 +406,20 @@ class Users(base.Cog): user, profile = await utils.get_user(ctx.author) if user.leaderboard_position is not None: - rows.append([f"#{user.leaderboard_position}", fmt.trim(profile.name, 10)]) + rows.append( + [ + f"#{user.leaderboard_position}", + fmt.trim(profile.name, 10), + f"{user.leaderboard_calls_count if user.leaderboard_calls_count is not None else "?"} call{"s" if user.leaderboard_calls_count != 1 else ""}", + ] + ) table = fmt.monospace_table(rows) embed = discord.Embed( color=constants.EMBED_COLOR, title=f"Monthly Leaderboard ({datetime.now(timezone.utc).strftime("%B")})", - description=f"```\n{table}\n```", + description=f"```\n{table if len(rows) > 0 else "Come back in 15 minutes!"}\n```", author=self.bot.embed_author, footer=discord.EmbedFooter( text="The leaderboard is updated every 15 minutes." diff --git a/payphone/db/migrations/models/6_20241018031928_update.py b/payphone/db/migrations/models/6_20241018031928_update.py new file mode 100644 index 0000000..b66c9cd --- /dev/null +++ b/payphone/db/migrations/models/6_20241018031928_update.py @@ -0,0 +1,11 @@ +from tortoise import BaseDBAsyncClient + + +async def upgrade(db: BaseDBAsyncClient) -> str: + return """ + ALTER TABLE "user" ADD "leaderboard_calls_count" INT;""" + + +async def downgrade(db: BaseDBAsyncClient) -> str: + return """ + ALTER TABLE "user" DROP COLUMN "leaderboard_calls_count";""" diff --git a/payphone/db/models.py b/payphone/db/models.py index dc323d3..1f3ad8f 100644 --- a/payphone/db/models.py +++ b/payphone/db/models.py @@ -21,6 +21,9 @@ class User(models.Model): leaderboard_position: int | None = fields.IntField( default=None, null=True, db_index=True ) + leaderboard_calls_count: int | None = fields.IntField( + default=None, null=True + ) joined_at: datetime = fields.DatetimeField(auto_now_add=True)