From cc11479bf2b51dd921aa7de286cf754357f1a7a3 Mon Sep 17 00:00:00 2001
From: ModulatingForce <116608425+modulatingforce@users.noreply.github.com>
Date: Mon, 12 Feb 2024 02:34:32 -0500
Subject: [PATCH] 2024.02.12 - GetRole() Works

---
 src/core/botinstance.rs | 26 ++++++++++++------
 src/core/botmodules.rs  | 12 ++++++---
 src/core/identity.rs    | 59 ++++++++++++++++++++++++++++++++---------
 src/main.rs             | 19 ++++++++++++-
 4 files changed, 91 insertions(+), 25 deletions(-)

diff --git a/src/core/botinstance.rs b/src/core/botinstance.rs
index 090b0d5..03b68a4 100644
--- a/src/core/botinstance.rs
+++ b/src/core/botinstance.rs
@@ -240,7 +240,7 @@ impl BotInstance
 
     // pub fn init() -> BotInstance
     // pub fn init() -> Arc<BotInstance>
-    pub fn init() -> BotInstance
+    pub async fn init() -> BotInstance
     {
         dotenv().ok();
 
@@ -295,7 +295,7 @@ impl BotInstance
             //         ratelimiters : ratelimiters,
             //         client : client,
             //     } ,
-            botmodules : ModulesManager::init(),
+            botmodules : ModulesManager::init().await,
             twitch_oauth : oauth_token,
             bot_channels : botchannels,    
             // identity : IdentityManager::init(),
@@ -620,6 +620,7 @@ impl BotInstance
     // async fn listener_main_prvmsg(self,msg:&PrivmsgMessage) -> () {
     // async fn listener_main_prvmsg(self:Arc<Self>,msg:&PrivmsgMessage) -> () {
     pub async fn listener_main_prvmsg(bot:BotAR,msg:&PrivmsgMessage) -> () {
+        println!(">> Inner listenermain_prvmsg()");
 
         // let a = a;
         // println!("(#{}) {}: {}", msg.channel_login, msg.sender.name, msg.message_text);
@@ -672,18 +673,25 @@ impl BotInstance
         // let hacts = boxed_bot.clone().lock().await.get_botactions();
         // let hacts = bot.read().await.get_botactions();
         let botlock = bot.read().await;
-        let hacts = botlock.botmodules.botactions.read().await;
-        // let hacts = hacts
-        for (_m,acts) in &(*hacts) {
-            
+        let hacts = Arc::clone(&botlock.botmodules.botactions);
+        // let hacts = hacts.read().await;
+        let a = hacts.read().await;
+        println!("hacts size : {}",(*a).len());
 
+        println!(">> Inner listenermain_prvmsg() >> before for loop of bot actions");
+        // println!(">> Inner listenermain_prvmsg() >> before for loop of bot actions : {:?}",*hacts);
+        // let hacts = hacts
+        // let l = *hacts;
+        for (_m,acts) in &*hacts.read().await {
+            
+            println!(">> Inner listenermain_prvmsg() >> checking bot actions");
             
 
             // let bot = bot; 
             
             for a in acts {
 
-                
+                println!(">> Inner listenermain_prvmsg() >> checking bot actions >> 2");
 
                 let _act = match a {
 
@@ -702,6 +710,8 @@ impl BotInstance
                         //     println!("args : {v}");
                         // }
 
+                        println!("Reviewing internal commands");
+
                         let inpt = msg.message_text.split("\n").next().expect("ERROR during BotCommand");
                         let inpt = msg.message_text.split(" ").next().expect("ERROR during BotCommand");
 
@@ -829,7 +839,7 @@ impl BotInstance
                             let botlock = bot.read().await;
                             let id = botlock.get_identity();
                             let id = id.read().await;
-                            let eval= id.can_user_run_PRVMSG(&msg, c.required_roles.clone());
+                            let eval= id.can_user_run_PRVMSG(&msg, c.required_roles.clone()).await;
                             match eval {
                                 // Ok(Permissible::Allow) => (),
                                 Permissible::Allow => {
diff --git a/src/core/botmodules.rs b/src/core/botmodules.rs
index 38f1fc6..3d55f3c 100644
--- a/src/core/botmodules.rs
+++ b/src/core/botmodules.rs
@@ -277,7 +277,8 @@ impl BotActionTrait for Listener
         // let mgr = &mut bot.botmodules;
         // let mgr = bot.botmodules;
         // self.add_to_modmgr(Arc::new(*mgr));
-        self.add_to_modmgr(bot.botmodules);
+        println!("Adding action to bot");
+        self.add_to_modmgr(bot.botmodules).await;
     }
 
     // fn add_to_modmgr(self, modmgr:&mut ModulesManager) {
@@ -286,6 +287,7 @@ impl BotActionTrait for Listener
     // async fn add_to_modmgr(self, modmgr:&'static ModulesManager) {
     async fn add_to_modmgr(self, modmgr:Arc<ModulesManager>) {
         // let modmgr = *modmgr.lock().await;
+        println!("Adding action to module manager");
         modmgr.add_botaction(self.module.clone(), BotAction::L(self)).await;
         // modmgr.add_botaction(self.module.clone(), BotAction:L(self))
     }
@@ -311,7 +313,7 @@ impl ModulesManager
 {
 
     // pub fn init() -> Arc<Mutex<ModulesManager>>
-    pub fn init() -> Arc<ModulesManager>
+    pub async fn init() -> Arc<ModulesManager>
     {
 
 
@@ -331,8 +333,9 @@ impl ModulesManager
         // crate::core::identity::init(a.clone());
 
         // crate::core::identity::init(&mgr);
+        println!("ModulesManager > init() > Adding modules");
         let mgra = Arc::new(mgr);
-        crate::core::identity::init(Arc::clone(&mgra));
+        crate::core::identity::init(Arc::clone(&mgra)).await;
 
         // initialize custom crate modules
         // crate::modules::init(&mut mgr);
@@ -340,7 +343,7 @@ impl ModulesManager
         // crate::modules::init(a.clone());
         crate::modules::init(Arc::clone(&mgra));
 
-
+        
 
         println!(">> Modules Manager : End of Init");
 
@@ -383,6 +386,7 @@ impl ModulesManager
     // pub fn add_botaction(mut self, in_module:ModType, in_action:BotAction<F> ) -> ModulesManager<F> {
     //pub fn add_botaction(&mut self, in_module:ModType, in_action:BotAction ) -> () {
     pub async fn add_botaction(&self, in_module:ModType, in_action:BotAction ) {
+        println!("Add botaction called");
         /*
         adds a BotAction to the Modules Manager - This will require a BotModule passed as well
         This will including the logic of a valid add
diff --git a/src/core/identity.rs b/src/core/identity.rs
index 7026835..70d9508 100644
--- a/src/core/identity.rs
+++ b/src/core/identity.rs
@@ -29,12 +29,14 @@ fn adminvector() -> Vec<String> {
 
 
 // pub fn init(mgr:&mut ModulesManager)
-pub fn init(mgr:Arc<ModulesManager>)
+pub async fn init(mgr:Arc<ModulesManager>)
 {
 
-    let a = actions_util::asyncbox(cmd_promote) ;
+    println!("Went into Identiy Module init");
 
-    BotCommand {
+    // let a = actions_util::asyncbox(cmd_promote) ;
+
+    let tempb = BotCommand {
         module : BotModule(String::from("identity")),
         command : String::from("promote"), // command call name
         alias : vec![], // String of alternative names
@@ -46,7 +48,9 @@ pub fn init(mgr:Arc<ModulesManager>)
             UserRole::Broadcaster,
             UserRole::BotAdmin,
             ],
-    }.add_to_modmgr(Arc::clone(&mgr));
+    };
+    
+    tempb.add_to_modmgr(Arc::clone(&mgr));
 
     // async fn cmd_promote(mut bot:Arc<Mutex<BotInstance>>,msg:PrivmsgMessage) 
     // async fn cmd_promote(mut bot:&BotInstance,msg:PrivmsgMessage) -> &BotInstance
@@ -246,7 +250,21 @@ pub fn init(mgr:Arc<ModulesManager>)
 
     }
 
-    BotCommand {
+    // 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
         alias : vec![], // String of alternative names
@@ -258,8 +276,9 @@ pub fn init(mgr:Arc<ModulesManager>)
             UserRole::Broadcaster,
             UserRole::BotAdmin,
             ],
-    }.add_to_modmgr(Arc::clone(&mgr));
-
+    };
+    
+    tempb.add_to_modmgr(Arc::clone(&mgr)).await;
 
     // async fn cmd_demote(mut _chat:Arc<Mutex<BotInstance>>,_msg:PrivmsgMessage) {
     async fn cmd_demote(mut _chat:BotAR,_msg:PrivmsgMessage) {
@@ -268,7 +287,21 @@ pub fn init(mgr:Arc<ModulesManager>)
 
 
 
-    BotCommand {
+    // BotCommand {
+    //     module : BotModule(String::from("identity")),
+    //     command : String::from("getroles"), // command call name
+    //     alias : vec![], // String of alternative names
+    //     exec_body : actions_util::asyncbox(getroles) ,
+    //     help : String::from("getroles"),
+    //     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 tempcomm =  BotCommand {
         module : BotModule(String::from("identity")),
         command : String::from("getroles"), // command call name
         alias : vec![], // String of alternative names
@@ -280,7 +313,9 @@ pub fn init(mgr:Arc<ModulesManager>)
             UserRole::Broadcaster,
             UserRole::BotAdmin,
             ],
-    }.add_to_modmgr(Arc::clone(&mgr));
+    };
+    
+    tempcomm.add_to_modmgr(Arc::clone(&mgr)).await;
 
 
     // async fn getroles(bot:Arc<Mutex<BotInstance>>,msg:PrivmsgMessage) {
@@ -401,7 +436,7 @@ pub fn init(mgr:Arc<ModulesManager>)
 
 
     
-
+    println!("End of Init MOdule add");
 
 }
 
@@ -467,7 +502,7 @@ impl IdentityManager {
     // 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 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
     {
         // println!("(#{}) {}: {}", msg.channel_login, msg.sender.name, msg.message_text);
 
@@ -513,7 +548,7 @@ impl IdentityManager {
                                     ChType::Channel(msg.channel_login.to_owned()),
                                     sender_badge,
                                                 cmdreqroles
-                                                ) ;
+                                                ).await ;
         }
 
         
diff --git a/src/main.rs b/src/main.rs
index 4278813..7847da3 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -14,7 +14,24 @@ pub type BotAR = Arc<RwLock<BotInstance>>;
 #[tokio::main]
 pub async fn main() {
 
-    let bot = BotInstance::init();
+    let bot = BotInstance::init().await;
+
+    let a = Arc::clone(&bot.botmodules.botactions);
+    let a = a.read().await;
+    // let a = *a;
+
+    for (_,acts) in &*a {
+        for act in acts {
+            match act {
+                crate::core::botmodules::BotAction::C(b) => println!("bot actiions: {}",b.command),
+                crate::core::botmodules::BotAction::L(l) => println!("bot actiions: {}",l.name),
+                _ => println!("Not a valid match??"),
+            }
+            
+        }
+    };
+
+    println!("Starting runner..");
 
     bot.runner().await;