From aa32abfa90afbd1b79fb7c39bdee49c4cc34968c Mon Sep 17 00:00:00 2001 From: Rafael Bradley Date: Thu, 21 Aug 2025 20:06:59 -0300 Subject: [PATCH] Fix reversed leaderboard --- Cargo.lock | 2 +- Cargo.toml | 2 +- src/groups/leveling/commands.rs | 18 +++++++----------- 3 files changed, 9 insertions(+), 13 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 39d864c..f8cc94a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1437,7 +1437,7 @@ checksum = "df94ce210e5bc13cb6651479fa48d14f601d9858cfe0467f43ae157023b938d3" [[package]] name = "payphone" -version = "4.0.28" +version = "4.0.29" dependencies = [ "async-trait", "axum", diff --git a/Cargo.toml b/Cargo.toml index 5a2b317..83a583b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "payphone" -version = "4.0.28" +version = "4.0.29" edition = "2024" default-run = "payphone" diff --git a/src/groups/leveling/commands.rs b/src/groups/leveling/commands.rs index 2a3f85f..9bba665 100644 --- a/src/groups/leveling/commands.rs +++ b/src/groups/leveling/commands.rs @@ -1,5 +1,5 @@ use async_trait::async_trait; -use deadpool_redis::redis::AsyncTypedCommands; +use deadpool_redis::redis::AsyncCommands; use itertools::Itertools; use twilight_util::builder::embed::{ EmbedAuthorBuilder, EmbedBuilder, EmbedFooterBuilder, ImageSource, @@ -44,30 +44,26 @@ impl Command for LeaderboardCommand { .await .map_err(CommandError::RedisPoolFailed)?; - let top = redis - .zrange_withscores(KEY_LEADERBOARD_MONTHLY, 0, 9) + let top: Vec<(u64, f64)> = redis + .zrevrange_withscores(KEY_LEADERBOARD_MONTHLY, 0, 9) .await .map_err(CommandError::RedisFailed)?; log::trace!("Top users for leaderboard: {top:?}"); - let current_user_rank = redis - .zrank(KEY_LEADERBOARD_MONTHLY, ctx.event.author.id.get()) + let current_user_rank: Option = redis + .zrevrank(KEY_LEADERBOARD_MONTHLY, ctx.event.author.id.get()) .await .map_err(CommandError::RedisFailed)?; let mut users = Vec::new(); for (user_id, score) in top { - let id: u64 = user_id - .parse() - .expect("User ID could not be parsed for leaderboard"); - - let Some(user) = User::get_by_id(id, &ctx.rt.state.db) + let Some(user) = User::get_by_id(user_id, &ctx.rt.state.db) .await .map_err(|_| CommandError::DatabaseQueryFailed)? else { - log::trace!("User ID {id} not found for leaderboard"); + log::trace!("User ID {user_id} not found for leaderboard"); continue; };