From d55e9cb850f686e9c880371d6ffe7974a761e555 Mon Sep 17 00:00:00 2001 From: Kevin Trocolli Date: Sun, 31 Mar 2024 23:35:02 -0400 Subject: [PATCH] allow notification toggle, notifications still don't work --- src/commands/notify.rs | 10 ++++++- src/db/user.rs | 64 ++++++++++++++++++++++++++++++++++++++++-- src/handlers.rs | 2 +- 3 files changed, 72 insertions(+), 4 deletions(-) diff --git a/src/commands/notify.rs b/src/commands/notify.rs index fa79899..c28e9ae 100644 --- a/src/commands/notify.rs +++ b/src/commands/notify.rs @@ -1,11 +1,19 @@ use super::{Error, Context}; +use crate::{config::CORE_CFG, db::user::set_notify}; #[poise::command(slash_command, prefix_command, dm_only)] pub async fn notify( ctx: Context<'_>, #[description = "Turn notifications on or off"] toggle: bool, ) -> Result<(), Error> { - let response = format!("Notifications are now {}", toggle); + let mut response = format!("Notifications are now {}", toggle); + + if CORE_CFG.get().unwrap().hash_ids { + response = "Notifications are disabled on this guild.".to_string(); + } else { + set_notify(&ctx.author().id.as_u64(), toggle); + } + ctx.say(response).await?; Ok(()) } \ No newline at end of file diff --git a/src/db/user.rs b/src/db/user.rs index 7e1fc36..97535f1 100644 --- a/src/db/user.rs +++ b/src/db/user.rs @@ -95,7 +95,7 @@ pub fn get_user_by_id(user_id: &u64) -> Option { } } -pub fn regen_fake_id(user_id: &u64, new_fake_id: i64, new_pic_idx: i32) { +pub fn set_fake_id(user_id: &u64, new_fake_id: i64, new_pic_idx: i32) { use crate::db::schema::user::dsl::*; let conn = connect(); if conn.is_none() { @@ -113,7 +113,67 @@ pub fn regen_fake_id(user_id: &u64, new_fake_id: i64, new_pic_idx: i32) { match sql { Err(e) => { - log(LogLevel::Error, "db", "regen_fake_id", format!("SQL Error: {:?}", e).as_str()); + log(LogLevel::Error, "db", "set_fake_id", format!("SQL Error: {:?}", e).as_str()); + return Err(e); + } + Ok(_) => { + return Ok(()); + } + } + }); +} + +pub fn get_user_by_fake_id(user_id: &u64) -> Option { + use crate::db::schema::user::dsl::*; + let conn = connect(); + if conn.is_none() { + return None + } + let mut conn = conn.unwrap(); + + let res = conn.transaction(|c| { + let sql = user.filter(fake_id.eq(*user_id as i64)) + .select(User::as_select()) + .load::(c); + + match sql { + Err(e) => { + log(LogLevel::Error, "db", "get_user_by_id", format!("SQL Error: {:?}", e).as_str()); + return Err(e); + } + Ok(usr) => { + if usr.len() > 0 { + return Ok(Some(usr[0].clone())) + } + return Ok(None) + } + } + }); + + match res { + Ok(u) => return u, + Err(_) => return None, + } +} + +pub fn set_notify(user_id: &u64, is_notify: bool) { + use crate::db::schema::user::dsl::*; + let conn = connect(); + if conn.is_none() { + return + } + let mut conn = conn.unwrap(); + let uid: String = get_hashed_uid(user_id); + + let _ = conn.transaction(|c| { + let sql = update(user) + .filter(discord_id.eq(uid)) + .set(should_notify.eq(is_notify)) + .execute(c); + + match sql { + Err(e) => { + log(LogLevel::Error, "db", "set_notify", format!("SQL Error: {:?}", e).as_str()); return Err(e); } Ok(_) => { diff --git a/src/handlers.rs b/src/handlers.rs index 714c0b3..742c9aa 100644 --- a/src/handlers.rs +++ b/src/handlers.rs @@ -41,7 +41,7 @@ pub async fn handle_msg(ctx: &serenity::Context, msg: &serenity::Message) -> Res let fid: i64 = rand::thread_rng().gen_range(10000000..=99999999); let idx = rand::thread_rng().gen_range(0..cfg.pictures.len()); log(LogLevel::Info, "event_handlers", "handle_msg", format!("Regenerate fake ID {}", fid).as_str()); - regen_fake_id(&msg.author.id.0, fid, idx as i32); + set_fake_id(&msg.author.id.0, fid, idx as i32); usr.fake_id = fid; }