mirror of
https://github.com/natsukagami/youmubot.git
synced 2025-04-18 16:28:55 +00:00
Save pp in local db
This commit is contained in:
parent
2913d92682
commit
22668fe654
3 changed files with 18 additions and 20 deletions
|
@ -28,25 +28,20 @@ impl Announcer for OsuAnnouncer {
|
||||||
let osu = d.get_cloned::<OsuClient>();
|
let osu = d.get_cloned::<OsuClient>();
|
||||||
// For each user...
|
// For each user...
|
||||||
let mut data = OsuSavedUsers::open(&*d.read()).borrow()?.clone();
|
let mut data = OsuSavedUsers::open(&*d.read()).borrow()?.clone();
|
||||||
for (user_id, osu_user) in data.iter_mut() {
|
'user_loop: for (user_id, osu_user) in data.iter_mut() {
|
||||||
let mut user = None;
|
let mut pp_values = vec![]; // Store the pp values here...
|
||||||
for mode in &[Mode::Std, Mode::Taiko, Mode::Mania, Mode::Catch] {
|
for mode in &[Mode::Std, Mode::Taiko, Mode::Mania, Mode::Catch] {
|
||||||
let scores = OsuAnnouncer::scan_user(&osu, osu_user, *mode)?;
|
let scores = OsuAnnouncer::scan_user(&osu, osu_user, *mode)?;
|
||||||
if scores.is_empty() {
|
if scores.is_empty() && !osu_user.pp.is_empty() {
|
||||||
|
// Nothing to update: no new scores and pp is there.
|
||||||
|
pp_values.push(osu_user.pp[*mode as usize]);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
let user = {
|
let user = match osu.user(UserID::ID(osu_user.id), |f| f.mode(*mode)) {
|
||||||
let user = &mut user;
|
Ok(Some(u)) => u,
|
||||||
if let None = user {
|
_ => continue 'user_loop,
|
||||||
match osu.user(UserID::ID(osu_user.id), |f| f.mode(*mode)) {
|
|
||||||
Ok(u) => {
|
|
||||||
*user = u;
|
|
||||||
}
|
|
||||||
Err(_) => continue,
|
|
||||||
}
|
|
||||||
};
|
|
||||||
user.as_ref().unwrap()
|
|
||||||
};
|
};
|
||||||
|
pp_values.push(user.pp);
|
||||||
scores
|
scores
|
||||||
.into_par_iter()
|
.into_par_iter()
|
||||||
.filter_map(|(rank, score)| {
|
.filter_map(|(rank, score)| {
|
||||||
|
@ -74,6 +69,8 @@ impl Announcer for OsuAnnouncer {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
osu_user.last_update = chrono::Utc::now();
|
osu_user.last_update = chrono::Utc::now();
|
||||||
|
osu_user.pp = pp_values;
|
||||||
|
dbg!(&osu_user);
|
||||||
}
|
}
|
||||||
// Update users
|
// Update users
|
||||||
*OsuSavedUsers::open(&*d.read()).borrow_mut()? = data;
|
*OsuSavedUsers::open(&*d.read()).borrow_mut()? = data;
|
||||||
|
|
|
@ -1,12 +1,10 @@
|
||||||
use chrono::{DateTime, Utc};
|
use chrono::{DateTime, Utc};
|
||||||
|
|
||||||
use serde::{Deserialize, Serialize};
|
|
||||||
use serenity::{
|
|
||||||
model::id::{ChannelId, UserId},
|
|
||||||
};
|
|
||||||
use std::collections::HashMap;
|
|
||||||
use youmubot_db::{DB};
|
|
||||||
use crate::models::{Beatmap, Mode};
|
use crate::models::{Beatmap, Mode};
|
||||||
|
use serde::{Deserialize, Serialize};
|
||||||
|
use serenity::model::id::{ChannelId, UserId};
|
||||||
|
use std::collections::HashMap;
|
||||||
|
use youmubot_db::DB;
|
||||||
|
|
||||||
/// Save the user IDs.
|
/// Save the user IDs.
|
||||||
pub type OsuSavedUsers = DB<HashMap<UserId, OsuUser>>;
|
pub type OsuSavedUsers = DB<HashMap<UserId, OsuUser>>;
|
||||||
|
@ -19,4 +17,6 @@ pub type OsuLastBeatmap = DB<HashMap<ChannelId, (Beatmap, Mode)>>;
|
||||||
pub struct OsuUser {
|
pub struct OsuUser {
|
||||||
pub id: u64,
|
pub id: u64,
|
||||||
pub last_update: DateTime<Utc>,
|
pub last_update: DateTime<Utc>,
|
||||||
|
#[serde(default)]
|
||||||
|
pub pp: Vec<Option<f64>>,
|
||||||
}
|
}
|
||||||
|
|
|
@ -145,6 +145,7 @@ pub fn save(ctx: &mut Context, msg: &Message, mut args: Args) -> CommandResult {
|
||||||
OsuUser {
|
OsuUser {
|
||||||
id: u.id,
|
id: u.id,
|
||||||
last_update: chrono::Utc::now(),
|
last_update: chrono::Utc::now(),
|
||||||
|
pp: vec![],
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
msg.reply(
|
msg.reply(
|
||||||
|
|
Loading…
Add table
Reference in a new issue