diff options
Diffstat (limited to 'src/import.rs')
-rw-r--r-- | src/import.rs | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/src/import.rs b/src/import.rs new file mode 100644 index 0000000..f7d9873 --- /dev/null +++ b/src/import.rs @@ -0,0 +1,54 @@ +use serde::Deserialize; + +use crate::database::{BoardRow, Database, Error}; + +#[derive(Debug, Deserialize)] +pub struct Emboard { + guildName: String, + leaderboard: Vec<EmboardRow>, +} + +#[derive(Debug, Deserialize)] +pub struct EmboardRow { + guildId: String, + discordId: String, + points: String, + username: String, +} + +pub fn import(db: &Database, json: String) { + let embaord: Emboard = match serde_json::from_str(&json) { + Ok(e) => e, + Err(e) => { + panic!("{e}"); + } + }; + + let Some(first) = embaord.leaderboard.first() else { + return; + }; + + let guild_id = u64::from_str_radix(&first.guildId, 10).unwrap(); + if db.get_leaderboard(guild_id).is_err() { + db.create_leaderboard(guild_id).unwrap(); + } + + for user in embaord.leaderboard { + let user_id = u64::from_str_radix(&user.discordId, 10).unwrap(); + let points = i64::from_str_radix(&user.points, 10).unwrap(); + + let res = db.give_user_points(guild_id, user_id, points); + if let Err(Error::UserNotExist) = res { + db.add_user_to_leaderboard( + guild_id, + BoardRow { + user_id, + user_handle: user.username, + user_nickname: None, + points, + }, + ) + .unwrap(); + } + } +} |