mirror of
https://github.com/natsukagami/youmubot.git
synced 2025-04-19 16:58:55 +00:00
osu: Optimize top! and hook
This commit is contained in:
parent
238e44a64c
commit
acc1b92002
3 changed files with 10 additions and 14 deletions
|
@ -21,7 +21,7 @@ lazy_static! {
|
||||||
r"(?:https?://)?osu\.ppy\.sh/beatmapsets/(?P<set_id>\d+)/?(?:\#(?P<mode>osu|taiko|fruits|mania)(?:/(?P<beatmap_id>\d+)|/?))?(?:\+(?P<mods>[A-Z]+))?"
|
r"(?:https?://)?osu\.ppy\.sh/beatmapsets/(?P<set_id>\d+)/?(?:\#(?P<mode>osu|taiko|fruits|mania)(?:/(?P<beatmap_id>\d+)|/?))?(?:\+(?P<mods>[A-Z]+))?"
|
||||||
).unwrap();
|
).unwrap();
|
||||||
static ref SHORT_LINK_REGEX: Regex = Regex::new(
|
static ref SHORT_LINK_REGEX: Regex = Regex::new(
|
||||||
r"(?:^|\s)/b/(?P<id>\d+)(?:/(?P<mode>osu|taiko|fruits|mania))?(?:\+(?P<mods>[A-Z]+))?"
|
r"(?:^|\s|\W)(?P<main>/b/(?P<id>\d+)(?:/(?P<mode>osu|taiko|fruits|mania))?(?:\+(?P<mods>[A-Z]+))?)"
|
||||||
).unwrap();
|
).unwrap();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -281,7 +281,7 @@ fn handle_short_links<'a>(
|
||||||
};
|
};
|
||||||
let r: Result<_> = Ok(ToPrint {
|
let r: Result<_> = Ok(ToPrint {
|
||||||
embed: EmbedType::Beatmap(beatmap, info, mods),
|
embed: EmbedType::Beatmap(beatmap, info, mods),
|
||||||
link: capture.get(0).unwrap().as_str(),
|
link: capture.name("main").unwrap().as_str(),
|
||||||
mode,
|
mode,
|
||||||
});
|
});
|
||||||
r
|
r
|
||||||
|
|
|
@ -2,7 +2,7 @@ use crate::{
|
||||||
discord::beatmap_cache::BeatmapMetaCache,
|
discord::beatmap_cache::BeatmapMetaCache,
|
||||||
discord::oppai_cache::BeatmapCache,
|
discord::oppai_cache::BeatmapCache,
|
||||||
models::{Beatmap, Mode, Mods, Score, User},
|
models::{Beatmap, Mode, Mods, Score, User},
|
||||||
request::{BeatmapRequestKind, UserID},
|
request::UserID,
|
||||||
Client as OsuHttpClient,
|
Client as OsuHttpClient,
|
||||||
};
|
};
|
||||||
use serenity::{
|
use serenity::{
|
||||||
|
@ -527,8 +527,9 @@ pub async fn top(ctx: &Context, msg: &Message, mut args: Args) -> CommandResult
|
||||||
.unwrap_or(Mode::Std);
|
.unwrap_or(Mode::Std);
|
||||||
|
|
||||||
let user = to_user_id_query(args.single::<UsernameArg>().ok(), &*data, msg)?;
|
let user = to_user_id_query(args.single::<UsernameArg>().ok(), &*data, msg)?;
|
||||||
|
let meta_cache = data.get::<BeatmapMetaCache>().unwrap();
|
||||||
let osu = data.get::<OsuClient>().unwrap();
|
let osu = data.get::<OsuClient>().unwrap();
|
||||||
|
|
||||||
let oppai = data.get::<BeatmapCache>().unwrap();
|
let oppai = data.get::<BeatmapCache>().unwrap();
|
||||||
let user = osu
|
let user = osu
|
||||||
.user(user, |f| f.mode(mode))
|
.user(user, |f| f.mode(mode))
|
||||||
|
@ -547,14 +548,7 @@ pub async fn top(ctx: &Context, msg: &Message, mut args: Args) -> CommandResult
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.last()
|
.last()
|
||||||
.ok_or(Error::from("No such play"))?;
|
.ok_or(Error::from("No such play"))?;
|
||||||
let beatmap = osu
|
let beatmap = meta_cache.get_beatmap(top_play.beatmap_id, mode).await?;
|
||||||
.beatmaps(BeatmapRequestKind::Beatmap(top_play.beatmap_id), |f| {
|
|
||||||
f.mode(mode, true)
|
|
||||||
})
|
|
||||||
.await?
|
|
||||||
.into_iter()
|
|
||||||
.next()
|
|
||||||
.unwrap();
|
|
||||||
let content = oppai.get_beatmap(beatmap.beatmap_id).await?;
|
let content = oppai.get_beatmap(beatmap.beatmap_id).await?;
|
||||||
let beatmap = BeatmapWithMode(beatmap, mode);
|
let beatmap = BeatmapWithMode(beatmap, mode);
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,7 @@ use tower;
|
||||||
use youmubot_prelude::*;
|
use youmubot_prelude::*;
|
||||||
|
|
||||||
/// The number of requests per minute to the osu! server.
|
/// The number of requests per minute to the osu! server.
|
||||||
const REQUESTS_PER_MINUTE: u64 = 50;
|
const REQUESTS_PER_MINUTE: u64 = 200;
|
||||||
|
|
||||||
type BoxedResp =
|
type BoxedResp =
|
||||||
std::pin::Pin<Box<dyn future::Future<Output = Result<Response, reqwest::Error>> + Send>>;
|
std::pin::Pin<Box<dyn future::Future<Output = Result<Response, reqwest::Error>> + Send>>;
|
||||||
|
@ -64,7 +64,9 @@ impl Client {
|
||||||
|
|
||||||
async fn build_request(&self, r: RequestBuilder) -> Result<Response> {
|
async fn build_request(&self, r: RequestBuilder) -> Result<Response> {
|
||||||
let v = r.query(&[("k", &*self.key)]).build()?;
|
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(
|
pub async fn beatmaps(
|
||||||
|
|
Loading…
Add table
Reference in a new issue