feat: will update users when there are changes made to teh server config
This commit is contained in:
parent
432dd0e4a0
commit
66446e8df8
3 changed files with 161 additions and 118 deletions
|
@ -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
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue