diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs deleted file mode 100644 index a338a00..0000000 --- a/.git-blame-ignore-revs +++ /dev/null @@ -1,2 +0,0 @@ -# Fix typos -7e90f451965b0edbd331765ad295a02f31d2bf24 diff --git a/.taplo.toml b/.taplo.toml deleted file mode 100644 index 3b409e9..0000000 --- a/.taplo.toml +++ /dev/null @@ -1,2 +0,0 @@ -[formatting] -column_width = 120 diff --git a/flake.nix b/flake.nix index 3a6032f..81f4490 100644 --- a/flake.nix +++ b/flake.nix @@ -128,8 +128,6 @@ User = "${cfg.user}"; Group = "${cfg.user}"; ExecStart = "${self.defaultPackage."${system}"}/bin/${script}"; - # kill each service if its ran for 9 min - TimeoutStartSec=540; EnvironmentFile = [ "${cfg.env.discord}" "${cfg.env.mail}" diff --git a/src/bin/cleanup_committee.rs b/src/bin/cleanup_committee.rs index 141af89..c6485a7 100644 --- a/src/bin/cleanup_committee.rs +++ b/src/bin/cleanup_committee.rs @@ -18,8 +18,8 @@ use tokio::sync::RwLock; /// Cleanup teh Committee server /// -/// This removes any invalid roles/channels which have been set up accidentally -/// DO NOT run this locally unless you have a fresh copy of the live database handy. +/// This removes any invalid roles/channels which ay have been set up accidentally +/// DO NOT run this locally unless you have a fresh copy of teh live database handy. #[tokio::main] async fn main() { let config = get_config(); @@ -41,7 +41,7 @@ async fn main() { let mut data = client.data.write().await; data.insert::(Arc::new(RwLock::new(config))); - data.insert::(Arc::new(db)); + data.insert::(Arc::new(RwLock::new(db))); } if let Err(why) = client.start().await { @@ -52,28 +52,22 @@ async fn main() { struct Handler; #[async_trait] impl EventHandler for Handler { - async fn cache_ready(&self, ctx: Context, _guilds: Vec) { - let config_lock = { - let data_read = ctx.data.read().await; - data_read.get::().expect("Expected Config in TypeMap.").clone() - }; - let config_global = config_lock.read().await; - - let server = config_global.committee_server; - - ctx.shard.chunk_guild(server, Some(2000), false, ChunkGuildFilter::None, None); - - println!("Cache loaded"); + async fn cache_ready(&self, ctx: Context, guilds: Vec) { + for guild in guilds { + ctx.shard.chunk_guild(guild, Some(2000), false, ChunkGuildFilter::None, None); + } + println!("Cache built successfully!"); } async fn guild_members_chunk(&self, ctx: Context, chunk: GuildMembersChunkEvent) { if (chunk.chunk_index + 1) == chunk.chunk_count { - println!("Cache built successfully!"); - let db = { + let db_lock = { let data_read = ctx.data.read().await; data_read.get::().expect("Expected Config in TypeMap.").clone() }; + 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() @@ -96,7 +90,7 @@ async fn cleanup(db: &Pool, ctx: &Context, config: &Config) { let name = &channel.name; let committee_tmp = committees.iter().filter(|x| &x.name_channel == name).collect::>(); let committee = match committee_tmp.first() { - // if there are no committees which match then this is not a channel we care about + // if there are no committees which match then this is not a channelw e care about None => { continue; } @@ -118,7 +112,7 @@ async fn cleanup(db: &Pool, ctx: &Context, config: &Config) { let name = &role.name; let committee_tmp = committees.iter().filter(|x| &x.name_role == name).collect::>(); let committee = match committee_tmp.first() { - // if there are no committees which match then this is not a channel we care about + // if there are no committees which match then this is not a channelw e care about None => { continue; } diff --git a/src/bin/update_committee.rs b/src/bin/update_committee.rs index d90cbac..b2792e0 100644 --- a/src/bin/update_committee.rs +++ b/src/bin/update_committee.rs @@ -36,7 +36,7 @@ async fn main() { let mut data = client.data.write().await; data.insert::(Arc::new(RwLock::new(config))); - data.insert::(Arc::new(db)); + data.insert::(Arc::new(RwLock::new(db))); } if let Err(why) = client.start().await { @@ -47,23 +47,15 @@ async fn main() { struct Handler; #[async_trait] impl EventHandler for Handler { - async fn cache_ready(&self, ctx: Context, _guilds: Vec) { - let config_lock = { - let data_read = ctx.data.read().await; - data_read.get::().expect("Expected Config in TypeMap.").clone() - }; - let config_global = config_lock.read().await; - - let server = config_global.committee_server; - - ctx.shard.chunk_guild(server, Some(2000), false, ChunkGuildFilter::None, None); - - println!("Cache loaded"); + async fn cache_ready(&self, ctx: Context, guilds: Vec) { + for guild in guilds { + ctx.shard.chunk_guild(guild, Some(2000), false, ChunkGuildFilter::None, None); + } + println!("Cache built successfully!"); } async fn guild_members_chunk(&self, ctx: Context, chunk: GuildMembersChunkEvent) { if (chunk.chunk_index + 1) == chunk.chunk_count { - println!("Cache built successfully!"); // u[date committee server committee::check_committee(&ctx).await; diff --git a/src/bin/update_data.rs b/src/bin/update_data.rs index fe4138f..8f73ce9 100644 --- a/src/bin/update_data.rs +++ b/src/bin/update_data.rs @@ -38,7 +38,7 @@ async fn main() { let mut data = client.data.write().await; data.insert::(Arc::new(RwLock::new(config))); - data.insert::(Arc::new(db)); + data.insert::(Arc::new(RwLock::new(db))); } if let Err(why) = client.start().await { diff --git a/src/bin/update_server-icon.rs b/src/bin/update_server-icon.rs index c4f9eca..56957da 100644 --- a/src/bin/update_server-icon.rs +++ b/src/bin/update_server-icon.rs @@ -35,7 +35,7 @@ async fn main() { let mut data = client.data.write().await; data.insert::(Arc::new(RwLock::new(config))); - data.insert::(Arc::new(db)); + data.insert::(Arc::new(RwLock::new(db))); } if let Err(why) = client.start().await { @@ -50,10 +50,11 @@ impl EventHandler for Handler { let ctx = Arc::new(ctx); println!("{} is connected!", ready.user.name); - let db = { + let db_lock = { let data_read = ctx.data.read().await; data_read.get::().expect("Expected Config in TypeMap.").clone() }; + let db = db_lock.read().await; let config_lock = { let data_read = ctx.data.read().await; diff --git a/src/bin/update_users.rs b/src/bin/update_users.rs index 3150bcf..6ac9e00 100644 --- a/src/bin/update_users.rs +++ b/src/bin/update_users.rs @@ -12,13 +12,7 @@ use skynet_discord_bot::{ }, get_config, Config, }; -use std::{ - process, - sync::{ - atomic::{AtomicUsize, Ordering}, - Arc, - }, -}; +use std::{process, sync::Arc}; use tokio::sync::RwLock; #[tokio::main] @@ -33,10 +27,7 @@ async fn main() { let intents = GatewayIntents::GUILDS | GatewayIntents::GUILD_MESSAGES | GatewayIntents::MESSAGE_CONTENT | GatewayIntents::GUILD_MEMBERS; // Build our client. let mut client = Client::builder(&config.discord_token, intents) - .event_handler(Handler { - server_count: Default::default(), - server_cached: Default::default(), - }) + .event_handler(Handler {}) .cache_settings(serenity::cache::Settings::default()) .await .expect("Error creating client"); @@ -45,7 +36,7 @@ async fn main() { let mut data = client.data.write().await; data.insert::(Arc::new(RwLock::new(config))); - data.insert::(Arc::new(db)); + data.insert::(Arc::new(RwLock::new(db))); } if let Err(why) = client.start().await { @@ -53,42 +44,35 @@ async fn main() { } } -struct Handler { - server_count: AtomicUsize, - server_cached: AtomicUsize, -} +struct Handler; #[async_trait] impl EventHandler for Handler { async fn cache_ready(&self, ctx: Context, guilds: Vec) { - self.server_count.swap(guilds.len(), Ordering::SeqCst); for guild in guilds { ctx.shard.chunk_guild(guild, Some(2000), false, ChunkGuildFilter::None, None); } - println!("Cache loaded {}", &self.server_count.load(Ordering::SeqCst)); + println!("Cache built successfully!"); } async fn guild_members_chunk(&self, ctx: Context, chunk: GuildMembersChunkEvent) { if (chunk.chunk_index + 1) == chunk.chunk_count { - self.server_cached.fetch_add(1, Ordering::SeqCst); - if (self.server_cached.load(Ordering::SeqCst) + 1) == self.server_count.load(Ordering::SeqCst) { - println!("Cache built successfully!"); + // this goes into each server and sets roles for each wolves member + check_bulk(&ctx).await; - // this goes into each server and sets roles for each wolves member - check_bulk(&ctx).await; - - // finish up - process::exit(0); - } + // finish up + process::exit(0); } } } async fn check_bulk(ctx: &Context) { - let db = { + let db_lock = { let data_read = ctx.data.read().await; data_read.get::().expect("Expected Config in TypeMap.").clone() }; + let db = db_lock.read().await; + for server_config in get_server_config_bulk(&db).await { normal::update_server(ctx, &server_config, &[], &[]).await; } diff --git a/src/commands/add_server.rs b/src/commands/add_server.rs index eaf0971..0c7dd2f 100644 --- a/src/commands/add_server.rs +++ b/src/commands/add_server.rs @@ -56,10 +56,11 @@ pub async fn run(command: &CommandInteraction, ctx: &Context) -> String { return "Please provide a valid channel for ``Bot Channel``".to_string(); }; - let db = { + let db_lock = { let data_read = ctx.data.read().await; data_read.get::().expect("Expected Databse in TypeMap.").clone() }; + let db = db_lock.read().await; let server_data = Servers { server: command.guild_id.unwrap_or_default(), @@ -101,7 +102,7 @@ async fn add_server(db: &Pool, ctx: &Context, server: &Servers) -> Resul .fetch_optional(db) .await; - // if the entry does not exist already then do a user update + // if the entry does not exist already tehn do a user update let (update, current_remove, current_role, past_remove, past_role) = match &existing { None => (true, false, None, false, None), Some(x) => { diff --git a/src/commands/count.rs b/src/commands/count.rs index 41b9d81..8a64ee7 100644 --- a/src/commands/count.rs +++ b/src/commands/count.rs @@ -27,10 +27,11 @@ pub mod committee { false }; - let db = { + let db_lock = { let data_read = ctx.data.read().await; data_read.get::().expect("Expected Databse in TypeMap.").clone() }; + let db = db_lock.read().await; let mut cs = vec![]; // pull it from a DB @@ -94,16 +95,15 @@ pub mod servers { use std::collections::HashMap; pub async fn run(_command: &CommandInteraction, ctx: &Context) -> String { - let db = { + let db_lock = { let data_read = ctx.data.read().await; data_read.get::().expect("Expected Databse in TypeMap.").clone() }; + let db = db_lock.read().await; let mut committees = HashMap::new(); - if let Some(x) = get_committees(&db).await { - for committee in x { - committees.insert(committee.id, committee.to_owned()); - } + for committee in get_committees(&db).await { + committees.insert(committee.id, committee.to_owned()); } let mut cs = vec![]; @@ -150,7 +150,7 @@ pub mod servers { let length = line.len() + 1; - // +3 is to account for the closing fence + // +3 is to account for the closing fense if length < (limit + 3) { response.push(line); limit -= length; diff --git a/src/commands/minecraft.rs b/src/commands/minecraft.rs index 5098f11..a4d1b1b 100644 --- a/src/commands/minecraft.rs +++ b/src/commands/minecraft.rs @@ -23,10 +23,11 @@ pub(crate) mod user { use sqlx::Error; pub async fn run(command: &CommandInteraction, ctx: &Context) -> String { - let db = { + let db_lock = { let data_read = ctx.data.read().await; data_read.get::().expect("Expected Databse in TypeMap.").clone() }; + let db = db_lock.read().await; let config_lock = { let data_read = ctx.data.read().await; @@ -195,7 +196,7 @@ pub(crate) mod server { model::id::GuildId, }; use sqlx::Error; - // this is to manage the server side of commands related to minecraft + // this is to managfe the server side of commands related to minecraft use super::*; use skynet_discord_bot::{ common::minecraft::{update_server, Minecraft}, @@ -228,10 +229,11 @@ pub(crate) mod server { return String::from("Expected Server ID"); }; - let db = { + let db_lock = { let data_read = ctx.data.read().await; data_read.get::().expect("Expected Databse in TypeMap.").clone() }; + let db = db_lock.read().await; match add_server(&db, &g_id, &server_minecraft).await { Ok(_) => {} @@ -288,10 +290,11 @@ pub(crate) mod server { Some(x) => x, }; - let db = { + let db_lock = { let data_read = ctx.data.read().await; data_read.get::().expect("Expected Databse in TypeMap.").clone() }; + let db = db_lock.read().await; let servers = get_minecraft_config_server(&db, g_id).await; @@ -363,10 +366,11 @@ pub(crate) mod server { return String::from("Expected Server ID"); }; - let db = { - let data = ctx.data.read().await; - data.get::().expect("Expected Databse in TypeMap.").clone() + let db_lock = { + let data_read = ctx.data.read().await; + data_read.get::().expect("Expected Databse in TypeMap.").clone() }; + let db = db_lock.read().await; match server_remove(&db, &g_id, &server_minecraft).await { Ok(_) => {} diff --git a/src/commands/role_adder.rs b/src/commands/role_adder.rs index 0573b37..e60ac83 100644 --- a/src/commands/role_adder.rs +++ b/src/commands/role_adder.rs @@ -62,10 +62,11 @@ pub mod edit { false }; - let db = { + let db_lock = { let data_read = ctx.data.read().await; data_read.get::().expect("Expected Databse in TypeMap.").clone() }; + let db = db_lock.read().await; let server = command.guild_id.unwrap_or_default(); let server_data = RoleAdder { @@ -146,7 +147,7 @@ pub mod tools { use sqlx::{Pool, Sqlite}; pub async fn on_role_change(db: &Pool, ctx: &Context, new_data: Member) { - // check if the role changed is part of the ones for this server + // check if the role changed is part of the oens for this server if let Ok(role_adders) = sqlx::query_as::<_, RoleAdder>( r#" SELECT * @@ -162,7 +163,7 @@ pub mod tools { let mut roles_remove = vec![]; for role_adder in role_adders { - // if the user has both A and B give them C + // if the user has both A dnd B give them C if new_data.roles.contains(&role_adder.role_a) && new_data.roles.contains(&role_adder.role_b) && !new_data.roles.contains(&role_adder.role_c) { roles_add.push(role_adder.role_c); diff --git a/src/commands/server_icon.rs b/src/commands/server_icon.rs index d4a78d5..0cba1b1 100644 --- a/src/commands/server_icon.rs +++ b/src/commands/server_icon.rs @@ -18,10 +18,11 @@ pub(crate) mod admin { use super::*; pub async fn run(_command: &CommandInteraction, ctx: &Context) -> String { - let db = { + let db_lock = { let data_read = ctx.data.read().await; data_read.get::().expect("Expected Databse in TypeMap.").clone() }; + let db = db_lock.read().await; let config_lock = { let data_read = ctx.data.read().await; @@ -68,10 +69,11 @@ pub(crate) mod user { use sqlx::{Pool, Sqlite}; pub async fn run(command: &CommandInteraction, ctx: &Context) -> String { - let db = { + let db_lock = { let data_read = ctx.data.read().await; data_read.get::().expect("Expected Databse in TypeMap.").clone() }; + let db = db_lock.read().await; let config_toml = get_config_icons::minimal(); @@ -143,10 +145,11 @@ pub(crate) mod user { use sqlx::{Pool, Sqlite}; pub async fn run(_command: &CommandInteraction, ctx: &Context) -> String { - let db = { + let db_lock = { let data_read = ctx.data.read().await; data_read.get::().expect("Expected Databse in TypeMap.").clone() }; + let db = db_lock.read().await; let config_toml = get_config_icons::minimal(); @@ -208,7 +211,7 @@ pub(crate) mod user { let length = line.len() + 1; - // +3 is to account for the closing fence + // +3 is to account for the closing fense if length < (limit + 3) { response.push(line); limit -= length; diff --git a/src/commands/wolves.rs b/src/commands/wolves.rs index 843ca70..dc40ad0 100644 --- a/src/commands/wolves.rs +++ b/src/commands/wolves.rs @@ -21,10 +21,11 @@ pub mod link { use serenity::all::{CommandDataOption, CommandDataOptionValue, CommandInteraction}; pub async fn run(command: &CommandInteraction, ctx: &Context) -> String { - let db = { + let db_lock = { let data_read = ctx.data.read().await; data_read.get::().expect("Expected Databse in TypeMap.").clone() }; + let db = db_lock.read().await; let config_lock = { let data_read = ctx.data.read().await; @@ -100,7 +101,7 @@ pub mod link { return "Email already verified".to_string(); } - // generate an auth key + // generate a auth key let auth = random_string(20); match send_mail(&config, &details.email, &auth, &command.user.name) { Ok(_) => match save_to_db(&db, &details, &auth, &command.user.id).await { @@ -209,7 +210,7 @@ pub mod link { .subject("Skynet: Link Discord to Wolves.") .multipart( // This is composed of two parts. - // also helps not trip spam settings (uneven number of urls) + // also helps not trip spam settings (uneven number of url's MultiPart::alternative() .singlepart(SinglePart::builder().header(header::ContentType::TEXT_PLAIN).body(body_text)) .singlepart(SinglePart::builder().header(header::ContentType::TEXT_HTML).body(html.into_string())), @@ -313,10 +314,11 @@ pub mod verify { use sqlx::Error; pub async fn run(command: &CommandInteraction, ctx: &Context) -> String { - let db = { + let db_lock = { let data_read = ctx.data.read().await; data_read.get::().expect("Expected Database in TypeMap.").clone() }; + let db = db_lock.read().await; // check if user has used /link_wolves let details = if let Some(x) = get_verify_from_db(&db, &command.user.id).await { @@ -458,7 +460,7 @@ pub mod verify { let config = config_lock.read().await; if let Some(x) = get_server_member_discord(db, &discord.id).await { - // if they are a member of one or more committees, and in teh committee server then give them the general committee role + // if they are a member of one or more committees, and in teh committee server then give the teh general committee role // they will get teh more specific vanity role later if !get_committees_id(db, x.id_wolves).await.is_empty() { let server = config.committee_server; @@ -492,12 +494,13 @@ pub mod unlink { use sqlx::{Pool, Sqlite}; pub async fn run(command: &CommandInteraction, ctx: &Context) -> String { - let db = { + let db_lock = { let data_read = ctx.data.read().await; data_read.get::().expect("Expected Databse in TypeMap.").clone() }; + let db = db_lock.read().await; - // doesn't matter if there is one or not, it will be removed regardless + // dosent matter if there is one or not, it will be removed regardless delete_link(&db, &command.user.id).await; "Discord link removed".to_string() diff --git a/src/common/database.rs b/src/common/database.rs index 2eaf5df..0c18668 100644 --- a/src/common/database.rs +++ b/src/common/database.rs @@ -12,10 +12,11 @@ use sqlx::{ Error, FromRow, Pool, Row, Sqlite, }; use std::{str::FromStr, sync::Arc}; +use tokio::sync::RwLock; pub struct DataBase; impl TypeMapKey for DataBase { - type Value = Arc>; + type Value = Arc>>; } #[derive(Debug, Clone, Deserialize, Serialize)] diff --git a/src/common/minecraft.rs b/src/common/minecraft.rs index 77cd754..60f7820 100644 --- a/src/common/minecraft.rs +++ b/src/common/minecraft.rs @@ -24,7 +24,7 @@ impl<'r> FromRow<'r, SqliteRow> for Minecraft { /** loop through all members of server get a list of folks with mc accounts that are members -and a list that aren't members +and a list that arent members */ pub async fn update_server(server_id: &str, db: &Pool, g_id: &GuildId, config: &Config) { let mut usernames = vec![]; @@ -109,7 +109,7 @@ pub async fn whitelist_wipe(server: &str, token: &str) { }; post(&format!("{url_base}/files/delete"), &bearer, &deletion).await; - // recreate the file, passing in the type here so the compiler knows what type of Vec it is + // recreate teh file, passing in the type here so the compiler knows what type of vec it is post::>(&format!("{url_base}/files/write?file=%2Fwhitelist.json"), &bearer, &vec![]).await; // reload the whitelist diff --git a/src/common/renderer.rs b/src/common/renderer.rs index f2c50cc..97e73a0 100644 --- a/src/common/renderer.rs +++ b/src/common/renderer.rs @@ -1,11 +1,12 @@ // this code is taken from https://github.com/MCorange99/svg2colored-png/tree/main -// I was unable to figure out how to use usvg myself so yoinked it from here. +// I was unable to figure out how to use usvg myself so younked it from here. use std::{ ffi::OsStr, path::{Path, PathBuf}, }; +// use clap::builder::OsStr; use color_eyre::{eyre::bail, Result}; use usvg_text_layout::TreeTextToPath; @@ -16,7 +17,7 @@ pub struct Args { /// Output folder where the PNG's will be placed pub output: PathBuf, - /// Comma separated colors that will be used in HEX Eg. 000000,ffffff + /// Comma seperated colors that will be used in HEX Eg. 000000,ffffff /// Can be like an object: black:000000,white:ffffff pub colors: String, diff --git a/src/common/server_icon.rs b/src/common/server_icon.rs index 1a7c2ef..d99f265 100644 --- a/src/common/server_icon.rs +++ b/src/common/server_icon.rs @@ -281,7 +281,7 @@ pub mod update_icon { // check if exists if !path_new.exists() { - // convert if it hasn't been converted already + // convert if it hasnt been converted already match r.render(&path_local, &args) { Ok(_) => {} Err(_e) => { diff --git a/src/common/set_roles.rs b/src/common/set_roles.rs index e11c637..6352c24 100644 --- a/src/common/set_roles.rs +++ b/src/common/set_roles.rs @@ -17,11 +17,13 @@ pub mod normal { } pub async fn update_server(ctx: &Context, server: &Servers, remove_roles: &[Option], members_changed: &[UserId]) { - let db = { + let db_lock = { let data_read = ctx.data.read().await; data_read.get::().expect("Expected Database in TypeMap.").clone() }; + let db = db_lock.read().await; + let Servers { server, role_past, @@ -46,7 +48,7 @@ pub mod normal { if let Ok(x) = server.members(ctx, None, None).await { for member in x { - // members_changed acts as an override to only deal with the users in it + // members_changed acts as an override to only deal with teh users in it if !members_changed.is_empty() && !members_changed.contains(&member.user.id) { continue; } @@ -82,7 +84,7 @@ pub mod normal { if member.roles.contains(role_current) { roles_set.current_rem += 1; - // if they're not a current member and have the role then remove it + // if theya re not a current member and have the role then remove it if let Err(e) = member.remove_role(ctx, role_current).await { println!("{e:?}"); } @@ -172,11 +174,13 @@ pub mod committee { use std::collections::HashMap; pub async fn check_committee(ctx: &Context) { - let db = { + let db_lock = { let data_read = ctx.data.read().await; data_read.get::().expect("Expected Config in TypeMap.").clone() }; + 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() @@ -192,17 +196,12 @@ pub mod committee { } /** - This function can take a Vec of members (or just one) and gives them the appropriate roles on teh committee server + This function can take a vec of members (or just one) and gives tehm the appropiate roles on teh committee server */ pub async fn update_committees(db: &Pool, ctx: &Context, config: &Config, members: &mut Vec) { let server = config.committee_server; let committee_member = config.committee_role; - let committees = match get_committees(db).await { - None => { - return; - } - Some(x) => x, - }; + let committees = get_committees(db).await; let categories = config.committee_category.clone(); // information about the server @@ -224,11 +223,11 @@ pub mod committee { let mut channels = server.channels(&ctx).await.unwrap_or_default(); - // a map of users and the roles they are going to be getting + // a map of users and the roles they are goign to be getting let mut users_roles = HashMap::new(); let mut re_order = false; - // we need to create roles and channels if they don't already exist + // we need to create roles and channels if tehy dont already exist let mut category_index = 0; let mut i = 0; loop { @@ -329,10 +328,6 @@ pub mod committee { // now we have a map of all users that should get roles time to go through all the folks on teh server for member in members { - // if member.user.id != 136522490632601600 { - // continue; - // } - // let roles_current = member.roles(ctx).unwrap_or_default(); let roles_required = match users_roles.get(&member.user.id) { @@ -363,7 +358,7 @@ pub mod committee { let has_committee_role = roles_current_id.contains(&committee_member); if on_committee && !has_committee_role { - // if there are committee roles then give the general purpose role + // if there are committee roles then give the general purporse role roles_add.push(committee_member); } if !on_committee && has_committee_role { @@ -499,8 +494,8 @@ pub mod committee { }) } - pub async fn get_committees(db: &Pool) -> Option> { - match sqlx::query_as::<_, Committees>( + pub async fn get_committees(db: &Pool) -> Vec { + sqlx::query_as::<_, Committees>( r#" SELECT * FROM committees @@ -508,13 +503,10 @@ pub mod committee { ) .fetch_all(db) .await - { - Ok(x) => Some(x), - Err(e) => { - dbg!(e); - None - } - } + .unwrap_or_else(|e| { + dbg!(e); + vec![] + }) } async fn get_server_member_discord(db: &Pool, user: &i64) -> Option { diff --git a/src/common/wolves.rs b/src/common/wolves.rs index 3744558..17305f6 100644 --- a/src/common/wolves.rs +++ b/src/common/wolves.rs @@ -69,10 +69,11 @@ pub mod cns { } pub async fn get_wolves(ctx: &Context) { - let db = { + let db_lock = { let data_read = ctx.data.read().await; data_read.get::().expect("Expected Database in TypeMap.").clone() }; + let db = db_lock.read().await; let config_lock = { let data_read = ctx.data.read().await; @@ -223,10 +224,11 @@ pub mod committees { } pub async fn get_cns(ctx: &Context) { - let db = { + let db_lock = { let data_read = ctx.data.read().await; data_read.get::().expect("Expected Database in TypeMap.").clone() }; + let db = db_lock.read().await; let config_lock = { let data_read = ctx.data.read().await; diff --git a/src/lib.rs b/src/lib.rs index 1a6afb1..75c9d78 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -36,7 +36,7 @@ pub struct Config { pub committee_role: RoleId, pub committee_category: Vec, - // items pertaining to CompSoc only + // items pertaining to compsoc only pub compsoc_server: GuildId, } impl TypeMapKey for Config { diff --git a/src/main.rs b/src/main.rs index 8dff675..6a87f84 100644 --- a/src/main.rs +++ b/src/main.rs @@ -41,11 +41,13 @@ impl EventHandler for Handler { // handles previously linked accounts joining the server async fn guild_member_addition(&self, ctx: Context, new_member: Member) { - let db = { + let db_lock = { let data_read = ctx.data.read().await; data_read.get::().expect("Expected Config in TypeMap.").clone() }; + 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() @@ -107,12 +109,14 @@ Sign up on [UL Wolves]({}) and go to https://discord.com/channels/{}/{} and use // handles role updates async fn guild_member_update(&self, ctx: Context, _old_data: Option, new_data: Option, _: GuildMemberUpdateEvent) { // get config/db - let db = { + let db_lock = { let data_read = ctx.data.read().await; data_read.get::().expect("Expected Config in TypeMap.").clone() }; - // check if the role changed is part of the ones for this server + let db = db_lock.read().await; + + // check if the role changed is part of the oens for this server if let Some(x) = new_data { on_role_change(&db, &ctx, x).await; } @@ -154,13 +158,13 @@ Sign up on [UL Wolves]({}) and go to https://discord.com/channels/{}/{} and use } } - // CompSoc Server + // compsoc Server match config .compsoc_server .set_commands( &ctx.http, vec![ - // commands just for the CompSoc server + // commands just for the compsoc server commands::count::servers::register(), commands::server_icon::user::register(), ], @@ -177,7 +181,7 @@ Sign up on [UL Wolves]({}) and go to https://discord.com/channels/{}/{} and use async fn interaction_create(&self, ctx: Context, interaction: Interaction) { if let Interaction::Command(command) = interaction { let _ = command.defer_ephemeral(&ctx.http).await; - // println!("Received command interaction: {:#?}", command); + //println!("Received command interaction: {:#?}", command); let content = match command.data.name.as_str() { // user commands @@ -300,7 +304,7 @@ async fn main() { let mut data = client.data.write().await; data.insert::(Arc::new(RwLock::new(config))); - data.insert::(Arc::new(db)); + data.insert::(Arc::new(RwLock::new(db))); } // Finally, start a single shard, and start listening to events.