mirror of
https://github.com/natsukagami/youmubot.git
synced 2025-04-19 16:58:55 +00:00
Polish up the command's output
This commit is contained in:
parent
3b24c1ec09
commit
f9672de596
1 changed files with 20 additions and 7 deletions
|
@ -6,9 +6,10 @@ use serenity::{
|
||||||
model::channel::Message,
|
model::channel::Message,
|
||||||
utils::MessageBuilder,
|
utils::MessageBuilder,
|
||||||
};
|
};
|
||||||
use std::collections::HashMap;
|
|
||||||
use youmubot_prelude::*;
|
use youmubot_prelude::*;
|
||||||
|
|
||||||
|
const ITEMS_PER_PAGE: usize = 10;
|
||||||
|
|
||||||
#[command("ranks")]
|
#[command("ranks")]
|
||||||
#[description = "See the server's ranks"]
|
#[description = "See the server's ranks"]
|
||||||
#[usage = "[mode (Std, Taiko, Catch, Mania) = Std]"]
|
#[usage = "[mode (Std, Taiko, Catch, Mania) = Std]"]
|
||||||
|
@ -17,7 +18,7 @@ use youmubot_prelude::*;
|
||||||
pub fn server_rank(ctx: &mut Context, m: &Message, mut args: Args) -> CommandResult {
|
pub fn server_rank(ctx: &mut Context, m: &Message, mut args: Args) -> CommandResult {
|
||||||
let mode = args.single::<ModeArg>().map(|v| v.0).unwrap_or(Mode::Std);
|
let mode = args.single::<ModeArg>().map(|v| v.0).unwrap_or(Mode::Std);
|
||||||
let guild = m.guild_id.expect("Guild-only command");
|
let guild = m.guild_id.expect("Guild-only command");
|
||||||
let mut users = OsuSavedUsers::open(&*ctx.data.read())
|
let users = OsuSavedUsers::open(&*ctx.data.read())
|
||||||
.borrow()
|
.borrow()
|
||||||
.expect("DB initialized")
|
.expect("DB initialized")
|
||||||
.iter()
|
.iter()
|
||||||
|
@ -28,25 +29,32 @@ pub fn server_rank(ctx: &mut Context, m: &Message, mut args: Args) -> CommandRes
|
||||||
.get(mode as usize)
|
.get(mode as usize)
|
||||||
.cloned()
|
.cloned()
|
||||||
.and_then(|pp| pp)
|
.and_then(|pp| pp)
|
||||||
.map(|pp| (pp, member.distinct()))
|
.map(|pp| (pp, member.distinct(), osu_user.last_update.clone()))
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
.collect::<Vec<_>>();
|
.collect::<Vec<_>>();
|
||||||
|
let last_update = users.iter().map(|(_, _, a)| a).min().cloned();
|
||||||
|
let mut users = users
|
||||||
|
.into_iter()
|
||||||
|
.map(|(a, b, _)| (a, b))
|
||||||
|
.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));
|
||||||
|
|
||||||
if users.is_empty() {
|
if users.is_empty() {
|
||||||
m.reply(&ctx, "No saved users in the current server...")?;
|
m.reply(&ctx, "No saved users in the current server...")?;
|
||||||
return Ok(());
|
return Ok(());
|
||||||
}
|
}
|
||||||
|
let last_update = last_update.unwrap();
|
||||||
ctx.data.get_cloned::<ReactionWatcher>().paginate_fn(
|
ctx.data.get_cloned::<ReactionWatcher>().paginate_fn(
|
||||||
ctx.clone(),
|
ctx.clone(),
|
||||||
m.channel_id,
|
m.channel_id,
|
||||||
move |page: u8, e: &mut EditMessage| {
|
move |page: u8, e: &mut EditMessage| {
|
||||||
let start = (page as usize) * 5;
|
let start = (page as usize) * ITEMS_PER_PAGE;
|
||||||
if start >= users.len() {
|
if start >= users.len() {
|
||||||
return (e, Err(Error("No more items".to_owned())));
|
return (e, Err(Error("No more items".to_owned())));
|
||||||
}
|
}
|
||||||
let users = users.iter().skip(start).take(5);
|
let total_len = users.len();
|
||||||
|
let users = users.iter().skip(start).take(ITEMS_PER_PAGE);
|
||||||
let mut content = MessageBuilder::new();
|
let mut content = MessageBuilder::new();
|
||||||
content
|
content
|
||||||
.push_line("```")
|
.push_line("```")
|
||||||
|
@ -56,12 +64,17 @@ pub fn server_rank(ctx: &mut Context, m: &Message, mut args: Args) -> CommandRes
|
||||||
content
|
content
|
||||||
.push(format!(
|
.push(format!(
|
||||||
"{:>4} | {:>7.2} | ",
|
"{:>4} | {:>7.2} | ",
|
||||||
format!("#{}", id + start),
|
format!("#{}", 1 + id + start),
|
||||||
pp
|
pp
|
||||||
))
|
))
|
||||||
.push_line_safe(member);
|
.push_line_safe(member);
|
||||||
}
|
}
|
||||||
content.push("```");
|
content.push_line("```").push_line(format!(
|
||||||
|
"Page **{}**/**{}**. Last updated: `{}`",
|
||||||
|
page + 1,
|
||||||
|
(total_len + ITEMS_PER_PAGE - 1) / ITEMS_PER_PAGE,
|
||||||
|
last_update.to_rfc2822()
|
||||||
|
));
|
||||||
(e.content(content.build()), Ok(()))
|
(e.content(content.build()), Ok(()))
|
||||||
},
|
},
|
||||||
std::time::Duration::from_secs(60),
|
std::time::Duration::from_secs(60),
|
||||||
|
|
Loading…
Add table
Reference in a new issue