From fb1617d6d9c07e14e70a024c02b255b78b0079e2 Mon Sep 17 00:00:00 2001
From: haruyuumei <luzivotto.erick@gmail.com>
Date: Sun, 17 Mar 2024 18:40:12 -0300
Subject: [PATCH 01/21] minor spelling mistake

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index c736061..8637fdc 100644
--- a/README.md
+++ b/README.md
@@ -9,7 +9,7 @@ test ModulatingForceBot
 
 ```
 login_name = <botname>
-access_token = <oath token>
+access_token = <oauth token>
 bot_channels = <chnl1>,<chnl2>
 prefix = <prefix>
 ```
\ No newline at end of file

From 5fb373c522abbf350596e7c0ed98d7b4ec015513 Mon Sep 17 00:00:00 2001
From: haruyuumei <luzivotto.erick@gmail.com>
Date: Sun, 17 Mar 2024 19:12:33 -0300
Subject: [PATCH 02/21] bot admins change

---
 src/core/identity.rs | 13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)

diff --git a/src/core/identity.rs b/src/core/identity.rs
index 877fb6c..6392eb3 100644
--- a/src/core/identity.rs
+++ b/src/core/identity.rs
@@ -11,10 +11,19 @@ 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};
+use dotenv::dotenv;
+use std::env;
 
 fn adminvector() -> Vec<String> {
-    vec![String::from("ModulatingForce")]
-    //vec![]
+    // vec![String::from("ModulatingForce")]
+    // //vec![]
+    dotenv().ok();
+    let mut admins = Vec::new();
+
+    for admin in env::var("bot_admins").unwrap().split(',') {
+        admins.push(String::from(admin))
+    }
+    admins
 }
 
 pub async fn init(mgr: Arc<ModulesManager>) {

From f7881fa07d5ff5a6d1295eaf80c88214437df746 Mon Sep 17 00:00:00 2001
From: ModulatingForce <116608425+modulatingforce@users.noreply.github.com>
Date: Sun, 17 Mar 2024 19:29:22 -0400
Subject: [PATCH 03/21] adj adminvector()

---
 README.md            |  1 +
 src/core/identity.rs | 17 +++++++++++++++--
 2 files changed, 16 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index 8637fdc..33fdb59 100644
--- a/README.md
+++ b/README.md
@@ -12,4 +12,5 @@ login_name = <botname>
 access_token = <oauth token>
 bot_channels = <chnl1>,<chnl2>
 prefix = <prefix>
+bot_admins = <admins>
 ```
\ No newline at end of file
diff --git a/src/core/identity.rs b/src/core/identity.rs
index 6392eb3..42bc4c7 100644
--- a/src/core/identity.rs
+++ b/src/core/identity.rs
@@ -20,9 +20,22 @@ fn adminvector() -> Vec<String> {
     dotenv().ok();
     let mut admins = Vec::new();
 
-    for admin in env::var("bot_admins").unwrap().split(',') {
-        admins.push(String::from(admin))
+    // for admin in env::var("bot_admins").unwrap().split(',') {
+    //     admins.push(String::from(admin))
+    // }
+
+    // 03.17 - Forcen - Suggesting below instead : 
+    /*
+        - this will push only if env::var() returns Ok() ; 
+            otherwise (like in Err(_)) do nothing
+     */
+
+    if let Ok(value) = env::var("bot_admins") {
+        for admin in value.split(',') {
+            admins.push(String::from(admin))        
+        }
     }
+
     admins
 }
 

From 95a9962721c53c4a199434333f22b279cec87766 Mon Sep 17 00:00:00 2001
From: haruyuumei <luzivotto.erick@gmail.com>
Date: Thu, 28 Mar 2024 15:38:49 -0300
Subject: [PATCH 04/21] new module test

trying to add a new module
---
 src/custom/experimental/experiment001.rs |  4 --
 src/lib.rs                               |  1 +
 src/modules.rs                           | 10 ++++
 src/modules/test.rs                      | 17 ++++++
 src/modules/thisguy.rs                   | 68 ++++++++++++++++++++++++
 5 files changed, 96 insertions(+), 4 deletions(-)
 create mode 100644 src/modules.rs
 create mode 100644 src/modules/test.rs
 create mode 100644 src/modules/thisguy.rs

diff --git a/src/custom/experimental/experiment001.rs b/src/custom/experimental/experiment001.rs
index dd3cba4..28d499b 100644
--- a/src/custom/experimental/experiment001.rs
+++ b/src/custom/experimental/experiment001.rs
@@ -122,8 +122,6 @@ async fn good_girl(params : ExecBodyParams) {
             );
 
             let bot = Arc::clone(&params.bot);
-
-
             let botlock = bot.read().await;
 
             // uses chat.say_in_reply_to() for the bot controls for messages
@@ -135,8 +133,6 @@ async fn good_girl(params : ExecBodyParams) {
                 String::from("GoodGirl xdd "),
                 params.clone()
             ).await;
-
-
         }
     }
 }
diff --git a/src/lib.rs b/src/lib.rs
index c5ba775..f01fd10 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -1,2 +1,3 @@
 pub mod core;
 pub mod custom;
+pub mod modules;
\ No newline at end of file
diff --git a/src/modules.rs b/src/modules.rs
new file mode 100644
index 0000000..d0b1c6e
--- /dev/null
+++ b/src/modules.rs
@@ -0,0 +1,10 @@
+use std::sync::Arc;
+pub use crate::core::botinstance::BotInstance;
+pub use crate::core::botmodules::ModulesManager;
+
+
+mod thisguy;
+
+pub async fn init(mgr:&Arc<ModulesManager>){
+    thisguy::init(mgr).await;
+}
\ No newline at end of file
diff --git a/src/modules/test.rs b/src/modules/test.rs
new file mode 100644
index 0000000..ba7d68d
--- /dev/null
+++ b/src/modules/test.rs
@@ -0,0 +1,17 @@
+use std::sync::Arc;
+
+// pub use crate::core::botinstance::BotInstance;
+pub use crate::core::botmodules::ModulesManager;
+
+// [ ] Load submodules
+
+mod thisguy;
+
+// [ ] init() function that accepts bot instance - this is passed to init() on submodules
+
+pub async fn init(mgr: Arc<ModulesManager>) {
+    // Modules initializer loads modules into the bot
+    // this is achieved by calling submodules that also have fn init() defined
+
+    thisguy::init(Arc::clone(&mgr)).await;
+}
diff --git a/src/modules/thisguy.rs b/src/modules/thisguy.rs
new file mode 100644
index 0000000..339d4c4
--- /dev/null
+++ b/src/modules/thisguy.rs
@@ -0,0 +1,68 @@
+use crate::core::botmodules::{ BotActionTrait, BotCommand, BotModule, Listener, ModulesManager};
+use crate::core::identity::UserRole::*;
+use crate::core::bot_actions::*;
+use crate::core::botlog;
+use std::sync::Arc;
+use tokio::time::{sleep, Duration};
+
+
+async fn tsg(params: ExecBodyParams){
+
+    
+
+    if params.msg.sender.name.to_lowercase() == "haruyuumei".to_lowercase()
+    //|| params.msg.sender.name.to_lowercase() == "ModulatingForce".to_lowercase()
+    {
+        botlog::debug(
+            "Oh god I love anime Girls!!",
+            Some("modules > thisguy()".to_string()),
+            Some(&params.msg),
+        );
+        let bot = Arc::clone(&params.bot);
+        let botlock = bot.read().await;
+
+        // uses chat.say_in_reply_to() for the bot controls for messages
+        botlock
+        .botmgrs
+        .chat
+        .say_in_reply_to(
+            &params.msg, 
+            String::from("Oh god I love anime Girls!!"),
+            params.clone()
+        ).await;
+        sleep(Duration::from_secs_f64(0.5)).await;
+    }
+    
+}
+
+pub async fn init(mgr:&Arc<ModulesManager>){
+
+    BotCommand{
+        module:BotModule(String::from("thisguy")),
+        command: String::from("this"),
+        alias: vec![String::from("tsg")],
+        exec_body: actions_util::asyncbox(tesst),
+        help: String::from("test"),
+        required_roles: vec![
+        BotAdmin,
+        ],
+    }.add_to_modmgr(Arc::clone(&mgr)).await;
+    
+
+
+    Listener {
+        module: BotModule(String::from("thisguy")),
+        name: String::from("This Guy Listener"),
+        exec_body: actions_util::asyncbox(tsg),
+        help: String::from(""),
+    }.add_to_modmgr(Arc::clone(&mgr)).await;
+}
+
+async fn tesst(params : ExecBodyParams) {
+    println!("tesst triggered!"); // NOTE : This test function intends to print (e.g., to stdout) at fn call
+    botlog::debug(
+        "tesst triggered!",
+        Some("modules > tesst()".to_string()),
+        Some(&params.msg),
+    );
+}

From f8de595290c5bfabb1e591373964e0edc85755d5 Mon Sep 17 00:00:00 2001
From: haruyuumei <luzivotto.erick@gmail.com>
Date: Thu, 28 Mar 2024 18:50:28 -0300
Subject: [PATCH 05/21] custom module update

---
 src/custom.rs                            |  4 +++-
 src/custom/experimental/experiment001.rs |  1 +
 src/{modules => custom}/thisguy.rs       | 28 +++++++++++++++---------
 src/lib.rs                               |  3 +--
 src/modules.rs                           | 10 ---------
 src/modules/test.rs                      | 17 --------------
 6 files changed, 23 insertions(+), 40 deletions(-)
 rename src/{modules => custom}/thisguy.rs (73%)
 delete mode 100644 src/modules.rs
 delete mode 100644 src/modules/test.rs

diff --git a/src/custom.rs b/src/custom.rs
index 6107797..56c6257 100644
--- a/src/custom.rs
+++ b/src/custom.rs
@@ -13,6 +13,7 @@ pub use crate::core::botmodules::ModulesManager;
 
 // mod experiments;
 mod experimental;
+mod thisguy;
 
 // [ ] init() function that accepts bot instance - this is passed to init() on submodules
 
@@ -21,5 +22,6 @@ pub async fn init(mgr: Arc<ModulesManager>) {
     // this is achieved by calling submodules that also have fn init() defined
 
     // experiments::init(mgr).await
-    experimental::init(mgr).await;
+    experimental::init(mgr.clone()).await;
+    thisguy::init(&mgr).await;
 }
diff --git a/src/custom/experimental/experiment001.rs b/src/custom/experimental/experiment001.rs
index 28d499b..92af44d 100644
--- a/src/custom/experimental/experiment001.rs
+++ b/src/custom/experimental/experiment001.rs
@@ -105,6 +105,7 @@ async fn good_girl(params : ExecBodyParams) {
 
     if params.msg.sender.name.to_lowercase() == "ModulatingForce".to_lowercase()
         || params.msg.sender.name.to_lowercase() == "mzNToRi".to_lowercase()
+        || params.msg.sender.name.to_lowercase() == "haruyuumei".to_lowercase()
     {
         botlog::debug(
             "Good Girl Detected > Pausechamp",
diff --git a/src/modules/thisguy.rs b/src/custom/thisguy.rs
similarity index 73%
rename from src/modules/thisguy.rs
rename to src/custom/thisguy.rs
index 339d4c4..b5e895f 100644
--- a/src/modules/thisguy.rs
+++ b/src/custom/thisguy.rs
@@ -3,16 +3,26 @@ use crate::core::identity::UserRole::*;
 use crate::core::bot_actions::*;
 use crate::core::botlog;
 use std::sync::Arc;
+use rand::Rng;
 use tokio::time::{sleep, Duration};
-
+//use rand::Rng;
 
 async fn tsg(params: ExecBodyParams){
 
-    
-
     if params.msg.sender.name.to_lowercase() == "haruyuumei".to_lowercase()
-    //|| params.msg.sender.name.to_lowercase() == "ModulatingForce".to_lowercase()
+    || params.msg.sender.name.to_lowercase() == "ModulatingForce".to_lowercase()
     {
+        let phrases: [String;5] = [
+        "Aware Weebs...".to_string(),
+        "AYAYA I love anime Girls!!".to_string(),
+        "I love 2d Girls ILOST".to_string(),
+        "UOOHHHHH!!! Anime Girlssss".to_string(),
+        "Anime girls u say? peepoShy".to_string(),
+        ];
+        
+        let r = rand::thread_rng().gen_range(0..=4);
+        let a = phrases[r].clone();
+
         botlog::debug(
             "Oh god I love anime Girls!!",
             Some("modules > thisguy()".to_string()),
@@ -26,8 +36,8 @@ async fn tsg(params: ExecBodyParams){
         .botmgrs
         .chat
         .say_in_reply_to(
-            &params.msg, 
-            String::from("Oh god I love anime Girls!!"),
+            &params.msg,
+        a,
             params.clone()
         ).await;
         sleep(Duration::from_secs_f64(0.5)).await;
@@ -39,16 +49,14 @@ pub async fn init(mgr:&Arc<ModulesManager>){
 
     BotCommand{
         module:BotModule(String::from("thisguy")),
-        command: String::from("this"),
-        alias: vec![String::from("tsg")],
+        command: String::from("anime"),
+        alias: vec![String::from("Anime")],
         exec_body: actions_util::asyncbox(tesst),
         help: String::from("test"),
         required_roles: vec![
         BotAdmin,
         ],
     }.add_to_modmgr(Arc::clone(&mgr)).await;
-    
-
 
     Listener {
         module: BotModule(String::from("thisguy")),
diff --git a/src/lib.rs b/src/lib.rs
index f01fd10..667ce02 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -1,3 +1,2 @@
 pub mod core;
-pub mod custom;
-pub mod modules;
\ No newline at end of file
+pub mod custom;
\ No newline at end of file
diff --git a/src/modules.rs b/src/modules.rs
deleted file mode 100644
index d0b1c6e..0000000
--- a/src/modules.rs
+++ /dev/null
@@ -1,10 +0,0 @@
-use std::sync::Arc;
-pub use crate::core::botinstance::BotInstance;
-pub use crate::core::botmodules::ModulesManager;
-
-
-mod thisguy;
-
-pub async fn init(mgr:&Arc<ModulesManager>){
-    thisguy::init(mgr).await;
-}
\ No newline at end of file
diff --git a/src/modules/test.rs b/src/modules/test.rs
deleted file mode 100644
index ba7d68d..0000000
--- a/src/modules/test.rs
+++ /dev/null
@@ -1,17 +0,0 @@
-use std::sync::Arc;
-
-// pub use crate::core::botinstance::BotInstance;
-pub use crate::core::botmodules::ModulesManager;
-
-// [ ] Load submodules
-
-mod thisguy;
-
-// [ ] init() function that accepts bot instance - this is passed to init() on submodules
-
-pub async fn init(mgr: Arc<ModulesManager>) {
-    // Modules initializer loads modules into the bot
-    // this is achieved by calling submodules that also have fn init() defined
-
-    thisguy::init(Arc::clone(&mgr)).await;
-}

From fda7afb1918c8b59c542577d480d1149884b8e81 Mon Sep 17 00:00:00 2001
From: haruyuumei <luzivotto.erick@gmail.com>
Date: Thu, 28 Mar 2024 19:33:06 -0300
Subject: [PATCH 06/21] custom module working

---
 src/custom/thisguy.rs | 63 +++++++++++++++++++++----------------------
 1 file changed, 31 insertions(+), 32 deletions(-)

diff --git a/src/custom/thisguy.rs b/src/custom/thisguy.rs
index b5e895f..cf31b34 100644
--- a/src/custom/thisguy.rs
+++ b/src/custom/thisguy.rs
@@ -1,25 +1,25 @@
-use crate::core::botmodules::{ BotActionTrait, BotCommand, BotModule, Listener, ModulesManager};
-use crate::core::identity::UserRole::*;
 use crate::core::bot_actions::*;
 use crate::core::botlog;
-use std::sync::Arc;
+use crate::core::botmodules::{BotActionTrait, BotCommand, BotModule, Listener, ModulesManager};
+use crate::core::identity::UserRole::*;
 use rand::Rng;
+use std::sync::Arc;
 use tokio::time::{sleep, Duration};
+
 //use rand::Rng;
 
-async fn tsg(params: ExecBodyParams){
-
-    if params.msg.sender.name.to_lowercase() == "haruyuumei".to_lowercase()
-    || params.msg.sender.name.to_lowercase() == "ModulatingForce".to_lowercase()
+async fn tsg(params: ExecBodyParams) {
+    if params.msg.message_text == String::from("anime")
+        || params.msg.message_text == String::from("Anime")
     {
-        let phrases: [String;5] = [
-        "Aware Weebs...".to_string(),
-        "AYAYA I love anime Girls!!".to_string(),
-        "I love 2d Girls ILOST".to_string(),
-        "UOOHHHHH!!! Anime Girlssss".to_string(),
-        "Anime girls u say? peepoShy".to_string(),
+        let phrases: [String; 5] = [
+            "Aware oh no! Weebs...".to_string(),
+            "AYAYA I love anime Girls!!".to_string(),
+            "I love 2d Girls ILOST ".to_string(),
+            "UOOHHHHH!!! Anime Girlssss".to_string(),
+            "Anime girls u say? peepoShy ".to_string(),
         ];
-        
+
         let r = rand::thread_rng().gen_range(0..=4);
         let a = phrases[r].clone();
 
@@ -33,40 +33,39 @@ async fn tsg(params: ExecBodyParams){
 
         // uses chat.say_in_reply_to() for the bot controls for messages
         botlock
-        .botmgrs
-        .chat
-        .say_in_reply_to(
-            &params.msg,
-        a,
-            params.clone()
-        ).await;
+            .botmgrs
+            .chat
+            .say_in_reply_to(&params.msg, a, params.clone())
+            .await;
         sleep(Duration::from_secs_f64(0.5)).await;
+    }else {
+        
     }
-    
 }
 
-pub async fn init(mgr:&Arc<ModulesManager>){
-
-    BotCommand{
-        module:BotModule(String::from("thisguy")),
+pub async fn init(mgr: &Arc<ModulesManager>) {
+    BotCommand {
+        module: BotModule(String::from("thisguy")),
         command: String::from("anime"),
         alias: vec![String::from("Anime")],
         exec_body: actions_util::asyncbox(tesst),
         help: String::from("test"),
-        required_roles: vec![
-        BotAdmin,
-        ],
-    }.add_to_modmgr(Arc::clone(&mgr)).await;
+        required_roles: vec![BotAdmin],
+    }
+    .add_to_modmgr(Arc::clone(&mgr))
+    .await;
 
     Listener {
         module: BotModule(String::from("thisguy")),
         name: String::from("This Guy Listener"),
         exec_body: actions_util::asyncbox(tsg),
         help: String::from(""),
-    }.add_to_modmgr(Arc::clone(&mgr)).await;
+    }
+    .add_to_modmgr(Arc::clone(&mgr))
+    .await;
 }
 
-async fn tesst(params : ExecBodyParams) {
+async fn tesst(params: ExecBodyParams) {
     println!("tesst triggered!"); // NOTE : This test function intends to print (e.g., to stdout) at fn call
     botlog::debug(
         "tesst triggered!",

From 72d4cf6d70924d9d2908f9aa69332a7f3b48d6e8 Mon Sep 17 00:00:00 2001
From: haruyuumei <luzivotto.erick@gmail.com>
Date: Sun, 31 Mar 2024 14:37:50 -0300
Subject: [PATCH 07/21] Small changes on thisguy.rs

---
 src/custom/thisguy.rs | 86 ++++++++++++++++++++++++++++++++++---------
 1 file changed, 69 insertions(+), 17 deletions(-)

diff --git a/src/custom/thisguy.rs b/src/custom/thisguy.rs
index cf31b34..2a8e445 100644
--- a/src/custom/thisguy.rs
+++ b/src/custom/thisguy.rs
@@ -6,25 +6,42 @@ use rand::Rng;
 use std::sync::Arc;
 use tokio::time::{sleep, Duration};
 
-//use rand::Rng;
 
+//using the env file to get bot prefix
+use std::env;
+use dotenv::dotenv;
+
+//bot function
 async fn tsg(params: ExecBodyParams) {
-    if params.msg.message_text == String::from("anime")
-        || params.msg.message_text == String::from("Anime")
+
+    //Defining a var prefix to the prefix on the env file
+    dotenv().ok();
+    let prefix = env::var("prefix").unwrap();
+    /*  
+        defining a text with the prefix + the command name (idk how to get the command)
+        so for now i'm typing the command
+    */
+    let text = String::from(&prefix) + "This";
+    let text2 = String::from(&prefix) + "this";
+
+    //comparing the text sent with the text (prefix + command name)
+    if params.msg.message_text == text
+        || params.msg.message_text == text2
     {
-        let phrases: [String; 5] = [
-            "Aware oh no! Weebs...".to_string(),
-            "AYAYA I love anime Girls!!".to_string(),
-            "I love 2d Girls ILOST ".to_string(),
-            "UOOHHHHH!!! Anime Girlssss".to_string(),
-            "Anime girls u say? peepoShy ".to_string(),
+        let phrases: [String; 6] = [
+            "Clueless".to_string(),
+            "ICANT This guy....".to_string(),
+            "He is right tho".to_string(),
+            "KEKW true!".to_string(),
+            "OMEGALUL wth man...".to_string(),
+            "PepeLaugh El no sabe".to_string(),
         ];
 
         let r = rand::thread_rng().gen_range(0..=4);
         let a = phrases[r].clone();
 
         botlog::debug(
-            "Oh god I love anime Girls!!",
+            "This guy works!",
             Some("modules > thisguy()".to_string()),
             Some(&params.msg),
         );
@@ -39,16 +56,16 @@ async fn tsg(params: ExecBodyParams) {
             .await;
         sleep(Duration::from_secs_f64(0.5)).await;
     }else {
-        
+        println!("didn't type the proper command");
     }
 }
 
 pub async fn init(mgr: &Arc<ModulesManager>) {
     BotCommand {
         module: BotModule(String::from("thisguy")),
-        command: String::from("anime"),
-        alias: vec![String::from("Anime")],
-        exec_body: actions_util::asyncbox(tesst),
+        command: String::from("thisguy"),
+        alias: vec![String::from("Thisguy")],
+        exec_body: actions_util::asyncbox(test),
         help: String::from("test"),
         required_roles: vec![BotAdmin],
     }
@@ -65,11 +82,46 @@ pub async fn init(mgr: &Arc<ModulesManager>) {
     .await;
 }
 
-async fn tesst(params: ExecBodyParams) {
-    println!("tesst triggered!"); // NOTE : This test function intends to print (e.g., to stdout) at fn call
+
+async fn test(params: ExecBodyParams) {
+    println!("Test triggered!"); // NOTE : This test function intends to print (e.g., to stdout) at fn call
     botlog::debug(
-        "tesst triggered!",
+        "test triggered!",
         Some("modules > tesst()".to_string()),
         Some(&params.msg),
     );
 }
+
+
+// just testing this area, not working atm
+async fn replyer(params: ExecBodyParams)
+{
+    /*
+        check if the command message was a reply
+        get reply message parent
+        reply to the parent
+     */
+
+    //let reply_parent_message;
+    let reply_message: &String = &params.msg.message_text;
+    let my_reply:String = String::from("test");
+
+    //println!("{:?}",reply_parent_message);
+    println!("{}",reply_message);
+
+    botlog::debug(
+        "Oh god I love anime Girls!!",
+        Some("modules > thisguy()".to_string()),
+        Some(&params.msg),
+    );
+    let bot = Arc::clone(&params.bot);
+    let botlock = bot.read().await;  
+
+    // uses chat.say_in_reply_to() for the bot controls for messages
+    botlock
+        .botmgrs
+        .chat
+        .say_in_reply_to(&params.msg, my_reply, params.clone())
+        .await;
+    sleep(Duration::from_secs_f64(0.5)).await;
+}
\ No newline at end of file

From d972eb77266dedf9cdfae2189dd586699e4ca080 Mon Sep 17 00:00:00 2001
From: haruyuumei <luzivotto.erick@gmail.com>
Date: Tue, 2 Apr 2024 20:11:01 -0300
Subject: [PATCH 08/21] Thisguy working partially

not fully implemented reply to the reply
---
 src/custom/thisguy.rs | 38 ++------------------------------------
 1 file changed, 2 insertions(+), 36 deletions(-)

diff --git a/src/custom/thisguy.rs b/src/custom/thisguy.rs
index 2a8e445..b539b3e 100644
--- a/src/custom/thisguy.rs
+++ b/src/custom/thisguy.rs
@@ -6,12 +6,12 @@ use rand::Rng;
 use std::sync::Arc;
 use tokio::time::{sleep, Duration};
 
-
 //using the env file to get bot prefix
 use std::env;
 use dotenv::dotenv;
 
 //bot function
+
 async fn tsg(params: ExecBodyParams) {
 
     //Defining a var prefix to the prefix on the env file
@@ -56,7 +56,7 @@ async fn tsg(params: ExecBodyParams) {
             .await;
         sleep(Duration::from_secs_f64(0.5)).await;
     }else {
-        println!("didn't type the proper command");
+        //println!("didn't type the proper command");
     }
 }
 
@@ -91,37 +91,3 @@ async fn test(params: ExecBodyParams) {
         Some(&params.msg),
     );
 }
-
-
-// just testing this area, not working atm
-async fn replyer(params: ExecBodyParams)
-{
-    /*
-        check if the command message was a reply
-        get reply message parent
-        reply to the parent
-     */
-
-    //let reply_parent_message;
-    let reply_message: &String = &params.msg.message_text;
-    let my_reply:String = String::from("test");
-
-    //println!("{:?}",reply_parent_message);
-    println!("{}",reply_message);
-
-    botlog::debug(
-        "Oh god I love anime Girls!!",
-        Some("modules > thisguy()".to_string()),
-        Some(&params.msg),
-    );
-    let bot = Arc::clone(&params.bot);
-    let botlock = bot.read().await;  
-
-    // uses chat.say_in_reply_to() for the bot controls for messages
-    botlock
-        .botmgrs
-        .chat
-        .say_in_reply_to(&params.msg, my_reply, params.clone())
-        .await;
-    sleep(Duration::from_secs_f64(0.5)).await;
-}
\ No newline at end of file

From 7e04699b67c4191b7b4ca8107057f3b6c6b109ce Mon Sep 17 00:00:00 2001
From: haruyuumei <luzivotto.erick@gmail.com>
Date: Wed, 3 Apr 2024 10:25:24 -0300
Subject: [PATCH 09/21] making changes

---
 src/custom/thisguy.rs | 104 ++++++++++++++----------------------------
 1 file changed, 35 insertions(+), 69 deletions(-)

diff --git a/src/custom/thisguy.rs b/src/custom/thisguy.rs
index b539b3e..0ca6de8 100644
--- a/src/custom/thisguy.rs
+++ b/src/custom/thisguy.rs
@@ -1,63 +1,44 @@
 use crate::core::bot_actions::*;
+use crate::core::botinstance::Channel;
 use crate::core::botlog;
-use crate::core::botmodules::{BotActionTrait, BotCommand, BotModule, Listener, ModulesManager};
+use crate::core::botmodules::{BotActionTrait, BotCommand, BotModule, ModulesManager};
 use crate::core::identity::UserRole::*;
 use rand::Rng;
 use std::sync::Arc;
 use tokio::time::{sleep, Duration};
-
-//using the env file to get bot prefix
-use std::env;
-use dotenv::dotenv;
-
-//bot function
+const OF_CMD_CHANNEL:Channel = Channel(String::new());
 
 async fn tsg(params: ExecBodyParams) {
 
-    //Defining a var prefix to the prefix on the env file
-    dotenv().ok();
-    let prefix = env::var("prefix").unwrap();
-    /*  
-        defining a text with the prefix + the command name (idk how to get the command)
-        so for now i'm typing the command
-    */
-    let text = String::from(&prefix) + "This";
-    let text2 = String::from(&prefix) + "this";
+    let phrases: [String; 6] = [
+        "Clueless ".to_string(),
+        "ICANT This guy....".to_string(),
+        "He is right tho".to_string(),
+        "KEKW true!".to_string(),
+        "OMEGALUL wth man...".to_string(),
+        "PepeLaugh El no sabe".to_string(),
+    ];
 
-    //comparing the text sent with the text (prefix + command name)
-    if params.msg.message_text == text
-        || params.msg.message_text == text2
-    {
-        let phrases: [String; 6] = [
-            "Clueless".to_string(),
-            "ICANT This guy....".to_string(),
-            "He is right tho".to_string(),
-            "KEKW true!".to_string(),
-            "OMEGALUL wth man...".to_string(),
-            "PepeLaugh El no sabe".to_string(),
-        ];
+    let r = rand::thread_rng().gen_range(0..=4);
+    let a = phrases[r].clone();
 
-        let r = rand::thread_rng().gen_range(0..=4);
-        let a = phrases[r].clone();
+    let test = params.get_parent_module();
 
-        botlog::debug(
-            "This guy works!",
-            Some("modules > thisguy()".to_string()),
-            Some(&params.msg),
-        );
-        let bot = Arc::clone(&params.bot);
-        let botlock = bot.read().await;
+    botlog::debug(
+        "This guy works!",
+        Some("modules > thisguy()".to_string()),
+        Some(&params.msg),
+    );
+    let bot = Arc::clone(&params.bot);
+    let botlock = bot.read().await;
 
-        // uses chat.say_in_reply_to() for the bot controls for messages
-        botlock
-            .botmgrs
-            .chat
-            .say_in_reply_to(&params.msg, a, params.clone())
-            .await;
-        sleep(Duration::from_secs_f64(0.5)).await;
-    }else {
-        //println!("didn't type the proper command");
-    }
+    // uses chat.say_in_reply_to() for the bot controls for messages
+    botlock
+        .botmgrs
+        .chat
+        .say_in_reply_to(&params.msg, a, params.clone())
+        .await;
+    sleep(Duration::from_secs_f64(0.5)).await;
 }
 
 pub async fn init(mgr: &Arc<ModulesManager>) {
@@ -65,29 +46,14 @@ pub async fn init(mgr: &Arc<ModulesManager>) {
         module: BotModule(String::from("thisguy")),
         command: String::from("thisguy"),
         alias: vec![String::from("Thisguy")],
-        exec_body: actions_util::asyncbox(test),
-        help: String::from("test"),
-        required_roles: vec![BotAdmin],
-    }
-    .add_to_modmgr(Arc::clone(&mgr))
-    .await;
-
-    Listener {
-        module: BotModule(String::from("thisguy")),
-        name: String::from("This Guy Listener"),
         exec_body: actions_util::asyncbox(tsg),
-        help: String::from(""),
+        help: String::from("test"),
+        required_roles: vec![
+            BotAdmin,
+            Mod(OF_CMD_CHANNEL),
+            Broadcaster
+            ],
     }
     .add_to_modmgr(Arc::clone(&mgr))
     .await;
-}
-
-
-async fn test(params: ExecBodyParams) {
-    println!("Test triggered!"); // NOTE : This test function intends to print (e.g., to stdout) at fn call
-    botlog::debug(
-        "test triggered!",
-        Some("modules > tesst()".to_string()),
-        Some(&params.msg),
-    );
-}
+}
\ No newline at end of file

From b43d6f8159cf9e107f44f8f648e2673dcc593dba Mon Sep 17 00:00:00 2001
From: haruyuumei <luzivotto.erick@gmail.com>
Date: Wed, 3 Apr 2024 10:26:14 -0300
Subject: [PATCH 10/21] Rewriten the code

working with command instead listener
---
 src/custom/thisguy.rs | 2 --
 1 file changed, 2 deletions(-)

diff --git a/src/custom/thisguy.rs b/src/custom/thisguy.rs
index 0ca6de8..052f601 100644
--- a/src/custom/thisguy.rs
+++ b/src/custom/thisguy.rs
@@ -22,8 +22,6 @@ async fn tsg(params: ExecBodyParams) {
     let r = rand::thread_rng().gen_range(0..=4);
     let a = phrases[r].clone();
 
-    let test = params.get_parent_module();
-
     botlog::debug(
         "This guy works!",
         Some("modules > thisguy()".to_string()),

From dd2670c7664410c4e31ddc4cbd01675523823fd3 Mon Sep 17 00:00:00 2001
From: WoodpeckerCI <woodpecker@flake.sh>
Date: Tue, 9 Apr 2024 01:02:55 +0000
Subject: [PATCH 11/21] flake.lock: update

---
 flake.lock | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/flake.lock b/flake.lock
index cf7dd31..7da4bc6 100644
--- a/flake.lock
+++ b/flake.lock
@@ -109,11 +109,11 @@
     },
     "nixpkgs_2": {
       "locked": {
-        "lastModified": 1712543224,
-        "narHash": "sha256-9RSfZL1TKYdGxZwgDxwtBtsKMGR4Zgn+DAnF9s71/lU=",
+        "lastModified": 1712573573,
+        "narHash": "sha256-xxon7WwNm4/EadMKg1eF40/5s0O78nXUy2ILZt6vT7E=",
         "owner": "NixOS",
         "repo": "nixpkgs",
-        "rev": "b0dab7cc34ef4d8a1b2de36178da801090bcb271",
+        "rev": "0d28066770464d19d637f6e8e42e8688420b6ac6",
         "type": "github"
       },
       "original": {

From 74d938751fd44234057a1882e1850a348f83d7fd Mon Sep 17 00:00:00 2001
From: ModulatingForce <116608425+modulatingforce@users.noreply.github.com>
Date: Tue, 9 Apr 2024 10:00:01 -0400
Subject: [PATCH 12/21] cucked promote alt

---
 src/core/identity.rs | 96 +++++++++++++++++++++++++++++++++++++-------
 1 file changed, 81 insertions(+), 15 deletions(-)

diff --git a/src/core/identity.rs b/src/core/identity.rs
index 726bbdf..a6e623d 100644
--- a/src/core/identity.rs
+++ b/src/core/identity.rs
@@ -8,6 +8,7 @@ use std::sync::Arc;
 
 use tokio::sync::RwLock;
 
+use tokio::time::{sleep,Duration};
 use twitch_irc::message::PrivmsgMessage;
 
 use casual_logger::Log;
@@ -59,7 +60,10 @@ pub async fn init(mgr: Arc<ModulesManager>) {
     let tempb = BotCommand {
         module: BotModule(String::from("identity")),
         command: String::from("promote"), // command call name
-        alias: vec![],                    // String of alternative names
+        alias: vec![
+            "cucked".to_string(),
+            "cuck".to_string(),
+        ],                    // String of alternative names
         exec_body: actions_util::asyncbox(cmd_promote),
         help: String::from("promote"),
         required_roles: vec![
@@ -164,7 +168,7 @@ async fn cmd_promote(params : ExecBodyParams) {
 
     let mut argv = params.msg.message_text.split(' ');
 
-    argv.next(); // Skip the command name
+    let cmdname = argv.next(); // Skip the command name
 
     let arg1 = argv.next();
 
@@ -202,7 +206,7 @@ async fn cmd_promote(params : ExecBodyParams) {
     // [x] 1. Get trgusr (regardless of -admin flag)
 
     // let targetusr = if arg1 == Some("-admin") { arg2 } else { arg1 };
-    let targetusr = if 
+    let mut targetusr = if 
             arg1 == Some("-admin") 
             || arg1 == Some("-v") 
             || arg1 == Some("-vip") 
@@ -222,6 +226,50 @@ async fn cmd_promote(params : ExecBodyParams) {
             }
             else { arg1 };
 
+
+    // [x] Check if target is an existing user
+    targetusr = if let Some(chkusr) = targetusr {
+        match twitch_irc::validate::validate_login(chkusr.to_lowercase().as_str()) {
+            Ok(_) => Some(chkusr),
+            Err(_) => None,
+        }
+    } else { None } ;
+
+
+    // [x] Check if cmd passed is cucked, then go through special cucked handling
+    if let Some(cmd_to_check) = cmdname {
+        if cmd_to_check.to_lowercase() == String::from(botlock.get_prefix()) + "cucked" 
+        || cmd_to_check.to_lowercase() == String::from(botlock.get_prefix()) + "cuck"
+        {
+
+            let idlock = botlock.botmgrs.identity.read().await;
+            let senderroles = idlock.getspecialuserroles(sendername.clone(), Some(Channel(targetchnl.to_lowercase()))).await;
+
+            if senderroles.contains(&UserRole::BotAdmin) && targetusr.is_none() {
+                targetusr = Some(sendername.as_str())
+            }
+
+            botlock.botmgrs.chat.send_botmsg(super::chat::BotMsgType::Notif(
+                "uuh ".to_string()
+                ),
+            params.clone(),
+            ).await;
+
+            sleep(Duration::from_secs_f64(1.0)).await;
+
+            
+            botlock.botmgrs.chat.send_botmsg(super::chat::BotMsgType::Notif(
+                "... ".to_string()
+                ),
+            params.clone(),
+            ).await;
+
+            sleep(Duration::from_secs_f64(2.0)).await;
+
+        }
+    }
+
+
     // [x] 2. promote trguser
 
     // [x] Get a required lock first
@@ -272,14 +320,23 @@ async fn cmd_promote(params : ExecBodyParams) {
     // [x] 3. Output resulting change
 
     let outmsg = match rslt {
-        ChangeResult::Success(a) => {
-            format!("o7 Successfully promoted : {a}")
+        ChangeResult::Success(rsltstr) => {
+            format!("o7 Successfully promoted {} : {}",
+            targetusr.unwrap().to_string(),
+            rsltstr
+            )
         }
-        ChangeResult::Failed(a) => {
-            format!("PoroSad failed to promote : {a}")
+        ChangeResult::Failed(rsltstr) => {
+            format!("PoroSad failed to promote {} : {}",
+            targetusr.unwrap().to_string(),
+            rsltstr
+            )
         }
-        ChangeResult::NoChange(a) => {
-            format!("uuh No Promotion Change : {a}")
+        ChangeResult::NoChange(rsltstr) => {
+            format!("uuh No Promotion Change {} : {}",
+            targetusr.unwrap().to_string(),
+            rsltstr
+            )
         }
     };
 
@@ -499,14 +556,23 @@ async fn cmd_demote(params : ExecBodyParams) {
      */
 
     let outmsg = match rslt {
-        ChangeResult::Success(a) => {
-            format!("o7 Successfully demoted : {a}")
+        ChangeResult::Success(rsltstr) => {
+            format!("o7 Successfully demoted {} : {}",
+            targetusr.unwrap().to_string(),
+            rsltstr
+            )
         }
-        ChangeResult::Failed(a) => {
-            format!("PoroSad failed to demote : {a}")
+        ChangeResult::Failed(rsltstr) => {
+            format!("PoroSad failed to demote {} : {}",
+            targetusr.unwrap().to_string(),
+            rsltstr
+            )
         }
-        ChangeResult::NoChange(a) => {
-            format!("uuh No Demotion Change : {a}")
+        ChangeResult::NoChange(rsltstr) => {
+            format!("uuh No Demotion Change {} : {}",
+            targetusr.unwrap().to_string(),
+            rsltstr
+            )
         }
     };
 

From 16c6b0eebb3670fd398c4f8eb0d085faa2eb6b69 Mon Sep 17 00:00:00 2001
From: ModulatingForce <116608425+modulatingforce@users.noreply.github.com>
Date: Tue, 9 Apr 2024 12:32:02 -0400
Subject: [PATCH 13/21] self-invoking identity methods

---
 src/core/identity.rs | 27 +++++++++++++++++++--------
 1 file changed, 19 insertions(+), 8 deletions(-)

diff --git a/src/core/identity.rs b/src/core/identity.rs
index a6e623d..59f6eed 100644
--- a/src/core/identity.rs
+++ b/src/core/identity.rs
@@ -255,16 +255,16 @@ async fn cmd_promote(params : ExecBodyParams) {
             params.clone(),
             ).await;
 
-            sleep(Duration::from_secs_f64(1.0)).await;
+            sleep(Duration::from_secs_f64(2.0)).await;
 
             
             botlock.botmgrs.chat.send_botmsg(super::chat::BotMsgType::Notif(
-                "... ".to_string()
+                "... chatter getting cucked ...".to_string()
                 ),
             params.clone(),
             ).await;
 
-            sleep(Duration::from_secs_f64(2.0)).await;
+            sleep(Duration::from_secs_f64(1.0)).await;
 
         }
     }
@@ -608,6 +608,8 @@ async fn getroles(params : ExecBodyParams) {
 
      */
 
+    let sendername = params.msg.clone().sender.name;
+
 
     let mut argv = params.msg.message_text.split(' ');
 
@@ -615,11 +617,17 @@ async fn getroles(params : ExecBodyParams) {
 
     let arg1 = argv.next();
 
-    let targetuser = match arg1 {
-        None => return, // exit if no arguments
+    let mut targetuser = match arg1 {
+        // None => return, // exit if no arguments
+        None => sendername.as_str(), // self-invoke in this case
         Some(arg) => arg,
     };
 
+    targetuser = match twitch_irc::validate::validate_login(targetuser.to_lowercase().as_str()) {
+        Ok(_) => targetuser,
+        Err(_) => sendername.as_str(), // self-invoke in this case
+    };
+
     let arg2 = argv.next();
 
     let targetchnl = arg2;
@@ -703,7 +711,9 @@ async fn getroles(params : ExecBodyParams) {
             params.msg.channel_login.to_lowercase(),
         ))) || sproles.contains(&UserRole::BotAdmin)
         {
-            outmsg += format!("Target chatter's user roles are : {:?}", sproles).as_str();
+            // targetuser
+            // outmsg += format!("Target chatter's user roles are : {:?}", sproles).as_str();
+            outmsg += format!("{}'s user roles are : {:?}", targetuser, sproles).as_str();
         }
         outmsg
     } else if sproles.contains(&UserRole::Mod(Channel(
@@ -712,9 +722,10 @@ async fn getroles(params : ExecBodyParams) {
         params.msg.channel_login.to_lowercase(),
     ))) || sproles.contains(&UserRole::BotAdmin)
     {
-        format!("Target chatter's user roles are : {:?}", sproles)
+        // format!("Target chatter's user roles are : {:?}", sproles)
+        format!("{}'s user roles are : {:?}", targetuser, sproles)
     } else {
-        "Target chatter has no special roles LULE ".to_string()
+        format!("{} has no special roles LULE ",targetuser)
     };
 
     botlog::debug(

From dfb37717b38cec08ad96faad8454d7dd81852ef7 Mon Sep 17 00:00:00 2001
From: ModulatingForce <116608425+modulatingforce@users.noreply.github.com>
Date: Tue, 9 Apr 2024 12:36:46 -0400
Subject: [PATCH 14/21] clippy

---
 src/core/identity.rs | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/src/core/identity.rs b/src/core/identity.rs
index 59f6eed..0e092e0 100644
--- a/src/core/identity.rs
+++ b/src/core/identity.rs
@@ -322,19 +322,19 @@ async fn cmd_promote(params : ExecBodyParams) {
     let outmsg = match rslt {
         ChangeResult::Success(rsltstr) => {
             format!("o7 Successfully promoted {} : {}",
-            targetusr.unwrap().to_string(),
+            targetusr.unwrap(),
             rsltstr
             )
         }
         ChangeResult::Failed(rsltstr) => {
             format!("PoroSad failed to promote {} : {}",
-            targetusr.unwrap().to_string(),
+            targetusr.unwrap(),
             rsltstr
             )
         }
         ChangeResult::NoChange(rsltstr) => {
             format!("uuh No Promotion Change {} : {}",
-            targetusr.unwrap().to_string(),
+            targetusr.unwrap(),
             rsltstr
             )
         }
@@ -558,19 +558,19 @@ async fn cmd_demote(params : ExecBodyParams) {
     let outmsg = match rslt {
         ChangeResult::Success(rsltstr) => {
             format!("o7 Successfully demoted {} : {}",
-            targetusr.unwrap().to_string(),
+            targetusr.unwrap(),
             rsltstr
             )
         }
         ChangeResult::Failed(rsltstr) => {
             format!("PoroSad failed to demote {} : {}",
-            targetusr.unwrap().to_string(),
+            targetusr.unwrap(),
             rsltstr
             )
         }
         ChangeResult::NoChange(rsltstr) => {
             format!("uuh No Demotion Change {} : {}",
-            targetusr.unwrap().to_string(),
+            targetusr.unwrap(),
             rsltstr
             )
         }

From 4b849cfed64984355a8141bb245db3d7c5ac378a Mon Sep 17 00:00:00 2001
From: ModulatingForce <116608425+modulatingforce@users.noreply.github.com>
Date: Tue, 9 Apr 2024 12:51:53 -0400
Subject: [PATCH 15/21] comments cleanup

---
 src/core/identity.rs | 12 ------------
 1 file changed, 12 deletions(-)

diff --git a/src/core/identity.rs b/src/core/identity.rs
index 42bc4c7..effb317 100644
--- a/src/core/identity.rs
+++ b/src/core/identity.rs
@@ -15,21 +15,9 @@ use dotenv::dotenv;
 use std::env;
 
 fn adminvector() -> Vec<String> {
-    // vec![String::from("ModulatingForce")]
-    // //vec![]
     dotenv().ok();
     let mut admins = Vec::new();
 
-    // for admin in env::var("bot_admins").unwrap().split(',') {
-    //     admins.push(String::from(admin))
-    // }
-
-    // 03.17 - Forcen - Suggesting below instead : 
-    /*
-        - this will push only if env::var() returns Ok() ; 
-            otherwise (like in Err(_)) do nothing
-     */
-
     if let Ok(value) = env::var("bot_admins") {
         for admin in value.split(',') {
             admins.push(String::from(admin))        

From f86f48178d1a522b1d0f1c89133bb394450221e7 Mon Sep 17 00:00:00 2001
From: notohh <github@notohh.dev>
Date: Tue, 9 Apr 2024 13:27:25 -0400
Subject: [PATCH 16/21] ci: fix branch naming

---
 .woodpecker/cargo-checks.yml | 2 +-
 .woodpecker/flake-update.yml | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/.woodpecker/cargo-checks.yml b/.woodpecker/cargo-checks.yml
index 1d698f2..fa5ecae 100644
--- a/.woodpecker/cargo-checks.yml
+++ b/.woodpecker/cargo-checks.yml
@@ -1,5 +1,5 @@
 when:
-  branch: main
+  branch: master
   event: [push, pull_request]
   path:
     include:
diff --git a/.woodpecker/flake-update.yml b/.woodpecker/flake-update.yml
index 56c672a..37d88de 100644
--- a/.woodpecker/flake-update.yml
+++ b/.woodpecker/flake-update.yml
@@ -37,7 +37,7 @@ steps:
       owner: ${CI_REPO_OWNER}
       repo: ${CI_REPO_NAME}
       branch: flake-lock-update
-      base_branch: main
+      base_branch: master
       pr_title: "flake.lock: update"
       pr_body: PR automatically created by Woodpecker CI
       close_pr_if_empty: true

From 7f49693a942366a9efe05215e16629ae1b872b58 Mon Sep 17 00:00:00 2001
From: ModulatingForce <116608425+modulatingforce@users.noreply.github.com>
Date: Tue, 9 Apr 2024 13:47:06 -0400
Subject: [PATCH 17/21] clippy

---
 src/core/identity.rs | 3 ---
 1 file changed, 3 deletions(-)

diff --git a/src/core/identity.rs b/src/core/identity.rs
index 5f7fac1..61c09dc 100644
--- a/src/core/identity.rs
+++ b/src/core/identity.rs
@@ -21,9 +21,6 @@ use crate::core::botmodules::{BotActionTrait, BotCommand, BotModule, ModulesMana
 use dotenv::dotenv;
 use std::env;
 
-use dotenv::dotenv;
-use std::env;
-
 fn adminvector() -> Vec<String> {
     dotenv().ok();
     let mut admins = Vec::new();

From 55aeaa7fc15c124ec2d0923aa5a547125bda0452 Mon Sep 17 00:00:00 2001
From: haruyuumei <luzivotto.erick@gmail.com>
Date: Tue, 9 Apr 2024 16:22:11 -0300
Subject: [PATCH 18/21] changed reply message on thisguy

---
 src/custom/thisguy.rs | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/src/custom/thisguy.rs b/src/custom/thisguy.rs
index 052f601..8616580 100644
--- a/src/custom/thisguy.rs
+++ b/src/custom/thisguy.rs
@@ -4,6 +4,7 @@ use crate::core::botlog;
 use crate::core::botmodules::{BotActionTrait, BotCommand, BotModule, ModulesManager};
 use crate::core::identity::UserRole::*;
 use rand::Rng;
+use twitch_irc::message::ReplyToMessage;
 use std::sync::Arc;
 use tokio::time::{sleep, Duration};
 const OF_CMD_CHANNEL:Channel = Channel(String::new());
@@ -34,7 +35,11 @@ async fn tsg(params: ExecBodyParams) {
     botlock
         .botmgrs
         .chat
-        .say_in_reply_to(&params.msg, a, params.clone())
+        .say_in_reply(
+            Channel(params.clone().msg.channel_login().to_string()),
+             a,
+              params.clone()
+            )
         .await;
     sleep(Duration::from_secs_f64(0.5)).await;
 }

From e41f7b0524c19ebf321bc3455125cddd333e7214 Mon Sep 17 00:00:00 2001
From: haruyuumei <luzivotto.erick@gmail.com>
Date: Tue, 9 Apr 2024 16:44:58 -0300
Subject: [PATCH 19/21] warning changed

---
 src/custom/thisguy.rs | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/custom/thisguy.rs b/src/custom/thisguy.rs
index 8616580..cc53129 100644
--- a/src/custom/thisguy.rs
+++ b/src/custom/thisguy.rs
@@ -57,6 +57,6 @@ pub async fn init(mgr: &Arc<ModulesManager>) {
             Broadcaster
             ],
     }
-    .add_to_modmgr(Arc::clone(&mgr))
+    .add_to_modmgr(Arc::clone(mgr))
     .await;
 }
\ No newline at end of file

From ce677d2deb7005491c83ce12002e4e733e5099cf Mon Sep 17 00:00:00 2001
From: WoodpeckerCI <woodpecker@flake.sh>
Date: Wed, 10 Apr 2024 01:04:56 +0000
Subject: [PATCH 20/21] flake.lock: update

---
 flake.lock | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/flake.lock b/flake.lock
index cf7dd31..176636f 100644
--- a/flake.lock
+++ b/flake.lock
@@ -109,11 +109,11 @@
     },
     "nixpkgs_2": {
       "locked": {
-        "lastModified": 1712543224,
-        "narHash": "sha256-9RSfZL1TKYdGxZwgDxwtBtsKMGR4Zgn+DAnF9s71/lU=",
+        "lastModified": 1712666087,
+        "narHash": "sha256-WwjUkWsjlU8iUImbivlYxNyMB1L5YVqE8QotQdL9jWc=",
         "owner": "NixOS",
         "repo": "nixpkgs",
-        "rev": "b0dab7cc34ef4d8a1b2de36178da801090bcb271",
+        "rev": "a76c4553d7e741e17f289224eda135423de0491d",
         "type": "github"
       },
       "original": {

From 1dc157087ef3a69a1ff867c62a0c2ba6acbb08e7 Mon Sep 17 00:00:00 2001
From: WoodpeckerCI <woodpecker@flake.sh>
Date: Fri, 12 Apr 2024 01:01:06 +0000
Subject: [PATCH 21/21] flake.lock: update

---
 flake.lock | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/flake.lock b/flake.lock
index 176636f..1c4cd38 100644
--- a/flake.lock
+++ b/flake.lock
@@ -109,11 +109,11 @@
     },
     "nixpkgs_2": {
       "locked": {
-        "lastModified": 1712666087,
-        "narHash": "sha256-WwjUkWsjlU8iUImbivlYxNyMB1L5YVqE8QotQdL9jWc=",
+        "lastModified": 1712849433,
+        "narHash": "sha256-flQtf/ZPJgkLY/So3Fd+dGilw2DKIsiwgMEn7BbBHL0=",
         "owner": "NixOS",
         "repo": "nixpkgs",
-        "rev": "a76c4553d7e741e17f289224eda135423de0491d",
+        "rev": "f173d0881eff3b21ebb29a2ef8bedbc106c86ea5",
         "type": "github"
       },
       "original": {