From 3b7f4523013b48b7ec7f0cee4593b6808cb90079 Mon Sep 17 00:00:00 2001 From: minneelyyyy Date: Mon, 9 Dec 2024 15:02:37 -0500 Subject: [PATCH] basic leaderboard, %b command --- src/commands/gambling/balance.rs | 2 +- src/commands/gambling/leaderboard.rs | 30 ++++++++++++++++++++++++++++ src/commands/mod.rs | 1 + 3 files changed, 32 insertions(+), 1 deletion(-) diff --git a/src/commands/gambling/balance.rs b/src/commands/gambling/balance.rs index c867a17..fd39da0 100644 --- a/src/commands/gambling/balance.rs +++ b/src/commands/gambling/balance.rs @@ -3,7 +3,7 @@ use crate::common::{self, Context, Error}; use poise::serenity_prelude as serenity; /// Tells you what your or someone else's balance is -#[poise::command(slash_command, prefix_command, aliases("bal"))] +#[poise::command(slash_command, prefix_command, aliases("bal", "b"))] pub async fn balance(ctx: Context<'_>, user: Option) -> Result<(), Error> { let user = user.as_ref().unwrap_or(ctx.author()); let db = &ctx.data().database; diff --git a/src/commands/gambling/leaderboard.rs b/src/commands/gambling/leaderboard.rs index e69de29..ddb66ae 100644 --- a/src/commands/gambling/leaderboard.rs +++ b/src/commands/gambling/leaderboard.rs @@ -0,0 +1,30 @@ + +use crate::common::{Context, Error}; +use poise::serenity_prelude::UserId; +use sqlx::Row; + +/// Display a leaderboard of the top 10 wealthiest players +#[poise::command(slash_command, prefix_command)] +pub async fn leaderboard(ctx: Context<'_>) -> Result<(), Error> { + let db = &ctx.data().database; + + let rows = sqlx::query( + r#" + SELECT id, balance FROM bank + ORDER BY balance DESC + LIMIT 10 + "# + ).fetch_all(db).await?; + + let users: Vec<(_, i32)> = rows.iter().map(|row| (UserId::new(row.get::(0) as u64), row.get(1))).collect(); + let mut output = String::new(); + + for (id, balance) in users { + let user = id.to_user(ctx).await?; + output += &format!("{} - {}\n", user.display_name(), balance); + } + + ctx.reply(format!("```\n{output}```")).await?; + + Ok(()) +} diff --git a/src/commands/mod.rs b/src/commands/mod.rs index b62de1c..a1b5349 100644 --- a/src/commands/mod.rs +++ b/src/commands/mod.rs @@ -17,6 +17,7 @@ pub fn commands() -> Vec> { gambling::give::give(), gambling::wager::wager(), gambling::daily::daily(), + gambling::leaderboard::leaderboard(), eval::eval(), self_roles::role(), ]