mirror of
https://github.com/natsukagami/youmubot.git
synced 2025-04-19 16:58:55 +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
|
.await
|
||||||
{
|
{
|
||||||
Ok(v) => {
|
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.last_update = now;
|
||||||
osu_user.pp = v.try_into().unwrap();
|
|
||||||
let id = osu_user.id;
|
let id = osu_user.id;
|
||||||
ctx.data
|
ctx.data
|
||||||
.read()
|
.read()
|
||||||
|
@ -110,7 +116,7 @@ impl Announcer {
|
||||||
user_id: UserId,
|
user_id: UserId,
|
||||||
channels: Vec<ChannelId>,
|
channels: Vec<ChannelId>,
|
||||||
mode: Mode,
|
mode: Mode,
|
||||||
) -> Result<Option<f64>, Error> {
|
) -> Result<User, Error> {
|
||||||
let days_since_last_update = (now - osu_user.last_update).num_days() + 1;
|
let days_since_last_update = (now - osu_user.last_update).num_days() + 1;
|
||||||
let last_update = osu_user.last_update;
|
let last_update = osu_user.last_update;
|
||||||
let (scores, user) = {
|
let (scores, user) = {
|
||||||
|
@ -126,8 +132,8 @@ impl Announcer {
|
||||||
(scores, user)
|
(scores, user)
|
||||||
};
|
};
|
||||||
let client = self.client.clone();
|
let client = self.client.clone();
|
||||||
let pp = user.pp;
|
|
||||||
let ctx = ctx.clone();
|
let ctx = ctx.clone();
|
||||||
|
let _user = user.clone();
|
||||||
spawn_future(async move {
|
spawn_future(async move {
|
||||||
let event_scores = user
|
let event_scores = user
|
||||||
.events
|
.events
|
||||||
|
@ -162,7 +168,7 @@ impl Announcer {
|
||||||
.await
|
.await
|
||||||
.pls_ok();
|
.pls_ok();
|
||||||
});
|
});
|
||||||
Ok(pp)
|
Ok(_user)
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn scan_user(&self, u: &OsuUser, mode: Mode) -> Result<Vec<(u8, Score)>, Error> {
|
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),
|
ModeOrTotal::Mode(m) => osu_user.pp.get(m as usize).and_then(|v| *v),
|
||||||
_ => None,
|
_ => None,
|
||||||
}?;
|
}?;
|
||||||
Some((pp, member.user.name, osu_user.last_update))
|
Some((pp, member.user.name, osu_user))
|
||||||
}())
|
}())
|
||||||
})
|
})
|
||||||
.collect::<Vec<_>>()
|
.collect::<Vec<_>>()
|
||||||
.await;
|
.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
|
let mut users = users
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.map(|(a, b, _)| (a, b))
|
.map(|(a, b, u)| (a, (b, u.clone())))
|
||||||
.collect::<Vec<_>>();
|
.collect::<Vec<_>>();
|
||||||
users.sort_by(|(a, _), (b, _)| (*b).partial_cmp(a).unwrap_or(std::cmp::Ordering::Equal));
|
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 total_len = users.len();
|
||||||
let users = &users[start..end];
|
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();
|
let mut content = MessageBuilder::new();
|
||||||
content
|
content
|
||||||
.push_line("```")
|
.push_line("```")
|
||||||
.push_line("Rank | pp | Username")
|
.push_line(format!(
|
||||||
.push_line(format!("-----------------{:-<uw$}", "", uw = username_len));
|
"Rank | pp | {:uw$} | Member",
|
||||||
for (id, (pp, member)) in users.iter().enumerate() {
|
"Username",
|
||||||
content
|
uw = username_len
|
||||||
.push(format!(
|
|
||||||
"{:>4} | {:>8.2} | ",
|
|
||||||
format!("#{}", 1 + id + start),
|
|
||||||
pp
|
|
||||||
))
|
))
|
||||||
.push_line_safe(member);
|
.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!(
|
content.push_line("```").push_line(format!(
|
||||||
"Page **{}**/**{}**. Last updated: `{}`",
|
"Page **{}**/**{}**. Last updated: `{}`",
|
||||||
|
|
Loading…
Add table
Reference in a new issue