mirror of
https://github.com/natsukagami/youmubot.git
synced 2025-04-19 00:38:54 +00:00
Allow beatmap command to use just numbers as id
This commit is contained in:
parent
6105ee610f
commit
0db52c5c2b
1 changed files with 56 additions and 31 deletions
|
@ -308,37 +308,7 @@ async fn beatmap<U: HasOsuEnv>(
|
||||||
|
|
||||||
ctx.defer().await?;
|
ctx.defer().await?;
|
||||||
|
|
||||||
let beatmap = match map {
|
let beatmap = parse_map_input(ctx.channel_id(), env, map, mode).await?;
|
||||||
None => {
|
|
||||||
let Some((BeatmapWithMode(b, mode), bmmods)) =
|
|
||||||
load_beatmap(env, ctx.channel_id(), None as Option<&'_ Message>).await
|
|
||||||
else {
|
|
||||||
return Err(Error::msg("no beatmap mentioned in this channel"));
|
|
||||||
};
|
|
||||||
let mods = bmmods.unwrap_or_else(|| Mods::NOMOD.clone());
|
|
||||||
let info = env
|
|
||||||
.oppai
|
|
||||||
.get_beatmap(b.beatmap_id)
|
|
||||||
.await?
|
|
||||||
.get_possible_pp_with(mode, &mods);
|
|
||||||
EmbedType::Beatmap(Box::new(b), info, mods)
|
|
||||||
}
|
|
||||||
Some(map) => {
|
|
||||||
let Some(results) = stream::select(
|
|
||||||
link_parser::parse_new_links(env, &map),
|
|
||||||
stream::select(
|
|
||||||
link_parser::parse_old_links(env, &map),
|
|
||||||
link_parser::parse_short_links(env, &map),
|
|
||||||
),
|
|
||||||
)
|
|
||||||
.next()
|
|
||||||
.await
|
|
||||||
else {
|
|
||||||
return Err(Error::msg("no beatmap detected in the argument"));
|
|
||||||
};
|
|
||||||
results.embed
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// override into beatmapset if needed
|
// override into beatmapset if needed
|
||||||
let beatmap = if beatmapset == Some(true) {
|
let beatmap = if beatmapset == Some(true) {
|
||||||
|
@ -429,3 +399,58 @@ fn arg_from_username_or_discord(
|
||||||
(None, None) => None,
|
(None, None) => None,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async fn parse_map_input(
|
||||||
|
channel_id: serenity::all::ChannelId,
|
||||||
|
env: &OsuEnv,
|
||||||
|
input: Option<String>,
|
||||||
|
mode: Option<Mode>,
|
||||||
|
) -> Result<EmbedType> {
|
||||||
|
Ok(match input {
|
||||||
|
None => {
|
||||||
|
let Some((BeatmapWithMode(b, mode), bmmods)) =
|
||||||
|
load_beatmap(env, channel_id, None as Option<&'_ Message>).await
|
||||||
|
else {
|
||||||
|
return Err(Error::msg("no beatmap mentioned in this channel"));
|
||||||
|
};
|
||||||
|
let mods = bmmods.unwrap_or_else(|| Mods::NOMOD.clone());
|
||||||
|
let info = env
|
||||||
|
.oppai
|
||||||
|
.get_beatmap(b.beatmap_id)
|
||||||
|
.await?
|
||||||
|
.get_possible_pp_with(mode, &mods);
|
||||||
|
EmbedType::Beatmap(Box::new(b), info, mods)
|
||||||
|
}
|
||||||
|
Some(map) => {
|
||||||
|
if let Ok(id) = map.parse::<u64>() {
|
||||||
|
let beatmap = match mode {
|
||||||
|
None => env.beatmaps.get_beatmap_default(id).await,
|
||||||
|
Some(mode) => env.beatmaps.get_beatmap(id, mode).await,
|
||||||
|
}?;
|
||||||
|
let info = env
|
||||||
|
.oppai
|
||||||
|
.get_beatmap(beatmap.beatmap_id)
|
||||||
|
.await?
|
||||||
|
.get_possible_pp_with(beatmap.mode, Mods::NOMOD);
|
||||||
|
return Ok(EmbedType::Beatmap(
|
||||||
|
Box::new(beatmap),
|
||||||
|
info,
|
||||||
|
Mods::NOMOD.clone(),
|
||||||
|
));
|
||||||
|
}
|
||||||
|
let Some(results) = stream::select(
|
||||||
|
link_parser::parse_new_links(env, &map),
|
||||||
|
stream::select(
|
||||||
|
link_parser::parse_old_links(env, &map),
|
||||||
|
link_parser::parse_short_links(env, &map),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
.next()
|
||||||
|
.await
|
||||||
|
else {
|
||||||
|
return Err(Error::msg("no beatmap detected in the argument"));
|
||||||
|
};
|
||||||
|
results.embed
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue