diff --git a/youmubot-osu/src/discord/hook.rs b/youmubot-osu/src/discord/hook.rs index 1e44c76..a6348ad 100644 --- a/youmubot-osu/src/discord/hook.rs +++ b/youmubot-osu/src/discord/hook.rs @@ -21,7 +21,7 @@ lazy_static! { r"(?:https?://)?osu\.ppy\.sh/beatmapsets/(?P\d+)/?(?:\#(?Posu|taiko|fruits|mania)(?:/(?P\d+)|/?))?(?:\+(?P[A-Z]+))?" ).unwrap(); static ref SHORT_LINK_REGEX: Regex = Regex::new( - r"(?:^|\s)/b/(?P\d+)(?:/(?Posu|taiko|fruits|mania))?(?:\+(?P[A-Z]+))?" + r"(?:^|\s|\W)(?P
/b/(?P\d+)(?:/(?Posu|taiko|fruits|mania))?(?:\+(?P[A-Z]+))?)" ).unwrap(); } @@ -281,7 +281,7 @@ fn handle_short_links<'a>( }; let r: Result<_> = Ok(ToPrint { embed: EmbedType::Beatmap(beatmap, info, mods), - link: capture.get(0).unwrap().as_str(), + link: capture.name("main").unwrap().as_str(), mode, }); r diff --git a/youmubot-osu/src/discord/mod.rs b/youmubot-osu/src/discord/mod.rs index 49c9abf..7687006 100644 --- a/youmubot-osu/src/discord/mod.rs +++ b/youmubot-osu/src/discord/mod.rs @@ -2,7 +2,7 @@ use crate::{ discord::beatmap_cache::BeatmapMetaCache, discord::oppai_cache::BeatmapCache, models::{Beatmap, Mode, Mods, Score, User}, - request::{BeatmapRequestKind, UserID}, + request::UserID, Client as OsuHttpClient, }; use serenity::{ @@ -527,8 +527,9 @@ pub async fn top(ctx: &Context, msg: &Message, mut args: Args) -> CommandResult .unwrap_or(Mode::Std); let user = to_user_id_query(args.single::().ok(), &*data, msg)?; - + let meta_cache = data.get::().unwrap(); let osu = data.get::().unwrap(); + let oppai = data.get::().unwrap(); let user = osu .user(user, |f| f.mode(mode)) @@ -547,14 +548,7 @@ pub async fn top(ctx: &Context, msg: &Message, mut args: Args) -> CommandResult .into_iter() .last() .ok_or(Error::from("No such play"))?; - let beatmap = osu - .beatmaps(BeatmapRequestKind::Beatmap(top_play.beatmap_id), |f| { - f.mode(mode, true) - }) - .await? - .into_iter() - .next() - .unwrap(); + let beatmap = meta_cache.get_beatmap(top_play.beatmap_id, mode).await?; let content = oppai.get_beatmap(beatmap.beatmap_id).await?; let beatmap = BeatmapWithMode(beatmap, mode); diff --git a/youmubot-osu/src/lib.rs b/youmubot-osu/src/lib.rs index edb0430..8e4c5b3 100644 --- a/youmubot-osu/src/lib.rs +++ b/youmubot-osu/src/lib.rs @@ -14,7 +14,7 @@ use tower; use youmubot_prelude::*; /// The number of requests per minute to the osu! server. -const REQUESTS_PER_MINUTE: u64 = 50; +const REQUESTS_PER_MINUTE: u64 = 200; type BoxedResp = std::pin::Pin> + Send>>; @@ -64,7 +64,9 @@ impl Client { async fn build_request(&self, r: RequestBuilder) -> Result { let v = r.query(&[("k", &*self.key)]).build()?; - Ok(self.http_client.write().await.call(v).await?) + let mut client = self.http_client.write().await; + future::poll_fn(|ctx| client.poll_ready(ctx)).await?; + Ok(client.call(v).await?) } pub async fn beatmaps(