Update to codeforces package with sound ratelimiting

This commit is contained in:
Natsu Kagami 2021-02-18 03:42:49 +09:00
parent 68142c6236
commit e36c385f15
Signed by: nki
GPG key ID: 7306B3D3C3AD6E51
5 changed files with 26 additions and 38 deletions

View file

@ -22,7 +22,7 @@ mod live;
struct CFClient;
impl TypeMapKey for CFClient {
type Value = Arc<ratelimit::Ratelimit<codeforces::Client>>;
type Value = Arc<codeforces::Client>;
}
use db::{CfSavedUsers, CfUser};
@ -33,11 +33,7 @@ pub use hook::InfoHook;
pub async fn setup(path: &std::path::Path, data: &mut TypeMap, announcers: &mut AnnouncerHandler) {
CfSavedUsers::insert_into(data, path.join("cf_saved_users.yaml"))
.expect("Must be able to set up DB");
let client = Arc::new(ratelimit::Ratelimit::new(
codeforces::Client::new(),
4,
std::time::Duration::from_secs(1),
));
let client = Arc::new(codeforces::Client::new());
data.insert::<hook::ContestCache>(hook::ContestCache::new(client.clone()).await.unwrap());
data.insert::<CFClient>(client);
announcers.add("codeforces", announcer::Announcer);
@ -78,7 +74,7 @@ pub async fn profile(ctx: &Context, m: &Message, mut args: Args) -> CommandResul
}
};
let account = codeforces::User::info(&*http.borrow().await?, &[&handle[..]])
let account = codeforces::User::info(&*http, &[&handle[..]])
.await?
.into_iter()
.next();
@ -110,7 +106,7 @@ pub async fn save(ctx: &Context, m: &Message, mut args: Args) -> CommandResult {
let handle = args.single::<String>()?;
let http = data.get::<CFClient>().unwrap();
let account = codeforces::User::info(&*http.borrow().await?, &[&handle[..]])
let account = codeforces::User::info(&*http, &[&handle[..]])
.await?
.into_iter()
.next();
@ -122,7 +118,7 @@ pub async fn save(ctx: &Context, m: &Message, mut args: Args) -> CommandResult {
}
Some(acc) => {
// Collect rating changes data.
let rating_changes = acc.rating_changes(&*http.borrow().await?).await?;
let rating_changes = acc.rating_changes(&*http).await?;
let mut db = CfSavedUsers::open(&*data);
m.reply(
&ctx,
@ -272,7 +268,7 @@ pub async fn contestranks(ctx: &Context, m: &Message, mut args: Args) -> Command
.collect::<HashMap<_, _>>()
.await;
let http = data.get::<CFClient>().unwrap();
let (contest, problems, ranks) = Contest::standings(&*http.borrow().await?, contest_id, |f| {
let (contest, problems, ranks) = Contest::standings(&*http, contest_id, |f| {
f.handles(members.iter().map(|(k, _)| k.clone()).collect())
})
.await?;