feat: tested out command and gt rid of the last few kinks
This commit is contained in:
parent
ffce78a10d
commit
32292a3c0b
3 changed files with 93 additions and 27 deletions
|
@ -61,19 +61,24 @@ pub mod edit {
|
|||
return "Please provide a valid role for ``Role Current``".to_string();
|
||||
};
|
||||
|
||||
let delete = if let CommandDataOptionValue::Boolean(delete) = command
|
||||
|
||||
let mut delete = false;
|
||||
|
||||
if let Some(x) = command
|
||||
.data
|
||||
.options
|
||||
.get(3)
|
||||
.expect("Expected true/false option")
|
||||
.resolved
|
||||
.as_ref()
|
||||
.expect("Expected true/False object")
|
||||
{
|
||||
delete.to_owned()
|
||||
} else {
|
||||
false
|
||||
};
|
||||
.get(3) {
|
||||
|
||||
let tmp = x.to_owned();
|
||||
if let Some(y) = tmp.resolved {
|
||||
match y {
|
||||
CommandDataOptionValue::Boolean(z) => {
|
||||
delete = z;
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
let db_lock = {
|
||||
let data_read = ctx.data.read().await;
|
||||
|
@ -169,4 +174,67 @@ pub mod edit {
|
|||
}
|
||||
|
||||
// TODO
|
||||
pub mod list {}
|
||||
pub mod list {}
|
||||
|
||||
|
||||
pub mod tools {
|
||||
use serenity::client::Context;
|
||||
use serenity::model::guild::Member;
|
||||
use sqlx::{Pool, Sqlite};
|
||||
use skynet_discord_bot::RoleAdder;
|
||||
|
||||
pub async fn on_role_change(db: &Pool<Sqlite>, ctx: &Context, mut new_data: Member){
|
||||
|
||||
|
||||
// check if the role changed is part of the oens for this server
|
||||
if let Some(role_adders) = sqlx::query_as::<_, RoleAdder>(
|
||||
r#"
|
||||
SELECT *
|
||||
FROM roles_adder
|
||||
WHERE server = ?
|
||||
"#,
|
||||
)
|
||||
.bind(*new_data.guild_id.as_u64() as i64)
|
||||
.fetch_all(db)
|
||||
.await
|
||||
.ok() {
|
||||
|
||||
|
||||
let mut roles_add = vec![];
|
||||
let mut roles_remove = vec![];
|
||||
|
||||
for role_adder in role_adders {
|
||||
// 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);
|
||||
}
|
||||
|
||||
// If the suer has C but not A or B remove C
|
||||
if new_data.roles.contains(&role_adder.role_c) &&
|
||||
(
|
||||
!new_data.roles.contains(&role_adder.role_a) || !new_data.roles.contains(&role_adder.role_b)
|
||||
) {
|
||||
roles_remove.push(role_adder.role_c);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
if !roles_add.is_empty(){
|
||||
if let Err(e) = new_data.add_roles(&ctx, &roles_add).await {
|
||||
println!("{:?}", e);
|
||||
}
|
||||
}
|
||||
|
||||
if !roles_remove.is_empty(){
|
||||
if let Err(e) = new_data.remove_roles(&ctx, &roles_remove).await{
|
||||
println!("{:?}", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue