diff --git a/app/commands.py b/app/commands.py index 5203d8d51..a6bfe3c0b 100644 --- a/app/commands.py +++ b/app/commands.py @@ -378,12 +378,13 @@ async def top(ctx: Context) -> str | None: return "Invalid username." # specific player provided - player = app.state.sessions.players.get(name=ctx.args[1]) - if not player: - return "Player not found." + user = await users_repo.fetch_one(name=ctx.args[1]) else: # no player provided, use self - player = ctx.player + user = await users_repo.fetch_one(id=ctx.player.id) + + if user is None: + return "Player not found." # !top rx!std mode = GAMEMODE_REPR_LIST.index(ctx.args[0]) @@ -397,13 +398,15 @@ async def top(ctx: Context) -> str | None: "AND s.status = 2 " "AND b.status in (2, 3) " "ORDER BY s.pp DESC LIMIT 10", - {"user_id": player.id, "mode": mode}, + {"user_id": user["id"], "mode": mode}, ) if not scores: return "No scores" + user_embed = f"[https://{app.settings.DOMAIN}/u/{user['id']} {user['name']}]" + return "\n".join( - [f"Top 10 scores for {player.embed} ({ctx.args[0]})."] + [f"Top 10 scores for {user_embed} ({ctx.args[0]})."] + [ TOP_SCORE_FMTSTR.format(idx=idx + 1, domain=app.settings.DOMAIN, **s) for idx, s in enumerate(scores)