osu: add passes_only flag to recent command

This commit is contained in:
Natsu Kagami 2025-02-25 15:58:11 +01:00
parent 068dd48550
commit 487f8647ba
Signed by: nki
GPG key ID: 55A032EB38B49ADB
2 changed files with 13 additions and 2 deletions

View file

@ -119,6 +119,7 @@ async fn recent<U: HasOsuEnv>(
#[min = 1]
#[max = 50]
index: Option<u8>,
#[description = "Only include passed scores"] passes_only: Option<bool>,
#[description = "Score listing style"] style: Option<ScoreListStyle>,
#[description = "Game mode"] mode: Option<Mode>,
#[description = "osu! username"] username: Option<String>,
@ -127,6 +128,7 @@ async fn recent<U: HasOsuEnv>(
let env = ctx.data().osu_env();
let args = arg_from_username_or_discord(username, discord_name);
let style = style.unwrap_or(ScoreListStyle::Table);
let include_fails = !passes_only.unwrap_or(false);
let args = ListingArgs::from_params(env, index, style, mode, args, ctx.author().id).await?;
@ -134,7 +136,9 @@ async fn recent<U: HasOsuEnv>(
let osu_client = &env.client;
let plays = osu_client
.user_recent(UserID::ID(args.user.id), |f| f.mode(args.mode).limit(50))
.user_recent(UserID::ID(args.user.id), |f| {
f.mode(args.mode).include_fails(include_fails).limit(50)
})
.await?;
handle_listing(ctx, plays, args, |_, b| b, "recent").await

View file

@ -248,6 +248,7 @@ pub mod builders {
user: UserID,
mode: Option<Mode>,
limit: Option<u8>,
include_fails: bool,
}
impl UserScoreRequestBuilder {
@ -257,6 +258,7 @@ pub mod builders {
user,
mode: None,
limit: None,
include_fails: true,
}
}
@ -270,11 +272,16 @@ pub mod builders {
self
}
pub fn include_fails(&mut self, include_fails: bool) -> &mut Self {
self.include_fails = include_fails;
self
}
pub(crate) async fn build(self, client: &OsuClient) -> Result<Vec<models::Score>> {
let scores = handle_not_found({
let mut r = client.rosu.user_scores(self.user);
r = match self.score_type {
UserScoreType::Recent => r.recent().include_fails(true),
UserScoreType::Recent => r.recent().include_fails(self.include_fails),
UserScoreType::Best => r.best(),
UserScoreType::Pin => r.pinned(),
};