From e86b051ff3b234217a69ec19ea6ef516f6a88b34 Mon Sep 17 00:00:00 2001
From: ModulatingForce <116608425+modulatingforce@users.noreply.github.com>
Date: Sat, 2 Mar 2024 12:21:18 -0500
Subject: [PATCH] (cont) cleanup

(cont)

(cont)

(cont)
---
 src/core/bot_actions.rs   |    4 +-
 src/core/botinstance.rs   |    4 +-
 src/core/botmodules.rs    |   35 +-
 src/core/identity.rs      | 1371 +++----------------------------------
 src/custom/experiments.rs |    2 +-
 src/main.rs               |    6 +-
 6 files changed, 124 insertions(+), 1298 deletions(-)

diff --git a/src/core/bot_actions.rs b/src/core/bot_actions.rs
index 9e56e07..2e6b456 100644
--- a/src/core/bot_actions.rs
+++ b/src/core/bot_actions.rs
@@ -4,13 +4,13 @@ pub mod actions_util {
     use std::future::Future;
     use std::pin::Pin;
     use std::sync::Arc;
-    
+
     use tokio::sync::{Mutex, RwLock};
 
     use twitch_irc::message::PrivmsgMessage;
 
     use crate::core::botinstance::BotInstance;
-    
+
     pub type BotAM = Arc<Mutex<BotInstance>>;
     pub type BotAR = Arc<RwLock<BotInstance>>;
 
diff --git a/src/core/botinstance.rs b/src/core/botinstance.rs
index 9bef035..e31077f 100644
--- a/src/core/botinstance.rs
+++ b/src/core/botinstance.rs
@@ -16,7 +16,7 @@ use casual_logger::Log;
 
 use crate::core::ratelimiter::RateLimiter;
 
-use crate::core::botmodules::bot_actions::actions_util::BotAR;
+use crate::core::bot_actions::actions_util::BotAR;
 use crate::core::botmodules::ModulesManager;
 use crate::core::identity::{ChangeResult, IdentityManager, Permissible};
 
@@ -142,7 +142,7 @@ impl BotInstance {
                     ServerMessage::Privmsg(msg) => {
                         botlog::debug(
                             format!(
-                                "[Twitch Chat] > {} @ #{}: {}",
+                                "[Twitch Chat > {}] > {}: {}",
                                 msg.channel_login, msg.sender.name, msg.message_text
                             )
                             .as_str(),
diff --git a/src/core/botmodules.rs b/src/core/botmodules.rs
index 85dc9c0..0bfe4fa 100644
--- a/src/core/botmodules.rs
+++ b/src/core/botmodules.rs
@@ -36,7 +36,7 @@ use crate::core::botinstance::{BotInstance, ChType};
 use crate::core::botlog;
 use crate::core::identity;
 
-pub use crate::core::bot_actions;
+use crate::core::bot_actions;
 pub use ChType::Channel;
 pub use ModType::BotModule;
 
@@ -168,23 +168,20 @@ botactions
 
 impl ModulesManager {
     pub async fn init() -> Arc<ModulesManager> {
-
         let mgr = ModulesManager {
             statusdb: Arc::new(RwLock::new(HashMap::new())),
             botactions: Arc::new(RwLock::new(HashMap::new())),
         };
 
         // :: [x] initialize core modules
-        botlog::debug(
+        botlog::trace(
             "ModulesManager > init() > Adding modules",
             Some("ModulesManager > init()".to_string()),
             None,
         );
 
-
-        
         let mgrarc = Arc::new(mgr);
-        
+
         // 1. load core modules
         crate::core::identity::init(Arc::clone(&mgrarc)).await;
 
@@ -223,7 +220,6 @@ impl ModulesManager {
     }
 
     pub async fn add_botaction(&self, in_module: ModType, in_action: BotAction) {
-
         botlog::trace(
             "Add botaction called",
             Some("ModulesManager > init()".to_string()),
@@ -247,11 +243,9 @@ impl ModulesManager {
         //       Check All Other BotAction Command Names & Aliases to ensure they don't conflict
 
         async fn find_conflict_module(mgr: &ModulesManager, act: &BotAction) -> Option<ModType> {
-
             if let BotAction::C(incmd) = act {
-
                 let actdb = mgr.botactions.read().await;
-                
+
                 for (module, moduleactions) in &(*actdb) {
                     for modact in moduleactions.iter() {
                         if let BotAction::C(dbcmd) = &modact {
@@ -262,13 +256,12 @@ impl ModulesManager {
                             if incmd.command.to_lowercase() == dbcmd.command.to_lowercase() {
                                 // Returning State - with the identified module
                                 return Some(module.clone()); // works
-                                
                             }
 
                             for a in &dbcmd.alias {
                                 if incmd.command.to_lowercase() == a.to_lowercase() {
                                     // Returning State - with the identified module
-                                    
+
                                     return Some(module.clone()); // works
                                 }
                             }
@@ -278,14 +271,14 @@ impl ModulesManager {
                             for inalias in &incmd.alias {
                                 if inalias.to_lowercase() == dbcmd.command.to_lowercase() {
                                     // Returning State - with the identified module
-                                    
+
                                     return Some(module.clone()); // works
                                 }
 
                                 for a in &dbcmd.alias {
                                     if inalias.to_lowercase() == a.to_lowercase() {
                                         // Returning State - with the identified module
-                                        
+
                                         return Some(module.clone()); // works
                                     }
                                 }
@@ -307,21 +300,21 @@ impl ModulesManager {
         }
 
         let mut dbt = self.statusdb.write().await;
-        let statusvector = dbt
-            .entry(in_module.clone())
-            .or_insert(Vec::new());
+        let statusvector = dbt.entry(in_module.clone()).or_insert(Vec::new());
 
         statusvector.push(ModStatusType::Enabled(StatusLvl::Instance)); // Pushes the Module as Enabled at Instance Level
 
         let mut a = self.botactions.write().await;
-        let modactions = a
-            .entry(in_module.clone())
-            .or_insert(Vec::new());
+        let modactions = a.entry(in_module.clone()).or_insert(Vec::new());
 
         modactions.push(in_action);
 
         botlog::trace(
-            format!("Modules Manager> add_botaction called - botactions size : {}", modactions.len()).as_str(),
+            format!(
+                "Modules Manager> add_botaction called - botactions size : {}",
+                modactions.len()
+            )
+            .as_str(),
             Some("ModulesManager > init()".to_string()),
             None,
         );
diff --git a/src/core/identity.rs b/src/core/identity.rs
index d967e53..877fb6c 100644
--- a/src/core/identity.rs
+++ b/src/core/identity.rs
@@ -1,48 +1,29 @@
-// use std::borrow::Borrow;
 use std::collections::HashMap;
-// use std::error::Error;
-
-use crate::core::botmodules::bot_actions::actions_util;
-// use crate::core::botmodules::{BotActionTrait, BotCommand, BotModule, Listener, ModulesManager};
-use crate::core::botmodules::{BotActionTrait, BotCommand, BotModule, ModulesManager};
-
-// use crate::core::botinstance::{self, botlog, BotInstance, ChType};
-use crate::core::botinstance::ChType;
-use crate::core::botlog;
-// use futures::lock::Mutex;
-// use twitch_irc::message::{Badge, PrivmsgMessage};
-use twitch_irc::message::PrivmsgMessage;
-
-// use crate::core::botmodules::ChType;
-
-// use crate::core::botinstance::ArcBox;
-
-// use std::cell::RefCell;
-// use std::rc::Rc;
-
 use std::sync::Arc;
+
 use tokio::sync::RwLock;
 
+use twitch_irc::message::PrivmsgMessage;
+
 use casual_logger::Log;
 
-use super::botmodules::bot_actions::actions_util::BotAR;
+use crate::core::bot_actions::actions_util::{self, BotAR};
+use crate::core::botinstance::ChType;
+use crate::core::botlog;
+use crate::core::botmodules::{BotActionTrait, BotCommand, BotModule, ModulesManager};
 
 fn adminvector() -> Vec<String> {
     vec![String::from("ModulatingForce")]
     //vec![]
 }
 
-// pub fn init(mgr:&mut ModulesManager)
 pub async fn init(mgr: Arc<ModulesManager>) {
-    // println!("Went into Identiy Module init");
     botlog::trace(
-        "Went into Identiy Module init",
+        "Went into Identity Module init",
         Some("identity.rs > init()".to_string()),
         None,
     );
 
-    // let a = actions_util::asyncbox(cmd_promote) ;
-
     let tempb = BotCommand {
         module: BotModule(String::from("identity")),
         command: String::from("promote"), // command call name
@@ -60,8 +41,6 @@ pub async fn init(mgr: Arc<ModulesManager>) {
     tempb.add_to_modmgr(Arc::clone(&mgr)).await;
 
     async fn cmd_promote(bot: BotAR, msg: PrivmsgMessage) {
-        //println!("(#{}) {}: {}", msg.channel_login, msg.sender.name, msg.message_text);
-        // println!("Called cmd promote");
         botlog::trace(
             "Called cmd promote",
             Some("identity.rs > cmd_prommote()".to_string()),
@@ -96,7 +75,7 @@ pub async fn init(mgr: Arc<ModulesManager>) {
 
         //  println!("{}",msg.message_text);
         botlog::trace(
-            &format!("Twich Message > {}", msg.message_text),
+            format!("Twich Message > {}", msg.message_text).as_str(),
             Some("identity.rs > cmd_promote()".to_string()),
             None,
         );
@@ -146,7 +125,6 @@ pub async fn init(mgr: Arc<ModulesManager>) {
         let rslt = match targetusr {
             Some(targetusr) => {
                 botlog::debug(
-                    // &format!("running promote()"),
                     "running promote()",
                     Some("identity.rs > cmd_promote()".to_string()),
                     None,
@@ -185,307 +163,29 @@ pub async fn init(mgr: Arc<ModulesManager>) {
 
         // [x] 3. Output resulting change
 
-        match rslt {
+        let outmsg = match rslt {
             ChangeResult::Success(a) => {
-                // println!("Succesfully promoted : {a} ;");
-                let outmsg = &format!("o7 Successfully promoted : {a}");
-                botlog::debug(
-                    outmsg,
-                    Some("identity.rs > cmd_prommote()".to_string()),
-                    Some(&msg),
-                );
-                // let outmsg = "o7 Successfully promoted : ".to_string();
-                botlock
-                    .botmgrs
-                    .chat
-                    .say_in_reply_to(&msg, outmsg.to_string())
-                    .await;
+                format!("o7 Successfully promoted : {a}")
             }
             ChangeResult::Failed(a) => {
-                // println!("Failed to promote : {a} ; ");
-                let outmsg = &format!("PoroSad failed to promote : {a}");
-                botlog::debug(
-                    outmsg,
-                    Some("identity.rs > cmd_prommote()".to_string()),
-                    Some(&msg),
-                );
-                // let outmsg = "PoroSad failed to promote : ".to_string();
-                botlock
-                    .botmgrs
-                    .chat
-                    .say_in_reply_to(&msg, outmsg.to_string())
-                    .await;
+                format!("PoroSad failed to promote : {a}")
             }
             ChangeResult::NoChange(a) => {
-                // println!("No Changes Made : {a} ; ");
-                let outmsg = &format!("uuh No Promotion Change : {a}");
-                botlog::debug(
-                    outmsg,
-                    Some("identity.rs > cmd_prommote()".to_string()),
-                    Some(&msg),
-                );
-                // let outmsg = "uuh No Promotion Change : ".to_string();
-                botlock
-                    .botmgrs
-                    .chat
-                    .say_in_reply_to(&msg, outmsg.to_string())
-                    .await;
+                format!("uuh No Promotion Change : {a}")
             }
-        }
+        };
 
-        /*
-        match arg1 {
-            Some(a1) if a1 == String::from("-admin") => {
-               // - [x] BotAdmins can promote admin to give BotAdmin UserRole
+        botlog::debug(
+            outmsg.as_str(),
+            Some("identity.rs > cmd_prommote()".to_string()),
+            Some(&msg),
+        );
 
-               let botlock = bot.read().await;
-               let idlock = botlock.get_identity();
-               let id = idlock.read().await;
-               // let ta = ta.getspecialuserroles(String::from("Hello"), Some(ChType::Channel(msg.channel_login.to_lowercase())));
-               // let ta = ta.getspecialuserroles(arg2.unwrap().to_string(), Some(ChType::Channel(msg.channel_login.to_lowercase())));
-               let rolesfut = id.getspecialuserroles(
-                   msg.sender.name.to_lowercase(),
-                   Some(ChType::Channel(msg.channel_login.to_lowercase())));
-               let usrroles = rolesfut.await;
-               // let ta = ta.unwrap();
-               // let a = ta.read().await;
-               // let ta = *ta;
-               // let ta = *ta;
-               // if let Some(a) = *ta {
-
-                   if usrroles.contains(&UserRole::BotAdmin) {
-                       // println!("BotAdmin allowed to promote admin");
-                       botinstance::botlog::debug("BotAdmin allowed to promote admin",
-                   Some("identity.rs > cmd_prommote()".to_string()), Some(&msg));
-
-                       {
-
-                           let idlock = Arc::clone(&bot.read().await.get_identity());
-                           // let idlock = idlock.write().await;
-                           let idlock = idlock.read().await;
-                           // let mut idlock = *idlock;
-                           // let ta = idlock.promote(msg.sender.name.to_lowercase(), None, Some(UserRole::BotAdmin)).await;
-                           let ta = idlock.promote(arg2.unwrap().to_string().to_lowercase(), None, Some(UserRole::BotAdmin)).await;
-
-                           match ta {
-                               ChangeResult::Success(a) => {
-                                   // println!("Succesfully promoted : {a} ;");
-                                   let outmsg = &format!("o7 Successfully promoted : {a}");
-                                   botinstance::botlog::debug(outmsg,
-                               Some("identity.rs > cmd_prommote()".to_string()), Some(&msg));
-                                   // let outmsg = "o7 Successfully promoted : ".to_string();
-                                   botlock.botmgrs.chat.say_in_reply_to(&msg, outmsg.to_string()).await;
-                               },
-                               ChangeResult::Failed(a) => {
-                                   // println!("Failed to promote : {a} ; ");
-                                   let outmsg = &format!("PoroSad failed to promote : {a}");
-                                   botinstance::botlog::debug(outmsg,
-                           Some("identity.rs > cmd_prommote()".to_string()), Some(&msg));
-                                   // let outmsg = "PoroSad failed to promote : ".to_string();
-                                   botlock.botmgrs.chat.say_in_reply_to(&msg, outmsg.to_string()).await;
-                               },
-                               ChangeResult::NoChange(a) => {
-                                   // println!("No Changes Made : {a} ; ");
-                                   let outmsg = &format!("uuh No Promotion Change : {a}");
-                                   botinstance::botlog::debug(outmsg,
-                           Some("identity.rs > cmd_prommote()".to_string()), Some(&msg));
-                                   // let outmsg = "uuh No Promotion Change : ".to_string();
-                                   botlock.botmgrs.chat.say_in_reply_to(&msg, outmsg.to_string()).await;
-                               },
-
-                           }
-                       }
-                   } // if usrroles.contains(&UserRole::BotAdmin)
-               }
-
-           //  },
-           Some(arg1) => {
-               // In the case of promoting another chatter
-               // Check caller's roles
-               // Check targer chatter's roles
-                   // - Also check if target chatter alread has target roles
-               // if caller's role is Broadcaster, SupMod, BotAdmin , they can Promote target Chatters to become Mod (i.e., the target user is not a Mod,SupMod,BotAdmin)
-               // if caller is BotAdmin, they can promote BotAdmins to Mod
-               // if caller's role is Broadcaster, BotAdmin, they can Promote target Mod to SupMod
-               botinstance::botlog::debug(&format!("Evaluating arg1: {arg1}"),
-               Some("identity.rs > cmd_prommote()".to_string()), Some(&msg));
-               Log::flush();
-
-               let idlock = Arc::clone(&bot.read().await.get_identity());
-               let idlock = idlock.read().await;
-               // let ta = idlock.promote(msg.sender.name.to_lowercase(), None, Some(UserRole::BotAdmin)).await;
-
-               let senderroles = idlock.getspecialuserroles(
-                   msg.sender.name.to_lowercase(),
-                   Some(ChType::Channel(msg.channel_login.to_lowercase()))).await;
-
-               let trgusrroles = idlock.getspecialuserroles(
-                       arg1.to_lowercase(),
-                       Some(ChType::Channel(msg.channel_login.to_lowercase()))).await;
-
-                   botinstance::botlog::debug(&format!("Ready to evaluate sender and targer user roles"),
-                   Some("identity.rs > cmd_prommote()".to_string()), Some(&msg));
-                   Log::flush();
-
-                   botinstance::botlog::trace(&format!("Related Vars : sender roles : {:?} ; targer usr roles : {:?}" ,
-                                               senderroles,trgusrroles),
-                   Some("identity.rs > cmd_prommote()".to_string()), Some(&msg));
-                   Log::flush();
-
-               if ( senderroles.contains(&UserRole::Broadcaster) ||
-                   senderroles.contains(&UserRole::SupMod(ChType::Channel(msg.channel_login.to_lowercase()))) ||
-                   senderroles.contains(&UserRole::BotAdmin) ) &&
-                   ( !trgusrroles.contains(&UserRole::Broadcaster) &&
-                       // !trgusrroles.contains(&UserRole::BotAdmin) && // target users that are BotAdmins can promote themselves to Mod or SupMod
-                       !trgusrroles.contains(&UserRole::SupMod(ChType::Channel(msg.channel_login.to_lowercase()))) &&
-                       !trgusrroles.contains(&UserRole::Mod(ChType::Channel(msg.channel_login.to_lowercase())))
-                   )
-               {
-                   // if caller's role is Broadcaster, SupMod, BotAdmin , they can Promote target Chatters to become Mod (i.e., the target user is not a Mod,SupMod,BotAdmin)
-                   botinstance::botlog::trace(&format!("Attempting promote..."),
-                   Some("identity.rs > cmd_prommote()".to_string()), Some(&msg));
-                   Log::flush();
-                   let ta = idlock.promote(arg1.to_string().to_lowercase(),
-                    Some(ChType::Channel(msg.channel_login.to_lowercase())),
-                     Some(UserRole::Mod(ChType::Channel(msg.channel_login.to_lowercase())))).await;
-
-                   match ta {
-                       ChangeResult::Success(a) => {
-                           // println!("Succesfully promoted : {a} ;");
-                           let outmsg = &format!("Successful Promotion : {a}");
-                           botinstance::botlog::debug(&format!("Successful Promotion : {a}"),
-                   Some("identity.rs > cmd_prommote()".to_string()), Some(&msg));
-                       Log::flush();
-                           // let outmsg = "o7 Successfully promoted : ".to_string();
-                           bot.read().await.botmgrs.chat.say_in_reply_to(&msg, outmsg.to_string()).await;
-                       },
-                       ChangeResult::Failed(a) => {
-                           // println!("Failed to promote : {a} ; ");
-                           let outmsg = &format!("PoroSad failed to promote : {a}");
-                           botinstance::botlog::debug(outmsg,
-                   Some("identity.rs > cmd_prommote()".to_string()), Some(&msg));
-                           // Log::flush();
-                           // let outmsg = "PoroSad failed to promote : ".to_string();
-                           bot.read().await.botmgrs.chat.say_in_reply_to(&msg, outmsg.to_string()).await;
-                       },
-                       ChangeResult::NoChange(a) => {
-                           // println!("No Changes Made : {a} ; ");
-                           let outmsg = &format!("uuh Not making any changes : {a}");
-                           botinstance::botlog::debug(outmsg,
-                   Some("identity.rs > cmd_prommote()".to_string()), Some(&msg));
-                           Log::flush();
-                           // let outmsg = "uuh No Promotion Change : ".to_string();
-                           bot.read().await.botmgrs.chat.say_in_reply_to(&msg, outmsg.to_string()).await;
-                       },
-
-                   }
-
-               } else if trgusrroles.contains(&UserRole::Mod(ChType::Channel(msg.channel_login.to_lowercase()))) &&
-               ( senderroles.contains(&UserRole::Broadcaster) ||
-                   senderroles.contains(&UserRole::BotAdmin) )
-               {
-                   botinstance::botlog::trace(&format!("Attempting promote..."),
-                   Some("identity.rs > cmd_prommote()".to_string()), Some(&msg));
-                   Log::flush();
-
-                   // broadcaster & botadmins can make mods into SupMod
-                   let ta = idlock.promote(arg1.to_string().to_lowercase(),
-                    Some(ChType::Channel(msg.channel_login.to_lowercase())),
-                    Some(UserRole::SupMod(ChType::Channel(msg.channel_login.to_lowercase())))).await;
-
-                   match ta {
-                       ChangeResult::Success(a) => {
-                           // println!("Succesfully promoted : {a} ;");
-                           let outmsg = &format!("Successful Promotion : {a}");
-                           botinstance::botlog::debug(&format!("Successful Promotion : {a}"),
-                   Some("identity.rs > cmd_prommote()".to_string()), Some(&msg));
-                       Log::flush();
-                           // let outmsg = "o7 Successfully promoted : ".to_string();
-                           bot.read().await.botmgrs.chat.say_in_reply_to(&msg, outmsg.to_string()).await;
-                       },
-                       ChangeResult::Failed(a) => {
-                           // println!("Failed to promote : {a} ; ");
-                           let outmsg = &format!("PoroSad failed to promote : {a}");
-                           botinstance::botlog::debug(outmsg,
-                   Some("identity.rs > cmd_prommote()".to_string()), Some(&msg));
-                           // Log::flush();
-                           // let outmsg = "PoroSad failed to promote : ".to_string();
-                           bot.read().await.botmgrs.chat.say_in_reply_to(&msg, outmsg.to_string()).await;
-                       },
-                       ChangeResult::NoChange(a) => {
-                           // println!("No Changes Made : {a} ; ");
-                           let outmsg = &format!("uuh No Change in Promotion : {a}");
-                           botinstance::botlog::debug(outmsg,
-                   Some("identity.rs > cmd_prommote()".to_string()), Some(&msg));
-                           Log::flush();
-                           // let outmsg = "uuh No Promotion Change : ".to_string();
-                           bot.read().await.botmgrs.chat.say_in_reply_to(&msg, outmsg.to_string()).await;
-                       },
-
-                   }
-
-               } else if trgusrroles.contains(&UserRole::Broadcaster) // This should always be NoChange
-               {
-                   botinstance::botlog::trace(&format!("Attempting promote..."),
-                   Some("identity.rs > cmd_prommote()".to_string()), Some(&msg));
-                   Log::flush();
-
-                   // broadcaster & botadmins can make mods into superadmins
-                   let ta = idlock.promote(arg1.to_string().to_lowercase(),
-                    Some(ChType::Channel(msg.channel_login.to_lowercase())),
-                    Some(UserRole::Mod(ChType::Channel(msg.channel_login.to_lowercase())))).await;
-
-                   match ta {
-                       ChangeResult::Success(a) => {
-                           // println!("Succesfully promoted : {a} ;");
-                           let outmsg = &format!("Successful Promotion : {a}");
-                           botinstance::botlog::debug(&format!("Successful Promotion : {a}"),
-                   Some("identity.rs > cmd_prommote()".to_string()), Some(&msg));
-                       Log::flush();
-                           // let outmsg = "o7 Successfully promoted : ".to_string();
-                           bot.read().await.botmgrs.chat.say_in_reply_to(&msg, outmsg.to_string()).await;
-                       },
-                       ChangeResult::Failed(a) => {
-                           // println!("Failed to promote : {a} ; ");
-                           let outmsg = &format!("PoroSad failed to promote : {a}");
-                           botinstance::botlog::debug(outmsg,
-                   Some("identity.rs > cmd_prommote()".to_string()), Some(&msg));
-                           // Log::flush();
-                           // let outmsg = "PoroSad failed to promote : ".to_string();
-                           bot.read().await.botmgrs.chat.say_in_reply_to(&msg, outmsg.to_string()).await;
-                       },
-                       ChangeResult::NoChange(a) => {
-                           // println!("No Changes Made : {a} ; ");
-                           let outmsg = &format!("uuh No Change in Promotion : {a}");
-                           botinstance::botlog::debug(outmsg,
-                   Some("identity.rs > cmd_prommote()".to_string()), Some(&msg));
-                           Log::flush();
-                           // let outmsg = "uuh No Promotion Change : ".to_string();
-                           bot.read().await.botmgrs.chat.say_in_reply_to(&msg, outmsg.to_string()).await;
-                       },
-
-                   }
-               }
-
-               else {
-                   let s = botlog::fatal("Reached unreachable else",
-                   Some("identity > cmd_promote()".to_string()), Some(&msg));
-                   panic!("{}",s);
-               };
-
-               Log::flush();
-
-           }
-            _ => (),
-        }
-
-
-
-        let arg2 = argv.next();
-
-        let targetchnl = arg2;
-
-        */
+        botlock
+            .botmgrs
+            .chat
+            .say_in_reply_to(&msg, outmsg.to_string())
+            .await;
 
         botlog::trace(
             // &format!("End of cmd_promote()"),
@@ -495,20 +195,6 @@ pub async fn init(mgr: Arc<ModulesManager>) {
         );
     }
 
-    // BotCommand {
-    //     module : BotModule(String::from("identity")),
-    //     command : String::from("demote"), // command call name
-    //     alias : vec![], // String of alternative names
-    //     exec_body : actions_util::asyncbox(cmd_demote) ,
-    //     help : String::from("demote"),
-    //     required_roles : vec![
-    //         UserRole::Mod(ChType::Channel(String::new())),
-    //         UserRole::SupMod(ChType::Channel(String::new())),
-    //         UserRole::Broadcaster,
-    //         UserRole::BotAdmin,
-    //         ],
-    // }.add_to_modmgr(Arc::clone(&mgr));
-
     let tempb = BotCommand {
         module: BotModule(String::from("identity")),
         command: String::from("demote"), // command call name
@@ -525,9 +211,7 @@ pub async fn init(mgr: Arc<ModulesManager>) {
 
     tempb.add_to_modmgr(Arc::clone(&mgr)).await;
 
-    // async fn cmd_demote(mut _chat:Arc<Mutex<BotInstance>>,_msg:PrivmsgMessage) {
     async fn cmd_demote(bot: BotAR, msg: PrivmsgMessage) {
-        // println!("Called cmd demote");
         botlog::debug(
             "Called cmd demote",
             Some("identity.rs > cmd_demote()".to_string()),
@@ -561,18 +245,8 @@ pub async fn init(mgr: Arc<ModulesManager>) {
 
          */
 
-        // [ ] #TODO : Need to define the body that calls demote()
-
         // [x] Unwraps arguments from message
 
-        // let mut argv = msg.message_text.split(" ");
-
-        // argv.next(); // Skip the command name
-
-        // let arg1 = argv.next();
-
-        // let arg2 = argv.next();
-
         let (arg1, _arg2) = {
             let mut argv = msg.message_text.split(' ');
 
@@ -585,47 +259,26 @@ pub async fn init(mgr: Arc<ModulesManager>) {
             (arg1, arg2)
         };
 
-        /*
-        let mut sender_badge:Option<ChatBadge> = None;
-
-        for b in &msg.badges {
-            if b.name == "moderator" {
-                sender_badge = Some(ChatBadge::Mod);
-            } else if b.name == "broadcaster" {
-                sender_badge = Some(ChatBadge::Broadcaster);
-            }
-        }
-        */
-
         // ---
 
         /*
-           => 2024.02.15 - The business logic seems embeded straight into demote() with the following in mind :
-               - demote() atm doesn't take sender ChatBadge <-- the assumption is canuserrun() was done
-                   for this user, and automatically assigned any roles that should get auto assigned
-               - demote() returns a ChangeResult
+        -   [x] 1. Parse out the following
+                - Sender (e.g., Name & Badge)
+                - Target User (arg1)
+                - Target Channel (current channel)
+                - Msg or Msg.Message_Text (for later)
 
-               - [ ] So I think all I need to do here is parse out and pass input args to demote(), and output quirky messages based on ChangeResult
-
-               -   [x] 1. Parse out the following
-                       - Sender (e.g., Name & Badge)
-                       - Target User (arg1)
-                       - Target Channel (current channel)
-                       - Msg or Msg.Message_Text (for later)
-
-               - [x] 2. Run Demote()
-                   - within demote(), getspecialuserroles() is called on both the sender and the target
-                       - getspecialuserroles() only sends current db , while canuserrun() may change db depending on the most current state of the sender
-                       - getspecialuserroles also borrows the sender's badge to evaluate
-
-               - [ ] 3. Take ChangeResult and output response
+        -   [x] 2. Run Demote()
+            - within demote(), getspecialuserroles() is called on both the sender and the target
+                - getspecialuserroles() only sends current db , while canuserrun() may change db depending on the most current state of the sender
+                - getspecialuserroles also borrows the sender's badge to evaluate
 
+        -   [x] 3. Take ChangeResult and output response
 
         */
 
         /*
 
-
         -   [x] 1. Parse out the following
                 - Sender (e.g., Name & Badge)
                 - Target User (arg1)
@@ -707,92 +360,29 @@ pub async fn init(mgr: Arc<ModulesManager>) {
 
          */
 
-        // let senderUserRole = {
-
-        //     // note : getspecialuserroles will cover :
-        //     //      - Internal roles stored at db for Mod & SupMod & BotAdmin
-        //     //      - Broadcaster (based on target hchatter & channel)
-        //     //  It MAY NOT COVER sutations where Sender has a Mod Badge, but not in DB yet as Mod
-        //     //   - So ideally this covers that (at least returns that they're a mod and go ahead and run for now)
-        //     //     - [ ] #TODO : This should also go ahead and add that mod to DB if possible as channel mod
-
-        //     // let evalroles = vec![];
-
-        //     let evalroles = match sender_badge {
-
-        //         Some(ChatBadge::Mod) => {
-
-        //             let mut rslroles = idlock.getspecialuserroles(
-        //                 sendername.clone(),
-        //                 Some(ChType::Channel(targetchnl.clone()))).await;
-
-        //             rslroles.push(UserRole::Mod(ChType::Channel(targetchnl)));
-
-        //             rslroles
-        //         },
-        //         _ => {
-        //             idlock.getspecialuserroles(
-        //                 sendername,
-        //                 Some(ChType::Channel(targetchnl.clone()))).await
-        //         }
-        //     };
-
-        //     // => 02.16 - I think better would just migrate over the logic within demote
-        //     //          - If there's business reqs to evaluate , better to keep the ChangeResult
-        //     //           consistent and also pass ChatBadge
-
-        // }; // senderUserRole
-
-        match rslt {
+        let outmsg = match rslt {
             ChangeResult::Success(a) => {
-                // println!("Succesfully promoted : {a} ;");
-                let outmsg = &format!("o7 Successfully demoted : {a}");
-                botlog::debug(
-                    outmsg,
-                    Some("identity.rs > cmd_demote()".to_string()),
-                    Some(&msg),
-                );
-                // let outmsg = "o7 Successfully promoted : ".to_string();
-                botlock
-                    .botmgrs
-                    .chat
-                    .say_in_reply_to(&msg, outmsg.to_string())
-                    .await;
+                format!("o7 Successfully demoted : {a}")
             }
             ChangeResult::Failed(a) => {
-                // println!("Failed to promote : {a} ; ");
-                let outmsg = &format!("PoroSad failed to demote : {a}");
-                botlog::debug(
-                    outmsg,
-                    Some("identity.rs > cmd_demote()".to_string()),
-                    Some(&msg),
-                );
-                // let outmsg = "PoroSad failed to promote : ".to_string();
-                botlock
-                    .botmgrs
-                    .chat
-                    .say_in_reply_to(&msg, outmsg.to_string())
-                    .await;
+                format!("PoroSad failed to demote : {a}")
             }
             ChangeResult::NoChange(a) => {
-                // println!("No Changes Made : {a} ; ");
-                let outmsg = &format!("uuh No Demotion Change : {a}");
-                botlog::debug(
-                    outmsg,
-                    Some("identity.rs > cmd_demote()".to_string()),
-                    Some(&msg),
-                );
-                // let outmsg = "uuh No Promotion Change : ".to_string();
-                botlock
-                    .botmgrs
-                    .chat
-                    .say_in_reply_to(&msg, outmsg.to_string())
-                    .await;
+                format!("uuh No Demotion Change : {a}")
             }
-        }
+        };
 
-        // println!("tester");
-        // println!("tester2");
+        botlog::debug(
+            outmsg.as_str(),
+            Some("identity.rs > cmd_demote()".to_string()),
+            Some(&msg),
+        );
+
+        botlock
+            .botmgrs
+            .chat
+            .say_in_reply_to(&msg, outmsg.to_string())
+            .await;
     }
 
     let tempcomm = BotCommand {
@@ -811,9 +401,7 @@ pub async fn init(mgr: Arc<ModulesManager>) {
 
     tempcomm.add_to_modmgr(Arc::clone(&mgr)).await;
 
-    // async fn getroles(bot:Arc<Mutex<BotInstance>>,msg:PrivmsgMessage) {
     async fn getroles(bot: BotAR, msg: PrivmsgMessage) {
-        // println!("Called cmd getroles");
         botlog::debug(
             "Called cmd getroles",
             Some("identity.rs > cmd_getroles()".to_string()),
@@ -828,100 +416,29 @@ pub async fn init(mgr: Arc<ModulesManager>) {
 
          */
 
-        // IN other code areas , I see this
-        // ServerMessage::Privmsg(msg) => {
-        //     println!("(#{}) {}: {}", msg.channel_login, msg.sender.name, msg.message_text);
-
-        // println!("{}",msg.message_text);
         let mut argv = msg.message_text.split(' ');
 
-        // for v in argv {
-        //     println!("args : {v}");
-        // }
-
         argv.next(); // Skip the command name
 
         let arg1 = argv.next();
 
-        // if arg == None {
-        //     return ; // Do nothing if no arguments
-        // }
-
         let targetuser = match arg1 {
             None => return, // exit if no arguments
             Some(arg) => arg,
         };
 
-        // match String::from(arg1) {
-        //     a if a == String::from("admin") => (),
-        //     _ => (),
-        // }
-
-        // match argv[1] {
-        //     String::from("admin") => (),
-
-        // }
-
         let arg2 = argv.next();
 
         let targetchnl = arg2;
 
-        // // let a = bot.read().ok().unwrap().get_identity();
-        // let a = bot.lock().await;
-        // // let a = a.lock().await;
-        // // let a = a.get_identity().await;
-        // let a = a.botmgrs;
-        // // let a = *(*a).lock().await;
-        // let a = *a.lock().await;
-        // let a = a.identity;
-        // let a = *a.lock().await;
-
-        // let a = bot.clone();
-        // let a = a.into_inner();
-        // let a = a.botmgrs;
-        // let a = a.into_inner();
-        // let a = a.identity;
-        // let a = a.into_inner();
-        // let a = bot.clone();
-        // let a = a.lock().await;
-        // let a = a.get_identity();
-        // let a = a.lock().await;
-        // let a = bot.get_identity();
         let botlock = bot.read().await;
-        // println!("botlock read");
-        botlog::trace(
-            "botlock read",
-            Some("identity.rs > init > getroles()".to_string()),
-            Some(&msg),
-        );
-        let idlock = botlock.get_identity();
-        // println!("got identity");
-        botlog::trace(
-            "got identity",
-            Some("identity.rs > init > getroles()".to_string()),
-            Some(&msg),
-        );
-        let idlock = idlock.read().await; // <-- 02.12 - Latest where it gest stuck - before or at this point
-                                          // println!("id lock");
-        botlog::trace(
-            "id lock",
-            Some("identity.rs > init > getroles()".to_string()),
-            Some(&msg),
-        );
+
+        let id = botlock.get_identity();
+
+        let idlock = id.read().await;
+
         let sproles = match targetchnl {
             None => {
-                // let bot = Rc::clone(&bot);
-                //let bot = Arc::clone(&bot);
-                // let a = bot.botmgrs.identity.getspecialuserroles(String::from(targetuser),None);
-                // let a = Arc::try_unwrap(bot).ok().unwrap().into_inner().ok().unwrap();
-                // let a = Arc::try_unwrap(bot.clone()).ok().unwrap().into_inner();
-                // let a = a.botmgrs.identity.getspecialuserroles(String::from(targetuser),None);
-                // let a = a.ok().getspecialuserroles(String::from(targetuser),None);
-                // let a = bot.read().ok().unwrap().rIdentity().getspecialuserroles(String::from(targetuser),None);
-                // println!("Retrieved User Roles >> {:?}",a);
-                // let a = idlock.read().await;
-                // idlock.getspecialuserroles(String::from(targetuser),None).await
-
                 // [ ] If targetchnl is not provided, default to pulling the current channel
                 idlock
                     .getspecialuserroles(
@@ -931,51 +448,14 @@ pub async fn init(mgr: Arc<ModulesManager>) {
                     .await
             }
             Some(targetchnl) => {
-                // let bot = Rc::clone(&bot);
-                // let bot = Arc::clone(&bot);
-                // let a = bot.botmgrs.identity.getspecialuserroles(String::from(targetuser), Some(ChType::Channel(String::from(targetchnl))));
-                // Arc::try_unwrap(boxed_bot.clone()).ok().unwrap().into_inner()
-                // let a = Arc::try_unwrap(bot).ok().unwrap().into_inner().ok().unwrap();
-                // let a = Arc::try_unwrap(bot.clone()).ok().unwrap().into_inner();
-                // let a = a.botmgrs.identity.getspecialuserroles(String::from(targetuser), Some(ChType::Channel(String::from(targetchnl))));
-                // let a = bot.read().ok().unwrap().rIdentity().getspecialuserroles(String::from(targetuser),None);
-                // println!("Retrieved User Roles >> {:?}",a);
-                // bot.read().ok().unwrap().rIdentity().getspecialuserroles(String::from(targetuser),None)
-                // let a = a.read().await;
-
-                // [ ] If caller is not a BotAdmin, they can only pull those related to the current channel for the target user
-                // [ ] If caller is a BotAdmin, allow & return for target channel
-                // let mut sender_badge:Option<ChatBadge> = None;
-
-                // for b in &msg.badges {
-                //     if b.name == "moderator" {
-                //         sender_badge = Some(ChatBadge::Mod);
-                //     } else if b.name == "broadcaster" {
-                //         sender_badge = Some(ChatBadge::Broadcaster);
-                //     }
-                // }
-
-                // match sender_badge {
-                //     Some(ChatBadge::Mod) => {
-
-                //     } ,
-                //     Some(ChatBadge::Broadcaster) => {
-
-                //     }
-                //     _ => {
-
-                //     }
-                // }
-
-                // [x]gets special roles for caller
+                // [x] gets special roles for caller
                 let callersproles = idlock
                     .getspecialuserroles(
                         msg.sender.name.to_lowercase(),
                         Some(ChType::Channel(targetchnl.to_lowercase().to_string())),
                     )
                     .await;
-                // idlock.getspecialuserroles(String::from(targetuser),Some(ChType::Channel(targetchnl.to_lowercase().to_string()))).await
-                // let a = callersproles.contains(&UserRole::Mod(ChType::Channel(targetchnl.to_lowercase().to_string())));
+
                 if callersproles.contains(&UserRole::Mod(ChType::Channel(
                     targetchnl.to_lowercase().to_string(),
                 ))) || callersproles.contains(&UserRole::SupMod(ChType::Channel(
@@ -988,7 +468,6 @@ pub async fn init(mgr: Arc<ModulesManager>) {
                             Some(ChType::Channel(targetchnl.to_lowercase())),
                         )
                         .await
-                    // callersproles
                 } else {
                     // Otherwise, don't get the target channel, return the current channel instead
                     idlock
@@ -1001,43 +480,34 @@ pub async fn init(mgr: Arc<ModulesManager>) {
             }
         };
 
-        // let sproles = idlock.getspecialuserroles(String::from(targetuser),).await;
-
-        // println!("Retrieved User Roles >> {:?}",sproles);
         botlog::debug(
             &format!("User roles of Target Chatter >> {:?}", sproles),
             Some("identity.rs > init > getroles()".to_string()),
             Some(&msg),
         );
 
-        // # I believe at this stage I still have botlock active
-
-        botlog::debug(
+        botlog::trace(
             // &format!("Evaluating special roles"),
             "Evaluating special roles",
             Some("identity.rs > init > getroles()".to_string()),
             Some(&msg),
         );
 
-        // let mut outmsg = String::new();
-
-        //let sproles = sproles;
-        // let arg2 = arg2.unwrap();
-
         let outmsg = if ((targetuser.to_lowercase() == msg.channel_login.to_lowercase())
             && arg2.is_none())
             || (arg2.is_some() && arg2.unwrap() == targetuser.to_lowercase())
         {
             // First evaluates if they're broadcaster
-            // let mut outmsg = format!("FeelsWowMan they're the broadcaster. ");
+
             let mut outmsg = "FeelsWowMan they're the broadcaster. ".to_string();
+
             if sproles.contains(&UserRole::Mod(ChType::Channel(
                 msg.channel_login.to_lowercase(),
             ))) || sproles.contains(&UserRole::SupMod(ChType::Channel(
                 msg.channel_login.to_lowercase(),
             ))) || sproles.contains(&UserRole::BotAdmin)
             {
-                outmsg = outmsg + &format!("Target chatter's user roles are : {:?}", sproles);
+                outmsg += format!("Target chatter's user roles are : {:?}", sproles).as_str();
             }
             outmsg
         } else if sproles.contains(&UserRole::Mod(ChType::Channel(
@@ -1048,61 +518,20 @@ pub async fn init(mgr: Arc<ModulesManager>) {
         {
             format!("Target chatter's user roles are : {:?}", sproles)
         } else {
-            // format!("Target chatter has no special roles LULE ")
             "Target chatter has no special roles LULE ".to_string()
         };
 
-        // if sproles.contains(&UserRole::Mod(msg.channel_login.to_lowercase())) {
-
-        // } else if sproles.contains(&UserRole::Mod(msg.channel_login.to_lowercase())) {
-
-        // }
-
-        // let outmsg = match sproles
-        // {
-
-        //     // let mut outmsg = String::new();
-        //     Some(sproles) => {
-
-        //         let sproles = sproles.read().await;
-
-        //         format!("Target chatter's user roles are : {:?}",sproles)
-
-        //     }
-        //     None => {
-        //         // # NOTE : Broadcaster could be included in this
-
-        //         // # below is checking if the provided text includes the username
-        //         // let msg = msg.message_text.to_lowercase().contains(&msg.channel_login.to_lowercase());
-        //         botinstance::botlog::debug(&format!("Evaluating special roles > channel login : {} ; message text : {} ; ",&msg.channel_login,&msg.message_text),
-        //         Some("identity.rs > init > getroles()".to_string()), Some(&msg));
-        //         botinstance::botlog::debug(&format!("Evaluating special roles > bool evaluation : {} ",
-        //                                                     msg.message_text.to_lowercase().contains(&msg.channel_login.to_lowercase())),
-        //         Some("identity.rs > init > getroles()".to_string()), Some(&msg));
-
-        //         if msg.message_text.to_lowercase().contains(&msg.channel_login.to_lowercase()) {
-        //             format!("FeelsWowMan they're the broadcaster ")
-        //         } else {
-        //             format!("Target chatter has no special roles LULE ")
-        //         }
-
-        //     }
-
-        // };
-        // let a = bot.identity.getuserroles(String::from("ModulatingForce"), Some(ChType::Channel(String::from("ModulatingForcebot"))));
-        // println!("{:?}",a);
-
         botlog::debug(
-            &format!("Chat Say Reply message : {:?}", outmsg),
+            format!("Chat Say Reply message : {}", outmsg).as_str(),
             Some("identity.rs > init > getroles()".to_string()),
             Some(&msg),
         );
+
         botlock.botmgrs.chat.say_in_reply_to(&msg, outmsg).await;
 
         // [ ] NOTE : After the above, I should receive only the roles in the context of the current channel I received this ideally and maybe BotAdmin ; not outside
     }
 
-    // println!("End of Init MOdule add");
     botlog::trace(
         "End of Init MOdule add",
         Some("identity.rs > init ".to_string()),
@@ -1112,11 +541,6 @@ pub async fn init(mgr: Arc<ModulesManager>) {
     Log::flush();
 }
 
-// #[derive(Debug, PartialEq, Eq, Hash, Clone)]
-// pub enum ChType {
-//     Channel(String),
-// }
-
 #[derive(Debug, PartialEq, Eq, Clone)]
 pub enum UserRole {
     Chatter,
@@ -1135,28 +559,13 @@ type UserRolesDB = HashMap<String, Arc<RwLock<Vec<UserRole>>>>;
 
 #[derive(Clone)]
 pub struct IdentityManager {
-    // special_roles_users : HashMap<String,Vec<UserRole>>, // # <-- (!) This must be String instead of ChType because we're checking a User not a Channel
-    // special_roles_users : Arc<Mutex<HashMap<String,Vec<UserRole>>>>, // # <-- (!) This must be String instead of ChType because we're checking a User not a Channel
-    // special_roles_users : Arc<RwLock<HashMap<String,Vec<UserRole>>>>,
-    // special_roles_users: Arc<RwLock<HashMap<String, Arc<RwLock<Vec<UserRole>>>>>>,
     special_roles_users: Arc<RwLock<UserRolesDB>>,
-    // parent_mgr : Box<crate::core::botinstance::BotManagers>,
-    //parent_mgr : Option<Box<crate::core::botinstance::BotManagers>>,
 }
 /*
     HashMap<
             String, <-- Chatter / Username
          Vec<UserRole> -- <-- Vectors are basically arrays
         >
-
-    -- [ ]
-        let a = vec![]
-
-        modulatingforce : vec![UserRole::BotAdmin,
-                            UserRole::Mod(ChType::Channel("modulatingforcebot"))]
-        modulatingforce : vec![UserRole::BotAdmin,
-                            UserRole::Mod(ChType::Channel("modulatingforcebot"))]
-
 */
 
 #[derive(Debug)]
@@ -1184,7 +593,6 @@ impl IdentityManager {
 
         IdentityManager {
             special_roles_users: Arc::new(RwLock::new(a)),
-            //parent_mgr : None,
         }
     }
 
@@ -1207,7 +615,6 @@ impl IdentityManager {
             .await;
         if let Some(indx) = usrrolelock.iter().position(|value| *value == trg_role) {
             usrrolelock.swap_remove(indx);
-            //return ChangeResult::Success("Demoted successfully".to_string())
         }
     }
 
@@ -1229,19 +636,14 @@ impl IdentityManager {
 
     // [ ] Maybe I should create a can_user_run version that simply takes PrvMsg, but then calls can_user_run directly
 
-    // pub fn can_user_run_PRVMSG(self,msg:&PrivmsgMessage,cmdreqroles:Vec<UserRole>) -> Result<Permissible,Box<dyn Error>>
-    // pub fn can_user_run_PRVMSG(&self,msg:&PrivmsgMessage,cmdreqroles:Vec<UserRole>) -> Permissible
-    // pub async fn can_user_run_PRVMSG(self,msg:&PrivmsgMessage,cmdreqroles:Vec<UserRole>) -> Permissible
     pub async fn can_user_run_prvmsg(
         &mut self,
         msg: &PrivmsgMessage,
         cmdreqroles: Vec<UserRole>,
     ) -> (Permissible, ChangeResult) {
-        // println!("(#{}) {}: {}", msg.channel_login, msg.sender.name, msg.message_text);
-
         // [ ] Check what Badges in PrivmsgMessage
-        // println!{"Checking within PRVMSG"};
-        botlog::debug(
+
+        botlog::trace(
             "Checking within PRVMSG",
             Some("identity.rs > can_user_run_PRVMSG()".to_string()),
             // Some(&msg),
@@ -1410,49 +812,19 @@ impl IdentityManager {
             //     [x] Check if they have either UserRole::Mod(channelname::ChType) or UserRole::SupMod(channelname::ChType)
             //         [x] If not, assign them UserRole::Mod(channelname::ChType)
             Some(ChatBadge::Mod) => {
-                // println!("Mod Chatbadge detected");
                 botlog::info(
                     "Mod Chatbadge detected",
                     Some("identity.rs > can_user_run()".to_string()),
                     None,
                 );
 
-                // println!("debug special roles : {:?}",self.special_roles_users);
-                // println!("debug usr : {}",&usr.to_lowercase());
+                let rolesdb = Arc::clone(&self.special_roles_users);
 
-                // let Some((k,v)) = self.special_roles_users.get_key_value(usr);
-                // match self.special_roles_users.get_mut(&usr.to_lowercase()) {
-                // match self.special_roles_users.get(&usr.to_lowercase()) {
-                // println!("Creating clone");
-                botlog::trace(
-                    "Creating arc clone",
-                    Some("identity.rs > can_user_run()".to_string()),
-                    None,
-                );
-
-                // let roleslock = Arc::clone(&(*self).special_roles_users);
-                let roleslock = Arc::clone(&self.special_roles_users);
-
-                // println!("Read lock on : Special_Roles_User"); // <-- after this is slightly different between working and problem
-                botlog::trace(
-                    "Read lock on : Special_Roles_User",
-                    Some("identity.rs > can_user_run()".to_string()),
-                    None,
-                );
-
-                // {
-
-                //     // If target user doesn't exist in special_roles_users , add with blank vector roles
-                //     let mut srulock = self.special_roles_users.write().await;
-                //     srulock.entry(usr.clone()).or_insert(Arc::new(RwLock::new(vec![])));
-                //     botinstance::botlog::trace(&format!("Ensuring Chatter in Roles {:?}",srulock.entry(usr.clone())),
-                //     Some("identity.rs > promote()".to_string()), None);
-                //     Log::flush();
-                // }
                 self.affirm_chatter_in_db(usr.clone()).await;
 
-                let roleslock = roleslock.write().await;
-                match (*roleslock).get(&usr.to_lowercase()) {
+                let rolesdb_lock = rolesdb.write().await;
+
+                match (*rolesdb_lock).get(&usr.to_lowercase()) {
                     Some(usrroles)
                         if usrroles
                             .read()
@@ -1463,46 +835,25 @@ impl IdentityManager {
                                 .await
                                 .contains(&UserRole::SupMod(channelname.clone())) =>
                     {
-                        // <-- working got to this point
-                        // println!("contains mod : {}", usrroles.read().await.contains(&UserRole::Mod(channelname.clone())));
-                        // println!("contains supmod : {}", usrroles.read().await.contains(&UserRole::SupMod(channelname.clone())));
-
                         // Do nothing when theh have a mod badge and have either a supmod or mod badge for the channel
-                        // println!("Already a mod in roles");
                         botlog::trace(
                             "Already a mod in roles",
                             Some("identity.rs > can_user_run()".to_string()),
                             None,
                         );
                     }
+
                     _ => {
                         // In the event they have a mod badge , are running a bot command, but don't have a channel mod role yet...
-                        // println!("lock created > adding with a mod role o7");
-                        botlog::trace(
-                            "lock created > adding with a mod role o7",
-                            Some("identity.rs > can_user_run()".to_string()),
-                            None,
-                        );
 
-                        // botlog::notice("Assigning ModRole to Chatter",
-                        //     Some("identity.rs > can_user_run()".to_string()), None);
+                        let mut rolesdb_lock_mut = rolesdb_lock;
+                        let usrroles = rolesdb_lock_mut.get_mut(&usr.to_lowercase()).unwrap();
+                        let mut usrroles_lock = usrroles.write().await;
 
-                        let mut roleslock = roleslock;
-                        let a = roleslock.get_mut(&usr.to_lowercase()).unwrap();
-                        let mut alock = a.write().await;
-
-                        alock.push(UserRole::Mod(channelname.clone()));
+                        usrroles_lock.push(UserRole::Mod(channelname.clone()));
 
                         modrolechange = ChangeResult::Success("Auto Promoted Mod".to_string());
-
-                        // alock.get_mut(&usr.to_lowercase())
-                        // .get_or_insert_with(|| UserRole::Mod(channelname.clone()))
-                        // // .expect("ERROR")
-                        // .unwrap()
-                        // .write().await
-                        // // .get_mut()
-                        // .push(UserRole::Mod(channelname.clone()));
-                    } // <-- I'm assuming problem got to here
+                    }
                 }
             }
             _ => (), // Don't handle other roles here
@@ -1510,7 +861,6 @@ impl IdentityManager {
 
         // [x] If cmdreqroles includes UserRole::Mod("") , checks if chatter has UserRole::Mod(channelname::ChType) or UserRole::SupMod(channelname::ChType) to determine if Ok(Permissible::Allow)
 
-        // println!("cmd required roles : {:?}",cmdreqroles);
         botlog::trace(
             &format!("cmd required roles : {:?}", cmdreqroles),
             Some("identity.rs > can_user_run()".to_string()),
@@ -1518,31 +868,18 @@ impl IdentityManager {
         );
 
         if cmdreqroles.contains(&UserRole::Mod(ChType::Channel(String::new()))) {
-            // match self.special_roles_users.get(&channelname) {
-            //     Some(usrroles) => {},
-            //     None => (),
-
-            // }
-
-            // println!("Command requires Mod Role");
             botlog::trace(
                 "Command requires Mod Role",
                 Some("identity.rs > can_user_run()".to_string()),
                 None,
             );
 
-            // if let Some(a) = (&*self)
-            //     .special_roles_users
-            //     .read()
-            //     .await
-            //     .get(&usr.to_lowercase())
             if let Some(a) = self
                 .special_roles_users
                 .read()
                 .await
                 .get(&usr.to_lowercase())
             {
-                // println!("Special roles found for user");
                 botlog::trace(
                     "Special roles found for user",
                     Some("identity.rs > can_user_run()".to_string()),
@@ -1554,8 +891,6 @@ impl IdentityManager {
                         .await
                         .contains(&UserRole::SupMod(channelname.clone()))
                 {
-                    // return Ok(Permissible::Allow);
-                    // println!("Special roles found for user : A mod idenfified ");
                     botlog::trace(
                         "> Special Role Identified : Mod ",
                         Some("identity.rs > can_user_run()".to_string()),
@@ -1569,11 +904,6 @@ impl IdentityManager {
         // [x] If cmdreqroles includes UserRole::SupMod("") , checks if chatter has UserRole::SupMod(channelname::ChType) to determine if Ok(Permissible::Allow)
 
         if cmdreqroles.contains(&UserRole::SupMod(ChType::Channel(String::new()))) {
-            // if let Some(a) = (&*self)
-            //     .special_roles_users
-            //     .read()
-            //     .await
-            //     .get(&usr.to_lowercase())
             if let Some(a) = self
                 .special_roles_users
                 .read()
@@ -1584,7 +914,6 @@ impl IdentityManager {
                     .await
                     .contains(&UserRole::SupMod(channelname.clone()))
                 {
-                    // return Ok(Permissible::Allow);
                     return (Permissible::Allow, modrolechange);
                 }
             }
@@ -1592,7 +921,6 @@ impl IdentityManager {
 
         // [x] If cmdreqroles includes UserRole::BotAdmin and chatter has UserRole::BotAdmin , Ok(Permissible::Allow)
 
-        // println!("Eval cmdreqroles with botadmin : {}",cmdreqroles.contains(&UserRole::BotAdmin));
         botlog::trace(
             &format!(
                 "Eval cmdreqroles with botadmin : {}",
@@ -1603,46 +931,36 @@ impl IdentityManager {
         );
 
         if cmdreqroles.contains(&UserRole::BotAdmin) {
-            // println!("special roles get : {:?}",(&*self).special_roles_users.read().await.get(&usr.to_lowercase()));
             botlog::trace(
-                &format!(
+                format!(
                     "special roles get : {:?}",
-                    // (&*self)
-                    //     .special_roles_users
-                    //     .read()
-                    //     .await
-                    //     .get(&usr.to_lowercase())
                     self.special_roles_users
                         .read()
                         .await
                         .get(&usr.to_lowercase())
-                ),
+                )
+                .as_str(),
                 Some("identity.rs > can_user_run()".to_string()),
                 None,
             );
 
-            // if let Some(a) = (&*self)
             if let Some(a) = (self)
                 .special_roles_users
                 .read()
                 .await
                 .get(&usr.to_lowercase())
             {
-                println!(
-                    "special roles contains BotAdmin: {}",
-                    a.read().await.contains(&UserRole::BotAdmin)
-                );
                 botlog::trace(
-                    &format!(
+                    format!(
                         "special roles contains BotAdmin: {}",
                         a.read().await.contains(&UserRole::BotAdmin)
-                    ),
+                    )
+                    .as_str(),
                     Some("identity.rs > can_user_run()".to_string()),
                     None,
                 );
 
                 if a.read().await.contains(&UserRole::BotAdmin) {
-                    // return Ok(Permissible::Allow);
                     return (Permissible::Allow, modrolechange);
                 }
             }
@@ -1654,7 +972,6 @@ impl IdentityManager {
         )
     }
 
-    // pub async fn promote(&mut self,trgchatter:String,channel:Option<ChType>,trg_role:Option<UserRole>) -> ChangeResult {
     pub async fn promote(
         &self,
         authorizer: String,
@@ -1696,27 +1013,13 @@ impl IdentityManager {
                 .await;
 
             {
-                // mut block
-
-                // let authusrroles_mut = &mut authusrroles;
-                // [x] Add Mod(channel) to authusrroles
-                // [x] #TODO also add to DB if possible?
                 match *authorizer_badge {
                     Some(ChatBadge::Mod)
                         if (!authusrroles.contains(&UserRole::Mod(channel.clone()))
                             && !authusrroles.contains(&UserRole::SupMod(channel.clone()))) =>
                     {
-                        // (*authusrroles_mut).push(UserRole::Mod(channel.clone()));
                         authusrroles.push(UserRole::Mod(channel.clone()));
 
-                        // let mut srulock = self.special_roles_users.write().await;
-                        // srulock
-                        //     .get_mut(&trgchatter)
-                        //     .expect("Error getting roles")
-                        //     // !! [ ] Unsure what happens if promoting a chatter that doesn't exist at
-                        //     .write().await
-                        //     .push(UserRole::Mod(channel.clone()));
-
                         self.affirm_chatter_in_db(authorizer.clone()).await;
                         self.add_role(authorizer.clone(), UserRole::Mod(channel.clone()))
                             .await;
@@ -1724,7 +1027,7 @@ impl IdentityManager {
 
                     _ => (),
                 }
-            } // mut block
+            }
 
             // [x] 2. Get Authorizer & Target Chatter Roles
 
@@ -1740,6 +1043,7 @@ impl IdentityManager {
             let trgusrroles = self
                 .getspecialuserroles(trgchatter.to_lowercase().clone(), None)
                 .await;
+
             (authusrroles, trgusrroles)
         };
 
@@ -1753,29 +1057,8 @@ impl IdentityManager {
             if trgusrroles.contains(&UserRole::BotAdmin) {
                 return ChangeResult::NoChange("Already has the role".to_string());
             } else {
-                // {
-                //     let mut srulock = self.special_roles_users.write().await;
-
-                //     srulock.entry(trgchatter.clone()).or_insert(Arc::new(RwLock::new(vec![])));
-                //     botinstance::botlog::trace(&format!("Ensuring Target Chatter in Roles > {:?}",srulock.entry(trgchatter.clone())),
-                //     Some("identity.rs > promote()".to_string()), None);
-                //     Log::flush();
-                // }
                 self.affirm_chatter_in_db(trgchatter.clone()).await;
 
-                // {
-
-                //     let mut srulock = self.special_roles_users.write().await;
-
-                //     srulock
-                //         .get_mut(&trgchatter)
-                //         .expect("Error getting roles for the user")
-                //         .write().await
-                //         .push(UserRole::BotAdmin); // <-- Adds the specific role
-                //     botinstance::botlog::trace(&format!("Inserting Role > {:?}",srulock.entry(trgchatter.clone())),
-                //     Some("identity.rs > promote()".to_string()), None);
-                //     Log::flush();
-                // }
                 self.add_role(trgchatter.clone(), UserRole::BotAdmin).await;
 
                 return ChangeResult::Success("Promotion Successful".to_string());
@@ -1795,14 +1078,6 @@ impl IdentityManager {
                - NOTE : We do not validate trg_role here - app logic requires you to promote 1 to Mod and 1 more to SupMod
         */
 
-        // let authhasnsreqroles = match channel.clone() {
-
-        //     Some(channel) => authusrroles.contains(&UserRole::SupMod(channel.clone())) ||
-        //                                 authusrroles.contains(&UserRole::BotAdmin) ||
-        //                                 authusrroles.contains(&UserRole::Broadcaster) ,
-        //     None => authusrroles.contains(&UserRole::BotAdmin),
-        // };
-
         if let Some(trg_chnl) = channel.clone() {
             if !trgusrroles.contains(&UserRole::Broadcaster)
                 && !trgusrroles.contains(&UserRole::Mod(trg_chnl.clone()))
@@ -1816,29 +1091,8 @@ impl IdentityManager {
                     || authusrroles.contains(&UserRole::Broadcaster)
                     || authusrroles.contains(&UserRole::BotAdmin)
                 {
-                    // {
-
-                    //     // If target user doesn't exist in special_roles_users , add with blank vector roles
-                    //     let mut srulock = self.special_roles_users.write().await;
-                    //     srulock.entry(trgchatter.clone()).or_insert(Arc::new(RwLock::new(vec![])));
-                    //     botinstance::botlog::trace(&format!("Ensuring Chatter in Roles {:?}",srulock.entry(trgchatter.clone())),
-                    //     Some("identity.rs > promote()".to_string()), None);
-                    //     Log::flush();
-                    // }
                     self.affirm_chatter_in_db(trgchatter.clone()).await;
 
-                    // {
-                    //     // promote target after
-                    //     let mut srulock = self.special_roles_users.write().await;
-                    //     srulock
-                    //         .get_mut(&trgchatter)
-                    //         .expect("Error getting roles")
-                    //         .write().await
-                    //         .push(UserRole::Mod(trg_chnl.clone())); // Role to Add
-                    //     botinstance::botlog::trace(&format!("Adding Roles to Chatter {:?}",srulock.entry(trgchatter.clone())),
-                    //     Some("identity.rs > promote()".to_string()), None);
-                    //     Log::flush();
-                    // }
                     self.add_role(trgchatter.clone(), UserRole::Mod(trg_chnl.clone()))
                         .await;
 
@@ -1851,7 +1105,6 @@ impl IdentityManager {
             } else if !trgusrroles.contains(&UserRole::Broadcaster)
                 && trgusrroles.contains(&UserRole::Mod(trg_chnl.clone()))
                 && !trgusrroles.contains(&UserRole::SupMod(trg_chnl.clone()))
-            //
             {
                 // target user is a Mod && not broadcaster
                 // target's Next Role would be SupMod
@@ -1862,46 +1115,11 @@ impl IdentityManager {
                 if authusrroles.contains(&UserRole::Broadcaster)
                     || authusrroles.contains(&UserRole::BotAdmin)
                 {
-                    // { // Inserts user if doesn't exist
-                    //     let mut srulock = self.special_roles_users.write().await;
-                    //     srulock.entry(trgchatter.clone()).or_insert(Arc::new(RwLock::new(vec![])));
-                    //     botinstance::botlog::trace(&format!("Ensuring User in Roles {:?}",srulock.entry(trgchatter.clone())),
-                    //     Some("identity.rs > promote()".to_string()), None);
-                    //     Log::flush();
-                    // }
                     self.affirm_chatter_in_db(trgchatter.clone()).await;
 
-                    // { // Adds the requested role for the user
-                    //     let mut srulock = self.special_roles_users.write().await;
-                    //     srulock
-                    //         .get_mut(&trgchatter)
-                    //         .expect("Error getting roles")
-                    //         // !! [ ] Unsure what happens if promoting a chatter that doesn't exist at
-                    //         .write().await
-                    //         .push(UserRole::SupMod(trg_chnl.clone()));
-                    //     botinstance::botlog::trace(&format!("Adding Required Role > {:?}",srulock.entry(trgchatter.clone())),
-                    //     Some("identity.rs > promote()".to_string()), None);
-                    //     Log::flush();
-                    // }
-
                     self.add_role(trgchatter.clone(), UserRole::SupMod(trg_chnl.clone()))
                         .await;
 
-                    // {  // Removes the lower role (mod) from the user
-                    //     let mut srulock = self.special_roles_users.write().await;
-                    //     let mut uroleslock = srulock
-                    //             .get_mut(&trgchatter)
-                    //             .expect("Error getting roles")
-                    //             .write().await;
-                    //     if let Some(indx) = uroleslock.iter().position(|value| *value == UserRole::Mod(trg_chnl.clone())){
-                    //         uroleslock.swap_remove(indx);
-                    //     }
-
-                    //     botinstance::botlog::trace(&format!("Removing lower role > {:?}",uroleslock),
-                    //     Some("identity.rs > promote()".to_string()), None);
-                    //     Log::flush();
-                    // }
-
                     self.remove_role(trgchatter, UserRole::Mod(trg_chnl.clone()))
                         .await;
 
@@ -1917,355 +1135,19 @@ impl IdentityManager {
                 return ChangeResult::Failed(String::from("Already highest available role"));
             } else {
                 // since handling for channel is already done, will be handling other trguserroles situations here
-                // other situations includes :
-                /*
-                   [-] targetuser is broadcaster >> no need - this was done earlier in the function
-                   [?] ?
-                */
 
                 // At the moment, without any new roles, this should not be reached
 
-                // botinstance::botlog::warn(
-                //     &format!("Code Warning : add handing for other trgusrroles"),
-                //     Some("identity.rs > promote()".to_string()),
-                //     None,
-                // );
                 botlog::warn(
                     "Code Warning : add handing for other trgusrroles",
                     Some("identity.rs > promote()".to_string()),
                     None,
                 );
+
                 return ChangeResult::Failed(String::from("Code Warning"));
             }
-
-            // let trghasreqroles =
-
-            // {
-
-            //     // If target user doesn't exist in special_roles_users , add with blank vector roles
-            //     let mut srulock = self.special_roles_users.write().await;
-            //     srulock.entry(trgchatter.clone()).or_insert(Arc::new(RwLock::new(vec![])));
-            //     botinstance::botlog::trace(&format!("Ensuring Chatter in Roles {:?}",srulock.entry(trgchatter.clone())),
-            //     Some("identity.rs > promote()".to_string()), None);
-            //     Log::flush();
-            // }
-            // {
-            //     // promote target after
-            //     let mut srulock = self.special_roles_users.write().await;
-            //     srulock
-            //         .get_mut(&trgchatter)
-            //         .expect("Error getting roles")
-            //         // !! [ ] Unsure what happens if promoting a chatter that doesn't exist at
-            //         .write().await
-            //         .push(UserRole::Mod(trg_chnl.clone())); // Role to Add
-            //     botinstance::botlog::trace(&format!("Adding Roles to Chatter {:?}",srulock.entry(trgchatter.clone())),
-            //     Some("identity.rs > promote()".to_string()), None);
-            //     Log::flush();
-            // }
-
-            // return ChangeResult::Success(String::from("Promotion Successful"));
         };
 
-        // if authhasnsreqroles {
-
-        //     {
-
-        //         // If target user doesn't exist in special_roles_users , add with blank vector roles
-        //         let mut srulock = self.special_roles_users.write().await;
-        //         srulock.entry(trgchatter.clone()).or_insert(Arc::new(RwLock::new(vec![])));
-        //         botinstance::botlog::trace(&format!("SRLOCK - 1st write > {:?}",srulock.entry(trgchatter.clone())),
-        //         Some("identity.rs > promote()".to_string()), None);
-        //         Log::flush();
-        //     }
-        //     {
-        //         // promote target after
-        //         let mut srulock = self.special_roles_users.write().await;
-        //         srulock
-        //             .get_mut(&trgchatter)
-        //             .expect("Error getting roles")
-        //             // !! [ ] Unsure what happens if promoting a chatter that doesn't exist at
-        //             .write().await
-        //             .push(UserRole::Mod(trg_chnl));
-        //         botinstance::botlog::trace(&format!("SRLOCK - 2st write > {:?}",srulock.entry(trgchatter.clone())),
-        //         Some("identity.rs > promote()".to_string()), None);
-        //         Log::flush();
-        //     }
-
-        //     return ChangeResult::Success(String::from("Promotion Successful"));
-
-        // }
-
-        // authusrroles.contains(&UserRole::Mod(()))
-
-        /*
-
-
-        let chatterroles = self.getspecialuserroles(trgchatter.clone(), channel.clone()).await;
-
-
-        let rolemap = chatterroles;
-
-        match trg_role {
-            Some(UserRole::Mod(_)) => {
-
-
-                if let Some(trg_chnl) = channel.clone() {
-
-                    // [ ] 1. If trg_role & trgchatter is a Mod or SupMod of the target channel, return NoChange
-
-                    let chatterroles = self.getspecialuserroles(trgchatter.clone(), channel.clone()).await;
-                    let rolemap = chatterroles;
-                    // let rolemap = rolemap.unwrap();
-                    if rolemap.contains(&UserRole::Mod(trg_chnl.clone())) {
-                        return ChangeResult::NoChange(String::from("Target User already has Target Role"));
-                    } else if rolemap.contains(&UserRole::Broadcaster) {
-                        return ChangeResult::NoChange(String::from("No need to do that for broadcaster"));
-                    }
-
-                    // # otherwise, trg_role for the given chnl is not assigned to the trgchatter
-                    // chatterroles.push(UserRole::Mod(trg_chnl.clone()));
-                    // let a = self.special_roles_users;
-                    // let b = a.write().await;
-                    // // let c = b.get_mut(&trgchatter);
-                    // let c = (*b).;
-
-                    // [ ] 2. Ensure an entry in Special_Roles_user for trgchatter, and push Mod(Channel) for the Target User
-
-                    // [x] (!!) AROUND HERE - check if the user exists first, and at least add the user as we're promoting anyway
-
-                    {
-
-                        // If target user doesn't exist in special_roles_users , add with blank vector roles
-                        let mut srulock = self.special_roles_users.write().await;
-                        srulock.entry(trgchatter.clone()).or_insert(Arc::new(RwLock::new(vec![])));
-                        botinstance::botlog::trace(&format!("SRLOCK - 1st write > {:?}",srulock.entry(trgchatter.clone())),
-                        Some("identity.rs > promote()".to_string()), None);
-                        Log::flush();
-                    }
-                    {
-                        // promote target after
-                        let mut srulock = self.special_roles_users.write().await;
-                        srulock
-                            .get_mut(&trgchatter)
-                            .expect("Error getting roles")
-                            // !! [ ] Unsure what happens if promoting a chatter that doesn't exist at
-                            .write().await
-                            .push(UserRole::Mod(trg_chnl));
-                        botinstance::botlog::trace(&format!("SRLOCK - 2st write > {:?}",srulock.entry(trgchatter.clone())),
-                        Some("identity.rs > promote()".to_string()), None);
-                        Log::flush();
-                    }
-
-                    return ChangeResult::Success(String::from("Promotion Successful"));
-                }
-
-
-            },
-            Some(UserRole::SupMod(_)) =>
-            {
-                    if let Some(trg_chnl) = channel.clone() {
-
-                        // [ ] 1. If trg_role & trgchatter is a Mod or SupMod of the target channel, return NoChange
-
-                        let chatterroles = self.getspecialuserroles(trgchatter.clone(), channel.clone()).await;
-                        let rolemap = chatterroles;
-                        // let rolemap = rolemap.unwrap();
-                        if rolemap.contains(&UserRole::SupMod(trg_chnl.clone())) {
-                            return ChangeResult::NoChange(String::from("Target User already has Target Role"));
-                        } else if rolemap.contains(&UserRole::Broadcaster) {
-                            return ChangeResult::NoChange(String::from("No need to do that for broadcaster"));
-                        }
-                        // # otherwise, trg_role for the given chnl is not assigned to the trgchatter
-                        // chatterroles.push(UserRole::Mod(trg_chnl.clone()));
-                        // let a = self.special_roles_users;
-                        // let b = a.write().await;
-                        // // let c = b.get_mut(&trgchatter);
-                        // let c = (*b).;
-
-
-                        // [ ] 2. Ensure an entry in Special_Roles_user for trgchatter, and push SupMod(Channel) for the Target User
-
-                        // [x] (!!) AROUND HERE - check if the user exists first, and at least add the user as we're promoting anyway
-
-                        {
-                            let mut srulock = self.special_roles_users.write().await;
-                            srulock.entry(trgchatter.clone()).or_insert(Arc::new(RwLock::new(vec![])));
-                            botinstance::botlog::trace(&format!("SRLOCK - 1st write > {:?}",srulock.entry(trgchatter.clone())),
-                            Some("identity.rs > promote()".to_string()), None);
-                            Log::flush();
-                        }
-                        {
-                            let mut srulock = self.special_roles_users.write().await;
-                            srulock
-                                .get_mut(&trgchatter)
-                                .expect("Error getting roles")
-                                // !! [ ] Unsure what happens if promoting a chatter that doesn't exist at
-                                .write().await
-                                .push(UserRole::SupMod(trg_chnl.clone()));
-                            botinstance::botlog::trace(&format!("SRLOCK - 2st write > {:?}",srulock.entry(trgchatter.clone())),
-                            Some("identity.rs > promote()".to_string()), None);
-                            Log::flush();
-                        }
-                        {
-                            let mut srulock = self.special_roles_users.write().await;
-                            // srulock
-                            //     .get_mut(&trgchatter)
-                            //     .expect("Error getting roles")
-                            //     // !! [ ] Unsure what happens if promoting a chatter that doesn't exist at
-                            //     .write().await
-                            //     .(UserRole::Mod(trg_chnl));
-                            // let indx = srulock.iter().position()
-                            let mut uroleslock = srulock
-                                    .get_mut(&trgchatter)
-                                    .expect("Error getting roles")
-                                    // !! [ ] Unsure what happens if promoting a chatter that doesn't exist at
-                                    .write().await;
-                            if let Some(indx) = uroleslock.iter().position(|value| *value == UserRole::Mod(trg_chnl.clone())){
-                                uroleslock.swap_remove(indx);
-                            }
-
-                            botinstance::botlog::trace(&format!("SRLOCK - 2st write > {:?}",uroleslock),
-                            Some("identity.rs > promote()".to_string()), None);
-                            Log::flush();
-                        }
-
-                        return ChangeResult::Success(String::from("Promotion Successful"));
-                    }
-                } ,
-            Some(UserRole::BotAdmin) => {
-
-
-
-                let chatterroles = self.getspecialuserroles(trgchatter.clone(), channel.clone()).await;
-                let rolemap = chatterroles;
-
-                botinstance::botlog::trace(&format!("Target Role : BotAdmin"),
-            Some("identity.rs > promote()".to_string()), None);
-
-               // [x] 1. Check their roles first if they already have botadmin
-               // [x] 2. Know that prior to promote() , BotAdmins should have been validated before being able to pass the BotAdmin target
-
-                // [x] 1. Check target chatter's roles first if they already have botadmin
-                botinstance::botlog::trace(&format!("Eval rolemap.contains(BotAdmin) : {}",rolemap.contains(&UserRole::BotAdmin)),
-                Some("identity.rs > promote()".to_string()), None);
-
-                botinstance::botlog::trace(&format!("Eval rolemap.contains(BotAdmin) > Rolemap : {:?}",rolemap),
-                Some("identity.rs > promote()".to_string()), None);
-
-                // [ ] (!) This seems to be an issue - rolemap by this point is blank
-                if rolemap.contains(&UserRole::BotAdmin) {
-                    return ChangeResult::NoChange(String::from("Target User already has Target Role"));
-                }
-                // # otherwise, trg_role for the given chnl is not assigned to the trgchatter
-                // chatterroles.push(UserRole::Mod(trg_chnl.clone()));
-
-                // [x] (!!) AROUND HERE - check if the user exists first, and at least add the user as we're promoting anyway
-
-                {
-                    let mut srulock = self.special_roles_users.write().await;
-
-                    srulock.entry(trgchatter.clone()).or_insert(Arc::new(RwLock::new(vec![])));
-                    botinstance::botlog::trace(&format!("SRLOCK - 1st write > {:?}",srulock.entry(trgchatter.clone())),
-                    Some("identity.rs > promote()".to_string()), None);
-                    Log::flush();
-                }
-
-                {
-
-                    let mut srulock = self.special_roles_users.write().await;
-
-                    srulock
-                        .get_mut(&trgchatter)
-                        // !! [ ] Unsure what happens if promoting a chatter that doesn't exist at
-                        .expect("Error getting roles")
-                        .write().await
-                        .push(UserRole::BotAdmin);
-                    botinstance::botlog::trace(&format!("SRLOCK - 2nd write > {:?}",srulock.entry(trgchatter.clone())),
-                    Some("identity.rs > promote()".to_string()), None);
-                    Log::flush();
-                }
-                botinstance::botlog::trace(&format!("Target Role : BotAdmin >> Successful"),
-                    Some("identity.rs > promote()".to_string()), None);
-
-                return ChangeResult::Success(String::from("Promotion Successful"));
-            },
-            Some(_) => {
-                botinstance::botlog::warn(&format!("Runtime reached undeveloped code"),
-                Some("identity.rs > promote()".to_string()), None);
-            },
-            None => {
-                botinstance::botlog::warn(&format!("Runtime reached undeveloped code"),
-                Some("identity.rs > promote()".to_string()), None);
-            },
-        }
-
-        */
-
-        // match chatterroles {
-        //     Some(chatterroles) => {
-
-        //         // [x] chatter already has the target role
-        //         if chatterroles.contains(&trg_role) {
-        //             return ChangeResult::NoChange(String::from("Target User already has Target Role"));
-        //         }
-
-        //         // By this point, chatteroles does not contain target role
-        //         // match trgRole {
-        //         //     Some(trgRole) => {
-        //         //         match trgRole {
-        //         //             UserRole::Mod(a) => {
-
-        //         //             },
-        //         //             UserRole::SupMod(a) => (),
-        //         //             UserRole::BotAdmin => (),
-        //         //             _ => (), // <-- do nothing with al other options
-        //         //         }
-        //         //     },
-        //         //     None => {
-        //         //         /*
-        //         //         - If trgRole is None , then promote by implicit rules . For example,
-        //         //             - For UserRoles without Mod or SupMod & Caller is SupMod | Broadcaster | BotAdmin > To Mod
-        //         //             - For Mod & Caller is SupMod | Broadcaster | BotAdmin > To SupMod
-        //         //             - For UserRoles without BotAdmin & Caller is BotAdmin > To BotAdmin
-        //         //          */
-        //         //     },
-
-        //         // }
-
-        //         // let trgRole = match trgRole {
-        //         //     Some(UserRole::Mod(a)) => a,
-        //         //     Some(UserRole::SupMod(a)) => a,
-        //         //     Some(UserRole::BotAdmin) => UserRole::BotAdmin,
-        //         //     None => {
-        //         //         /*
-        //         //         - If trgRole is None , then promote by implicit rules . For example,
-        //         //             - For UserRoles without Mod or SupMod & Caller is SupMod | Broadcaster | BotAdmin > To Mod
-        //         //             - For Mod & Caller is SupMod | Broadcaster | BotAdmin > To SupMod
-        //         //             - For UserRoles without BotAdmin & Caller is BotAdmin > To BotAdmin
-        //         //          */
-        //         //     },
-
-        //         // };
-
-        //         // if let Some(trgRole) = trgRole {
-
-        //         //     // [x] chatter already has the target role
-        //         //     if chatterroles.contains(&trgRole) {
-        //         //         return ChangeResult::NoChange(String::from("Target User already has Target Role"));
-        //         //     }
-
-        //         //     // [ ] trgRole should be assigned based on the input channel
-        //         //     let roletoassign = UserRole::
-        //         // }
-
-        //     },
-        //     _ => (),
-        // }
-        // botinstance::botlog::warn(
-        //     &format!("Runtime reached undeveloped code"),
-        //     Some("identity.rs > promote()".to_string()),
-        //     None,
-        // );
         botlog::warn(
             "Runtime reached undeveloped code",
             Some("identity.rs > promote()".to_string()),
@@ -2280,10 +1162,7 @@ impl IdentityManager {
         authorizer_badge: &Option<ChatBadge>,
         trgchatter: String,
         channel: Option<ChType>,
-        // trg_role:Option<UserRole>
     ) -> ChangeResult {
-        // botinstance::botlog::trace(&format!("IN VARS for demote() : Authorizer : {:?} ; Target Chatter : {} ; Target Channel : {:?} ; Targer Role {:?}",
-        //                 authorizer,trgchatter,channel,trg_role),
         botlog::trace(&format!("IN VARS for demote() : Authorizer : {:?} ; Target Chatter : {} ; Target Channel : {:?}",
                     authorizer,trgchatter,channel), Some("identity.rs > demote()".to_string()), None);
         Log::flush();
@@ -2314,18 +1193,8 @@ impl IdentityManager {
                         if (!authusrroles.contains(&UserRole::Mod(channel.clone()))
                             && !authusrroles.contains(&UserRole::SupMod(channel.clone()))) =>
                     {
-                        // (*authusrroles_mut).push(UserRole::Mod(channel.clone()));
                         authusrroles.push(UserRole::Mod(channel.clone()));
 
-                        // [ ] below pushes mod to authorizer
-                        // let mut srulock = self.special_roles_users.write().await;
-                        // srulock
-                        //     .get_mut(&trgchatter)
-                        //     .expect("Error getting roles")
-                        //     // !! [ ] Unsure what happens if promoting a chatter that doesn't exist at
-                        //     .write().await
-                        //     .push(UserRole::Mod(channel.clone()));
-
                         self.add_role(authorizer.clone(), UserRole::Mod(channel.clone()))
                             .await;
                     }
@@ -2351,16 +1220,6 @@ impl IdentityManager {
                 || authusrroles.contains(&UserRole::SupMod(channel.clone())))
                 && trgusrroles.contains(&UserRole::Mod(channel.clone()))
             {
-                // // [ ] Below removes Mod from trgchatter
-                // let mut srulock = self.special_roles_users.write().await;
-                // let mut usrrolelock = srulock
-                //     .get_mut(&trgchatter)
-                //     .expect("Error getting roles")
-                //     .write().await;
-                // if let Some(indx) = usrrolelock.iter().position(|value| *value == UserRole::Mod(channel.clone())){
-                //     usrrolelock.swap_remove(indx);
-                //     return ChangeResult::Success("Demoted successfully".to_string())
-                // }
                 self.remove_role(trgchatter.clone(), UserRole::Mod(channel.clone()))
                     .await;
                 return ChangeResult::Success("Demoted successfully".to_string());
@@ -2370,18 +1229,6 @@ impl IdentityManager {
                 || authusrroles.contains(&UserRole::Broadcaster))
                 && trgusrroles.contains(&UserRole::SupMod(channel.clone()))
             {
-                // [ ] For Trgchatter, below pushes Mod UserRole and removes SupMod
-                // let mut srulock = self.special_roles_users.write().await;
-                // let mut usrrolelock = srulock
-                //     .get_mut(&trgchatter)
-                //     .expect("Error getting roles")
-                //     .write().await;
-                // usrrolelock.push(UserRole::Mod(channel.clone())); // pushes Mod , and removes SupMod
-                // if let Some(indx) = usrrolelock.iter().position(|value| *value == UserRole::SupMod(channel.clone())){
-                //     usrrolelock.swap_remove(indx);
-                //     return ChangeResult::Success("Demoted successfully".to_string())
-                // }
-
                 self.add_role(trgchatter.clone(), UserRole::Mod(channel.clone()))
                     .await;
                 self.remove_role(trgchatter.clone(), UserRole::SupMod(channel.clone()))
@@ -2402,15 +1249,12 @@ impl IdentityManager {
             }
         }
 
-        // botinstance::botlog::warn(&format!("Potential Unhandled Demotion Condition : Consider explicitely adding in for better handling"),
-        //         Some("identity.rs > demote()".to_string()), None);
         botlog::warn("Potential Unhandled Demotion Condition : Consider explicitely adding in for better handling", 
                 Some("identity.rs > demote()".to_string()), None);
         Log::flush();
         ChangeResult::Failed(String::from("Did not meet criteria to demote succesfully"))
     }
 
-    // pub async fn getspecialuserroles(&self,chattername:String,channel:Option<ChType>) -> Option<Arc<RwLock<Vec<UserRole>>>> {
     pub async fn getspecialuserroles(
         &self,
         chattername: String,
@@ -2453,29 +1297,24 @@ impl IdentityManager {
             None => None,
         };
 
-        let rolesa = Arc::clone(&self.special_roles_users);
+        let rolesdb = Arc::clone(&self.special_roles_users);
 
-        let a = rolesa.read().await;
-        // let a = Arc::clone(a)
-        //let a = a;
-        let vecroles = &(*a);
-        let vecroles = vecroles.get(&chattername);
+        let rolesdb_lock = rolesdb.read().await;
+
+        let vecroles = &(*rolesdb_lock).get(&chattername);
         match vecroles {
             Some(a) => {
                 // [ ] This needs to take the user roles for the user, then yield only the one for the channel if channel is explicitely provided
                 // Some(Arc::clone(a))
                 match channel_out {
                     Some(channel) => {
-                        // let eval = a.read().await.contains(&UserRole::Mod(channel));
-                        // let eval = a.read().await.contains(&UserRole::SupMod(channel));
                         botlog::debug(
                             &format!("INTERNAL > All Roles found {:?}", &a),
                             Some("IdentityManager > getspecialuserroles()".to_string()),
                             None,
                         );
 
-                        // a.read().await.contains(&UserRole::BotAdmin)
-                        botlog::trace(
+                        botlog::debug(
                             &format!(
                                 "INTERNAL > eval special roles contains botadmin : {:?}",
                                 a.read().await.contains(&UserRole::BotAdmin)
@@ -2496,11 +1335,6 @@ impl IdentityManager {
                         // else {};
                     }
                     None => {
-                        // here , do nothing if the channel not provided
-                        // [ ] TODO : Future is to provide all maybe ?
-                        // ... no I think missing this is an issue for when the flag is -admin and channel is None?
-                        //
-                        // => 02.13 - Decided That None is provided as a Channel, we can output non-channel related roles like BotAdmin
                         if a.read().await.contains(&UserRole::BotAdmin) {
                             evalsproles.push(UserRole::BotAdmin);
                         }
@@ -2526,6 +1360,12 @@ impl IdentityManager {
     }
 }
 
+// =====================
+// =====================
+// =====================
+// =====================
+// =====================
+
 #[cfg(test)]
 mod core_identity {
 
@@ -2536,9 +1376,6 @@ mod core_identity {
     #[test]
     fn user_role_identity() {
         Log::set_file_ext(Extension::Log);
-        // Log::set_level(Level::Trace);
-        // let result = 2 + 2;
-        // assert_eq!(result, 4);
         assert_eq!(
             UserRole::SupMod(ChType::Channel("strong".to_string())),
             UserRole::SupMod(ChType::Channel("Strong".to_lowercase()))
@@ -2662,7 +1499,8 @@ mod core_identity {
 
         let broadcaster = "broadcasterer".to_string();
         let broadcaster_badge = &Some(ChatBadge::Broadcaster);
-        let channel = Some(ChType::Channel(broadcaster.clone()));
+        // let channel = Some(ChType::Channel(broadcaster.clone()));
+        let channel = ChType::Channel(broadcaster.clone());
         let supchatter = "superModerator".to_string();
         let trg_role = None;
 
@@ -2671,7 +1509,7 @@ mod core_identity {
                 broadcaster.clone(),
                 broadcaster_badge,
                 supchatter.clone(),
-                channel.clone(),
+                Some(channel.clone()),
                 trg_role.clone(),
             )
             .await;
@@ -2686,7 +1524,7 @@ mod core_identity {
                 broadcaster.clone(),
                 broadcaster_badge,
                 supchatter.clone(),
-                channel.clone(),
+                Some(channel.clone()),
                 trg_role.clone(),
             )
             .await;
@@ -2697,10 +1535,10 @@ mod core_identity {
         );
 
         let rslt = test_id_mgr
-            .getspecialuserroles(supchatter.clone(), channel.clone())
+            .getspecialuserroles(supchatter.clone(), Some(channel.clone()))
             .await;
 
-        assert!(rslt.contains(&UserRole::SupMod(channel.unwrap())));
+        assert!(rslt.contains(&UserRole::SupMod(channel)));
 
         // [x] SupMod Attempts to Promote Chatter to SupMod
 
@@ -2730,7 +1568,6 @@ mod core_identity {
             .getspecialuserroles(trgchatter.clone(), channel.clone())
             .await;
 
-        // assert!(rslt.contains(&UserRole::Mod(ChType::Channel("broadcasterer".to_string()))));
         assert!(rslt.contains(&UserRole::Mod(channel.clone().unwrap())));
 
         let rslt = test_id_mgr
@@ -2743,7 +1580,6 @@ mod core_identity {
             )
             .await;
 
-        // assert_eq!(rslt, ChangeResult::Success("Promotion Successful".to_string()));
         assert_eq!(
             rslt,
             ChangeResult::Failed("You're not permitted to do that".to_string())
@@ -2815,7 +1651,6 @@ mod core_identity {
             )
             .await;
 
-        // assert_eq!(rslt, ChangeResult::Success("Promotion Successful".to_string()));
         assert_eq!(
             rslt,
             ChangeResult::Success("Promotion Successful".to_string())
@@ -2855,7 +1690,7 @@ mod core_identity {
         let test_id_mgr = IdentityManager::init();
 
         let supmod = "supmoder".to_string();
-        // let supmod_badge = &None;
+
         let channel = Some(ChType::Channel("somechannel".to_string()));
 
         test_id_mgr.affirm_chatter_in_db(supmod.clone()).await;
@@ -2872,8 +1707,6 @@ mod core_identity {
         // [x] Create regular mod
 
         let regmod = "moder".to_string();
-        // let supmod_badge = &None;
-        // let channel = Some(ChType::Channel("somechannel".to_string()));
 
         test_id_mgr.affirm_chatter_in_db(regmod.clone()).await;
         test_id_mgr
diff --git a/src/custom/experiments.rs b/src/custom/experiments.rs
index b310e92..462630f 100644
--- a/src/custom/experiments.rs
+++ b/src/custom/experiments.rs
@@ -17,7 +17,7 @@ use twitch_irc::message::PrivmsgMessage;
 
 use crate::core::botlog;
 
-use crate::core::botmodules::bot_actions::actions_util::{self, BotAR};
+use crate::core::bot_actions::actions_util::{self, BotAR};
 use crate::core::botmodules::{BotActionTrait, BotCommand, BotModule, Listener, ModulesManager};
 
 use crate::core::identity;
diff --git a/src/main.rs b/src/main.rs
index d632453..b45ab98 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -20,7 +20,7 @@ pub async fn main() {
     let bot = BotInstance::init().await;
 
     {
-        botlog::debug("Reading bot actions", Some("main()".to_string()), None);
+        botlog::trace("Reading bot actions", Some("main()".to_string()), None);
 
         let actsdb = Arc::clone(&bot.botmodules.botactions);
         let actsdb_lock = actsdb.read().await;
@@ -29,10 +29,10 @@ pub async fn main() {
             for act in acts {
                 let outstr = match act {
                     botmodules::BotAction::C(b) => {
-                        format!("bot actions: {}", b.command)
+                        format!("bot actions > Command : {}", b.command)
                     }
                     botmodules::BotAction::L(l) => {
-                        format!("bot actions: {}", l.name)
+                        format!("bot actions > Listener : {}", l.name)
                     }
                     _ => "Not a valid match??".to_string(),
                 };