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>; pub type BotAR = Arc>; 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 { - 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 { - 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 { vec![String::from("ModulatingForce")] //vec![] } -// pub fn init(mgr:&mut ModulesManager) pub async fn init(mgr: Arc) { - // 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) { 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) { // 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) { 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) { // [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) { ); } - // 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) { tempb.add_to_modmgr(Arc::clone(&mgr)).await; - // async fn cmd_demote(mut _chat:Arc>,_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) { */ - // [ ] #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) { (arg1, arg2) }; - /* - let mut sender_badge:Option = 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) { */ - // 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) { tempcomm.add_to_modmgr(Arc::clone(&mgr)).await; - // async fn getroles(bot:Arc>,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) { */ - // 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) { .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 = 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) { 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) { } }; - // 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) { { 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) { 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>>>; #[derive(Clone)] pub struct IdentityManager { - // special_roles_users : HashMap>, // # <-- (!) This must be String instead of ChType because we're checking a User not a Channel - // special_roles_users : Arc>>>, // # <-- (!) This must be String instead of ChType because we're checking a User not a Channel - // special_roles_users : Arc>>>, - // special_roles_users: Arc>>>>>, special_roles_users: Arc>, - // parent_mgr : Box, - //parent_mgr : Option>, } /* HashMap< String, <-- Chatter / Username Vec -- <-- 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) -> Result> - // pub fn can_user_run_PRVMSG(&self,msg:&PrivmsgMessage,cmdreqroles:Vec) -> Permissible - // pub async fn can_user_run_PRVMSG(self,msg:&PrivmsgMessage,cmdreqroles:Vec) -> Permissible pub async fn can_user_run_prvmsg( &mut self, msg: &PrivmsgMessage, cmdreqroles: Vec, ) -> (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,trg_role:Option) -> 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, trgchatter: String, channel: Option, - // trg_role:Option ) -> 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) -> Option>>> { 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(), };