Fix reversed leaderboard

This commit is contained in:
2025-08-21 20:06:59 -03:00
parent 6c240cfece
commit aa32abfa90
3 changed files with 9 additions and 13 deletions
Generated
+1 -1
View File
@@ -1437,7 +1437,7 @@ checksum = "df94ce210e5bc13cb6651479fa48d14f601d9858cfe0467f43ae157023b938d3"
[[package]] [[package]]
name = "payphone" name = "payphone"
version = "4.0.28" version = "4.0.29"
dependencies = [ dependencies = [
"async-trait", "async-trait",
"axum", "axum",
+1 -1
View File
@@ -1,6 +1,6 @@
[package] [package]
name = "payphone" name = "payphone"
version = "4.0.28" version = "4.0.29"
edition = "2024" edition = "2024"
default-run = "payphone" default-run = "payphone"
+7 -11
View File
@@ -1,5 +1,5 @@
use async_trait::async_trait; use async_trait::async_trait;
use deadpool_redis::redis::AsyncTypedCommands; use deadpool_redis::redis::AsyncCommands;
use itertools::Itertools; use itertools::Itertools;
use twilight_util::builder::embed::{ use twilight_util::builder::embed::{
EmbedAuthorBuilder, EmbedBuilder, EmbedFooterBuilder, ImageSource, EmbedAuthorBuilder, EmbedBuilder, EmbedFooterBuilder, ImageSource,
@@ -44,30 +44,26 @@ impl Command<State> for LeaderboardCommand {
.await .await
.map_err(CommandError::RedisPoolFailed)?; .map_err(CommandError::RedisPoolFailed)?;
let top = redis let top: Vec<(u64, f64)> = redis
.zrange_withscores(KEY_LEADERBOARD_MONTHLY, 0, 9) .zrevrange_withscores(KEY_LEADERBOARD_MONTHLY, 0, 9)
.await .await
.map_err(CommandError::RedisFailed)?; .map_err(CommandError::RedisFailed)?;
log::trace!("Top users for leaderboard: {top:?}"); log::trace!("Top users for leaderboard: {top:?}");
let current_user_rank = redis let current_user_rank: Option<usize> = redis
.zrank(KEY_LEADERBOARD_MONTHLY, ctx.event.author.id.get()) .zrevrank(KEY_LEADERBOARD_MONTHLY, ctx.event.author.id.get())
.await .await
.map_err(CommandError::RedisFailed)?; .map_err(CommandError::RedisFailed)?;
let mut users = Vec::new(); let mut users = Vec::new();
for (user_id, score) in top { for (user_id, score) in top {
let id: u64 = user_id let Some(user) = User::get_by_id(user_id, &ctx.rt.state.db)
.parse()
.expect("User ID could not be parsed for leaderboard");
let Some(user) = User::get_by_id(id, &ctx.rt.state.db)
.await .await
.map_err(|_| CommandError::DatabaseQueryFailed)? .map_err(|_| CommandError::DatabaseQueryFailed)?
else { else {
log::trace!("User ID {id} not found for leaderboard"); log::trace!("User ID {user_id} not found for leaderboard");
continue; continue;
}; };