diff --git a/src/bin/update_users.rs b/src/bin/update_users.rs index a5ca7e0..974fc1e 100644 --- a/src/bin/update_users.rs +++ b/src/bin/update_users.rs @@ -4,7 +4,7 @@ use serenity::{ model::gateway::{GatewayIntents, Ready}, Client, }; -use skynet_discord_bot::{db_init, get_config, get_server_config_bulk, set_roles::update_server, Config, DataBase}; +use skynet_discord_bot::{db_init, get_config, get_server_config_bulk, set_roles, update_server, Config, DataBase}; use std::{process, sync::Arc}; use tokio::sync::RwLock; @@ -58,7 +58,14 @@ async fn bulk_check(ctx: Arc) { let db = db_lock.read().await; + let config_lock = { + let data_read = ctx.data.read().await; + data_read.get::().expect("Expected Config in TypeMap.").clone() + }; + let config = config_lock.read().await; + for server_config in get_server_config_bulk(&db).await { - update_server(&ctx, &server_config, &[], &vec![]).await; + set_roles::update_server(&ctx, &server_config, &[], &vec![]).await; + update_server(server_config.server_minecraft, &db, &server_config.server, &config).await; } } diff --git a/src/commands/add_minecraft.rs b/src/commands/add_minecraft.rs index 11d09a3..3457190 100644 --- a/src/commands/add_minecraft.rs +++ b/src/commands/add_minecraft.rs @@ -12,10 +12,9 @@ use sqlx::{Pool, Sqlite}; pub(crate) mod user { use super::*; - use crate::commands::add_minecraft::server::update_whitelist; use crate::commands::link_email::link::get_server_member_discord; use serenity::model::id::UserId; - use skynet_discord_bot::{Config, Wolves}; + use skynet_discord_bot::{update_whitelist, Config, Wolves}; use sqlx::Error; pub fn register(command: &mut CreateApplicationCommand) -> &mut CreateApplicationCommand { @@ -117,13 +116,10 @@ pub(crate) mod user { } pub(crate) mod server { - use serde::{Deserialize, Serialize}; - use serenity::model::id::GuildId; use sqlx::Error; // this is to managfe the server side of commands related to minecraft use super::*; - use skynet_discord_bot::set_roles::get_server_member_bulk; - use skynet_discord_bot::{is_admin, Config}; + use skynet_discord_bot::{is_admin, update_server, Config}; pub fn register(command: &mut CreateApplicationCommand) -> &mut CreateApplicationCommand { command @@ -210,77 +206,4 @@ pub(crate) mod server { .fetch_optional(db) .await } - - /** - loop through all members of server - get a list of folks with mc accounts that are members - and a list that arent members - */ - async fn update_server(server_minecraft: Option, db: &Pool, g_id: &GuildId, config: &Config) { - if let Some(server_id) = server_minecraft { - let mut usernames = vec![]; - for member in get_server_member_bulk(db, g_id).await { - if let Some(x) = member.minecraft { - usernames.push(x); - } - } - if !usernames.is_empty() { - update_whitelist(&usernames, &server_id, &config.discord_minecraft, true).await; - } - } - } - - pub async fn update_whitelist(add: &Vec, server: &str, token: &str, wipe_reset: bool) { - let url_base = format!("http://panel.games.skynet.ie/api/client/servers/{server}"); - let bearer = format!("Bearer {token}"); - - async fn post(url: &str, bearer: &str, data: &T) { - match surf::post(url) - .header("Authorization", bearer) - .header("Content-Type", "application/json") - .header("Accept", "Application/vnd.pterodactyl.v1+json") - .body_json(&data) - { - Ok(req) => { - req.await.ok(); - } - Err(e) => { - dbg!(e); - } - } - } - - #[derive(Deserialize, Serialize, Debug)] - struct BodyCommand { - command: String, - } - - #[derive(Deserialize, Serialize, Debug)] - struct BodyDelete { - root: String, - files: Vec, - } - - if wipe_reset { - // delete whitelist - let deletion = BodyDelete { - root: "/".to_string(), - files: vec!["whitelist.json".to_string()], - }; - post(&format!("{url_base}/files/delete"), &bearer, &deletion).await; - - // reload the whitelist - let data = BodyCommand { - command: "whitelist reload".to_string(), - }; - post(&format!("{url_base}/command"), &bearer, &data).await; - } - - for name in add { - let data = BodyCommand { - command: format!("whitelist add {name}"), - }; - post(&format!("{url_base}/command"), &bearer, &data).await; - } - } } diff --git a/src/commands/link_email.rs b/src/commands/link_email.rs index bb065ab..f4441df 100644 --- a/src/commands/link_email.rs +++ b/src/commands/link_email.rs @@ -15,7 +15,7 @@ use serenity::{ }; use skynet_discord_bot::{get_now_iso, random_string, Config, DataBase, Wolves, WolvesVerify}; use sqlx::{Pool, Sqlite}; -pub(crate) mod link { +pub mod link { use super::*; pub async fn run(command: &ApplicationCommandInteraction, ctx: &Context) -> String { @@ -234,7 +234,7 @@ pub(crate) mod link { } } -pub(crate) mod verify { +pub mod verify { use super::*; use crate::commands::link_email::link::{db_pending_clear_expired, get_verify_from_db}; use serenity::model::user::User; diff --git a/src/lib.rs b/src/lib.rs index 78a6e4f..6f0e5ce 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -8,6 +8,7 @@ use serenity::{ prelude::TypeMapKey, }; +use crate::set_roles::get_server_member_bulk; use chrono::{Datelike, SecondsFormat, Utc}; use rand::{distributions::Alphanumeric, thread_rng, Rng}; use serenity::client::Context; @@ -679,3 +680,76 @@ pub async fn is_admin(command: &ApplicationCommandInteraction, ctx: &Context) -> None } } + +/** +loop through all members of server +get a list of folks with mc accounts that are members +and a list that arent members + */ +pub async fn update_server(server_minecraft: Option, db: &Pool, g_id: &GuildId, config: &Config) { + if let Some(server_id) = server_minecraft { + let mut usernames = vec![]; + for member in get_server_member_bulk(db, g_id).await { + if let Some(x) = member.minecraft { + usernames.push(x); + } + } + if !usernames.is_empty() { + update_whitelist(&usernames, &server_id, &config.discord_minecraft, true).await; + } + } +} + +pub async fn update_whitelist(add: &Vec, server: &str, token: &str, wipe_reset: bool) { + let url_base = format!("http://panel.games.skynet.ie/api/client/servers/{server}"); + let bearer = format!("Bearer {token}"); + + async fn post(url: &str, bearer: &str, data: &T) { + match surf::post(url) + .header("Authorization", bearer) + .header("Content-Type", "application/json") + .header("Accept", "Application/vnd.pterodactyl.v1+json") + .body_json(&data) + { + Ok(req) => { + req.await.ok(); + } + Err(e) => { + dbg!(e); + } + } + } + + #[derive(Deserialize, Serialize, Debug)] + struct BodyCommand { + command: String, + } + + #[derive(Deserialize, Serialize, Debug)] + struct BodyDelete { + root: String, + files: Vec, + } + + if wipe_reset { + // delete whitelist + let deletion = BodyDelete { + root: "/".to_string(), + files: vec!["whitelist.json".to_string()], + }; + post(&format!("{url_base}/files/delete"), &bearer, &deletion).await; + + // reload the whitelist + let data = BodyCommand { + command: "whitelist reload".to_string(), + }; + post(&format!("{url_base}/command"), &bearer, &data).await; + } + + for name in add { + let data = BodyCommand { + command: format!("whitelist add {name}"), + }; + post(&format!("{url_base}/command"), &bearer, &data).await; + } +} diff --git a/src/main.rs b/src/main.rs index 21bce57..208f352 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,4 +1,4 @@ -mod commands; +pub mod commands; use serenity::{ async_trait,