feat: will update users when there are changes made to teh server config

This commit is contained in:
silver 2023-11-23 16:12:28 +00:00
parent 432dd0e4a0
commit 66446e8df8
3 changed files with 161 additions and 118 deletions

View file

@ -6,7 +6,7 @@ use serenity::{
prelude::{command::CommandOptionType, interaction::application_command::CommandDataOptionValue},
},
};
use skynet_discord_bot::{DataBase, Servers};
use skynet_discord_bot::{get_server_config, update_server, DataBase, Servers};
use sqlx::{Error, Pool, Sqlite};
pub async fn run(command: &ApplicationCommandInteraction, ctx: &Context) -> String {
@ -92,7 +92,7 @@ pub async fn run(command: &ApplicationCommandInteraction, ctx: &Context) -> Stri
member_current: 0,
};
match add_server(&db, &server_data).await {
match add_server(&db, ctx, &server_data).await {
Ok(_) => {}
Err(e) => {
println!("{:?}", e);
@ -130,11 +130,12 @@ pub fn register(command: &mut CreateApplicationCommand) -> &mut CreateApplicatio
})
}
async fn add_server(db: &Pool<Sqlite>, server: &Servers) -> Result<Option<Servers>, Error> {
async fn add_server(db: &Pool<Sqlite>, ctx: &Context, server: &Servers) -> Result<Option<Servers>, Error> {
let existing = get_server_config(db, &server.server).await;
let role_past = server.role_past.map(|x| *x.as_u64() as i64);
let role_current = server.role_current.map(|x| *x.as_u64() as i64);
sqlx::query_as::<_, Servers>(
let insert = sqlx::query_as::<_, Servers>(
"
INSERT OR REPLACE INTO servers (server, wolves_api, role_past, role_current)
VALUES (?1, ?2, ?3, ?4)
@ -145,5 +146,41 @@ async fn add_server(db: &Pool<Sqlite>, server: &Servers) -> Result<Option<Server
.bind(role_past)
.bind(role_current)
.fetch_optional(db)
.await
.await;
// 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) => {
let mut result = (false, false, None, false, None);
if x.wolves_api != server.wolves_api {
result.0 = true;
}
if x.role_current != server.role_current {
result.0 = true;
result.1 = true;
result.2 = x.role_current;
}
if x.role_past != server.role_past {
result.0 = true;
result.3 = true;
result.4 = x.role_past;
}
result
}
};
// update all users
if update {
let mut roles_remove = vec![];
if current_remove {
roles_remove.push(current_role)
}
if past_remove {
roles_remove.push(past_role)
}
update_server(db, ctx, server, &roles_remove).await;
}
insert
}