diff --git a/src/badgey/commands/ranks.rs b/src/badgey/commands/ranks.rs index aed7e73..3080d3c 100644 --- a/src/badgey/commands/ranks.rs +++ b/src/badgey/commands/ranks.rs @@ -123,7 +123,7 @@ async fn rank(ctx: ManifoldContext<'_>) -> ManifoldResult<()> { async fn leaderboard(ctx: ManifoldContext<'_>) -> ManifoldResult<()> { let reply_handle = ctx.reply("Retrieving leaderboard, please stand by...".to_string()).await?; - let entries_per_page = 10; + let entries_per_page = 5; let mut pages = Vec::::new(); let leaderboard = Xp::get_leaderboard(&ctx.data().database)?; let total = leaderboard.len(); @@ -139,9 +139,19 @@ async fn leaderboard(ctx: ManifoldContext<'_>) -> ManifoldResult<()> { let mut values = String::new(); leaderboard.iter().skip(i*entries_per_page).enumerate().for_each(|(i, f)| { - ranks.push_str(format!("{rank}\n", rank=(i+1)).as_str()); - users.push_str(format!("<@{user}>\n", user=f.user_id).as_str()); - values.push_str(format!("{xp}\n", xp=f.xp_value).as_str()); + let new_rank = format!("{rank}\n", rank=(i+1)); + let new_user = format!("<@{user}>\n", user=f.user_id); + let new_value = format!("{xp}\n", xp=f.xp_value); + + // field values are capped at 1024 characters + // so we have to check if what we're about to add will break that limit and bail out if so + if (ranks.len() + new_rank.len()) > 1024 || (users.len() + new_user.len()) > 1024 || (values.len() + new_value.len()) > 1024 { + return; + } + + ranks.push_str(new_rank.as_str()); + users.push_str(new_user.as_str()); + values.push_str(new_value.as_str()); }); fields.push(("Rank", &ranks, true));