From de06c8e37ff5aa7559249c8cee688c8ed9073263 Mon Sep 17 00:00:00 2001 From: Natsu Kagami Date: Sun, 4 Feb 2024 23:50:09 +0100 Subject: [PATCH] Add username display to server ranks --- youmubot-osu/src/discord/announcer.rs | 14 +++++-- youmubot-osu/src/discord/server_rank.rs | 50 ++++++++++++++++++------- 2 files changed, 46 insertions(+), 18 deletions(-) diff --git a/youmubot-osu/src/discord/announcer.rs b/youmubot-osu/src/discord/announcer.rs index f670524..683609b 100644 --- a/youmubot-osu/src/discord/announcer.rs +++ b/youmubot-osu/src/discord/announcer.rs @@ -74,8 +74,14 @@ impl youmubot_prelude::Announcer for Announcer { .await { Ok(v) => { + osu_user.pp = v + .iter() + .map(|u| u.pp.clone()) + .collect::>() + .try_into() + .unwrap(); + osu_user.username = v.into_iter().next().unwrap().username.into(); osu_user.last_update = now; - osu_user.pp = v.try_into().unwrap(); let id = osu_user.id; ctx.data .read() @@ -110,7 +116,7 @@ impl Announcer { user_id: UserId, channels: Vec, mode: Mode, - ) -> Result, Error> { + ) -> Result { let days_since_last_update = (now - osu_user.last_update).num_days() + 1; let last_update = osu_user.last_update; let (scores, user) = { @@ -126,8 +132,8 @@ impl Announcer { (scores, user) }; let client = self.client.clone(); - let pp = user.pp; let ctx = ctx.clone(); + let _user = user.clone(); spawn_future(async move { let event_scores = user .events @@ -162,7 +168,7 @@ impl Announcer { .await .pls_ok(); }); - Ok(pp) + Ok(_user) } async fn scan_user(&self, u: &OsuUser, mode: Mode) -> Result, Error> { diff --git a/youmubot-osu/src/discord/server_rank.rs b/youmubot-osu/src/discord/server_rank.rs index a80dbc6..f717013 100644 --- a/youmubot-osu/src/discord/server_rank.rs +++ b/youmubot-osu/src/discord/server_rank.rs @@ -77,15 +77,15 @@ pub async fn server_rank(ctx: &Context, m: &Message, mut args: Args) -> CommandR ModeOrTotal::Mode(m) => osu_user.pp.get(m as usize).and_then(|v| *v), _ => None, }?; - Some((pp, member.user.name, osu_user.last_update)) + Some((pp, member.user.name, osu_user)) }()) }) .collect::>() .await; - let last_update = users.iter().map(|(_, _, a)| a).min().cloned(); + let last_update = users.iter().map(|(_, _, a)| a.last_update).min(); let mut users = users .into_iter() - .map(|(a, b, _)| (a, b)) + .map(|(a, b, u)| (a, (b, u.clone()))) .collect::>(); users.sort_by(|(a, _), (b, _)| (*b).partial_cmp(a).unwrap_or(std::cmp::Ordering::Equal)); @@ -109,20 +109,42 @@ pub async fn server_rank(ctx: &Context, m: &Message, mut args: Args) -> CommandR } let total_len = users.len(); let users = &users[start..end]; - let username_len = users.iter().map(|(_, u)| u.len()).max().unwrap_or(8).max(8); + let username_len = users + .iter() + .map(|(_, (_, u))| u.username.len()) + .max() + .unwrap_or(8) + .max(8); + let member_len = users + .iter() + .map(|(_, (mem, _))| mem.len()) + .max() + .unwrap_or(8) + .max(8); let mut content = MessageBuilder::new(); content .push_line("```") - .push_line("Rank | pp | Username") - .push_line(format!("-----------------{:-4} | {:>8.2} | ", - format!("#{}", 1 + id + start), - pp - )) - .push_line_safe(member); + .push_line(format!( + "Rank | pp | {:uw$} | Member", + "Username", + uw = username_len + )) + .push_line(format!( + "------------------{:-4} | {:>8.2} | {:uw$} | {}", + format!("#{}", 1 + id + start), + pp, + u.username, + member, + uw = username_len + )); } content.push_line("```").push_line(format!( "Page **{}**/**{}**. Last updated: `{}`",