use skynet_discord_bot::{db_init, get_config, get_server_config_bulk, Accounts, Config, Servers}; use serde::Deserialize; use serenity::model::id::GuildId; use sqlx::{Pool, Sqlite}; #[tokio::main] async fn main() { let config = get_config(); let db = match db_init(&config).await { Ok(x) => x, Err(_) => return, }; // handle wolves api here get_wolves(&db).await; // get from skynet for the compsoc server only get_skynet(&db, &config).await; } #[derive(Debug, Deserialize)] pub struct SkynetResult { discord: String, id_wolves: String, id_member: String, } async fn get_skynet(db: &Pool, config: &Config) { let url = format!("{}/ldap/discord?auth={}", &config.ldap_api, &config.auth); if let Ok(result) = surf::get(url).recv_json::>().await { for user in result { add_users_skynet(db, &config.skynet_server, &user).await; } } } async fn add_users_skynet(db: &Pool, server: &GuildId, user: &SkynetResult) { if !user.id_wolves.is_empty() { match sqlx::query_as::<_, Accounts>( " UPDATE accounts SET discord = ? WHERE server = ? AND wolves_id = ? ", ) .bind(&user.discord) .bind(*server.as_u64() as i64) .bind(&user.id_wolves) .fetch_optional(db) .await { Ok(_) => {} Err(e) => { println!("Failure to insert into {} {:?}", server.as_u64(), user); println!("{:?}", e); } } } if !user.id_member.is_empty() { match sqlx::query_as::<_, Accounts>( " UPDATE accounts SET discord = ? WHERE server = ? AND id_member = ? ", ) .bind(&user.discord) .bind(*server.as_u64() as i64) .bind(&user.id_member) .fetch_optional(db) .await { Ok(_) => {} Err(e) => { println!("Failure to insert into {} {:?}", server.as_u64(), user); println!("{:?}", e); } } } } #[derive(Debug, Deserialize)] struct WolvesResult { pub id_wolves: String, pub email: String, pub expiry: String, } async fn get_wolves(db: &Pool) { for server_config in get_server_config_bulk(db).await { let Servers { server, wolves_api, .. } = server_config; // get the data here let result: Vec = vec![]; for user in result { add_users_wolves(db, &server, &user).await; } } } async fn add_users_wolves(db: &Pool, server: &GuildId, user: &WolvesResult) { match sqlx::query_as::<_, Accounts>( " INSERT OR REPLACE INTO accounts (server, id_wolves, email, expiry) VALUES (?1, ?2, ?3, ?4) ", ) .bind(*server.as_u64() as i64) .bind(&user.id_wolves) .bind(&user.email) .bind(&user.expiry) .fetch_optional(db) .await { Ok(_) => {} Err(e) => { println!("Failure to insert into {} {:?}", server.as_u64(), user); println!("{:?}", e); } } }