mirror of
https://github.com/natsukagami/youmubot.git
synced 2025-04-10 04:30:29 +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?;
|
||||
|
||||
let beatmap = match map {
|
||||
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
|
||||
}
|
||||
};
|
||||
let beatmap = parse_map_input(ctx.channel_id(), env, map, mode).await?;
|
||||
|
||||
// override into beatmapset if needed
|
||||
let beatmap = if beatmapset == Some(true) {
|
||||
|
@ -429,3 +399,58 @@ fn arg_from_username_or_discord(
|
|||
(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