diff --git a/src/bin/fun_bot.rs b/src/bin/fun_bot.rs
index de67fda..f7bc67f 100644
--- a/src/bin/fun_bot.rs
+++ b/src/bin/fun_bot.rs
@@ -49,7 +49,7 @@ pub mod funbot_objs {
     /// Create a Command Object
     fn create_cmd_test() -> Command {
     
-        let mut cmd = Command::new("remind besty".to_string(),"annytfYandere ".to_string());
+        let mut cmd = Command::new(vec!["remind besty".to_string()],"annytfYandere ".to_string());
 
         async fn execbody(bot:Arc<Bot>,message:ServerMessage) -> Result<String,String> {
             if let ServerMessage::Privmsg(msg) = message {
diff --git a/src/bin/simple_command_bot.rs b/src/bin/simple_command_bot.rs
index a6ec70e..934ddf7 100644
--- a/src/bin/simple_command_bot.rs
+++ b/src/bin/simple_command_bot.rs
@@ -29,7 +29,7 @@ pub async fn main() {
     let mut bot = Bot::new();
 
     /* 1. Create a new blank cmd */
-    let mut cmd = Command::new("test".to_string(),"".to_string());
+    let mut cmd = Command::new(vec!["test".to_string()],"".to_string());
 
     /* 2. Define an async fn callback execution */
     async fn execbody(bot:Arc<Bot>,message:ServerMessage) -> Result<String,String> {
diff --git a/src/bin/simple_module.rs b/src/bin/simple_module.rs
index 61d66e5..ae483c5 100644
--- a/src/bin/simple_module.rs
+++ b/src/bin/simple_module.rs
@@ -55,7 +55,7 @@ pub mod custom_mod {
 
     pub fn cmd_test() -> Command {
         /* 1. Create a new cmd */
-        let mut cmd = Command::new("test".to_string(),"".to_string());
+        let mut cmd = Command::new(vec!["test".to_string()],"".to_string());
 
         /* 2. Define exec callback  */
         async fn execbody(bot:Arc<Bot>,message:ServerMessage) -> Result<String,String> {
diff --git a/src/botcore/bot_objects.rs b/src/botcore/bot_objects.rs
index 9fb6985..a563d84 100644
--- a/src/botcore/bot_objects.rs
+++ b/src/botcore/bot_objects.rs
@@ -59,7 +59,7 @@ pub mod built_in_objects {
 
     fn create_disable_cmd() -> Command {
         /* 1. Create a new blank cmd */
-        let mut cmd = Command::new("disable".to_string(),"".to_string());
+        let mut cmd = Command::new(vec!["disable".to_string()],"".to_string());
 
         /* 2. Define an async fn callback execution */
         async fn execbody(bot:Arc<Bot>,message:ServerMessage) -> Result<String,String> {
@@ -88,7 +88,7 @@ pub mod built_in_objects {
 
     fn create_enable_cmd() -> Command {
         /* 1. Create a new blank cmd */
-        let mut cmd = Command::new("enable".to_string(),"".to_string());
+        let mut cmd = Command::new(vec!["enable".to_string()],"".to_string());
 
         /* 2. Define an async fn callback execution */
         async fn execbody(bot:Arc<Bot>,message:ServerMessage) -> Result<String,String> {
@@ -116,4 +116,51 @@ pub mod built_in_objects {
     }
 
 
+    /// adminonly command that grants a temporary role
+    fn create_iam_role_cmd() -> Command {
+        /* 1. Create a new blank cmd */
+        let mut cmd = Command::new(vec![
+            "I am ".to_string(), 
+            "I'm ".to_string()
+            ],"".to_string());
+
+        /* 2. Define an async fn callback execution */
+        async fn execbody(bot:Arc<Bot>,message:ServerMessage) -> Result<String,String> {
+            if let ServerMessage::Privmsg(msg) = message {
+                for (i,arg) in msg.message_text.split(" ").enumerate() {
+                    if i > 1 {
+                        // bot.disable_module(msg.channel_login.clone(), arg.to_string()).await;
+                        // #todo
+                        // if not dont have the badge or have a lower priviledge badge 
+                        // and they dont have an active guest badge, ths admin can be
+                        // recognzed wth that badge
+                        if arg == "mod" || arg == "moderator" {
+
+                        }
+                        if arg == "vip" {
+
+                        }
+                        if arg == "broadcaster" || arg == "strimmer" || arg == "streamer" {
+
+                        }
+                    }
+                }
+                let _ = bot.client.say_in_reply_to(&msg, String::from("Disabled!")).await ;
+            }
+            Result::Err("Not Valid message type".to_string()) 
+        }
+
+        /* 3. Set and Store the execution body using `async_box()`  */
+        cmd.set_exec_fn(asyncfn_box(execbody));
+
+        /* 4. optionally, remove admin only default flag */
+        cmd.set_admin_only(true);
+
+        // /* 5. optionally, set min badge*/
+        // cmd.set_min_badge(Badge::Moderator);
+        cmd
+        
+    } 
+
+
 }
\ No newline at end of file
diff --git a/src/botcore/bot_objects/command.rs b/src/botcore/bot_objects/command.rs
index 574a22e..9100df5 100644
--- a/src/botcore/bot_objects/command.rs
+++ b/src/botcore/bot_objects/command.rs
@@ -20,7 +20,7 @@ use super::ExecBody;
 #[derive(Clone)]
 pub struct Command
 {
-    command : String,
+    commands : Vec<String>,
     exec_fn : Arc<ExecBody>,
     min_badge : Badge,
     admin_only : bool,
@@ -38,13 +38,13 @@ impl Command
     /// if a blank prefix is given, the bot will look for the bot prefix instead
     /// 
     /// By default, the new command is admin_only
-    pub fn new(command:String,prefix:String) -> Command {
+    pub fn new(commands:Vec<String>,prefix:String) -> Command {
 
         async fn execbody(_:Arc<Bot>,_:ServerMessage) -> Result<String,String> 
         { Result::Ok("success".to_string()) }
 
         Command {
-            command ,
+            commands ,
             prefix ,
             exec_fn : Arc::new(asyncfn_box(execbody)),
             min_badge : Badge::Vip,
@@ -79,12 +79,28 @@ impl Command
                 } else { 
                     prefixed_cmd.push_str(&cmd.prefix); 
                 }
-                prefixed_cmd.push_str(&cmd.command);
-                return message.message_text.starts_with(prefixed_cmd.as_str())
+                for cmd_nm in &cmd.commands {
+                    prefixed_cmd.push_str(cmd_nm);
+                    if message.message_text.starts_with(prefixed_cmd.as_str()) {
+                        return true;
+                    }
+                };
+                return false;
         }
 
         
-        fn caller_badge_ok(cmd:&Command,_bot:Arc<Bot>,message:PrivmsgMessage) -> bool {
+        fn caller_badge_ok(cmd:&Command,bot:Arc<Bot>,message:PrivmsgMessage) -> bool {
+
+            // senders that are admins skip badge check if the command is adminonly
+            if cmd.admin_only && bot.get_admins().contains(&message.sender.login)  {
+                return true;
+            } ;
+
+            // adminonly commands will can only be ran by admins
+            if cmd.admin_only && bot.get_admins().contains(&message.sender.login) {
+                return false;
+            }
+
             for badge in message.badges {
                 
                 match cmd.min_badge {