mirror of
https://github.com/natsukagami/youmubot.git
synced 2025-04-18 00:08:54 +00:00
Add username display to server ranks
This commit is contained in:
parent
f7ea23ed3b
commit
de06c8e37f
2 changed files with 46 additions and 18 deletions
|
@ -74,8 +74,14 @@ impl youmubot_prelude::Announcer for Announcer {
|
|||
.await
|
||||
{
|
||||
Ok(v) => {
|
||||
osu_user.pp = v
|
||||
.iter()
|
||||
.map(|u| u.pp.clone())
|
||||
.collect::<Vec<_>>()
|
||||
.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<ChannelId>,
|
||||
mode: Mode,
|
||||
) -> Result<Option<f64>, Error> {
|
||||
) -> Result<User, Error> {
|
||||
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<Vec<(u8, Score)>, Error> {
|
||||
|
|
|
@ -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::<Vec<_>>()
|
||||
.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::<Vec<_>>();
|
||||
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!("-----------------{:-<uw$}", "", uw = username_len));
|
||||
for (id, (pp, member)) in users.iter().enumerate() {
|
||||
content
|
||||
.push(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!(
|
||||
"------------------{:-<uw$}---{:-<mw$}",
|
||||
"",
|
||||
"",
|
||||
uw = username_len,
|
||||
mw = member_len
|
||||
));
|
||||
for (id, (pp, (member, u))) in users.iter().enumerate() {
|
||||
content.push_line_safe(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: `{}`",
|
||||
|
|
Loading…
Add table
Reference in a new issue