diff --git a/src/custom/text_mods.rs b/src/custom/text_mods.rs
index 9292db7..8960476 100644
--- a/src/custom/text_mods.rs
+++ b/src/custom/text_mods.rs
@@ -1,5 +1,7 @@
 use std::collections::HashMap;
 use std::sync::Arc;
+use rand::{thread_rng, Rng};
+
 use crate::core::bot_actions::{actions_util, ExecBodyParams};
 use crate::core::botinstance::Channel;
 use crate::core::botmodules::{BotActionTrait, BotCommand, BotModule, Listener, ModulesManager};
@@ -36,8 +38,66 @@ pub async fn init(mgr: Arc<ModulesManager>) {
         help:String::from("Forsen helper"),
     };
     forsen_listener.add_to_modmgr(Arc::clone(&mgr)).await;
+
+
+    let butt = BotCommand{
+        module:BotModule(String::from("ButtModule")),
+        command:String::from("butt"),
+        alias:vec![],
+        exec_body:actions_util::asyncbox(butt),
+        help:String::from("butt helper"),
+        required_roles:vec![
+            BotAdmin,
+            Broadcaster,
+            Mod(OF_CMD_CHANNEL),
+        ]
+    };
+    butt.add_to_modmgr(Arc::clone(&mgr)).await;
+
 }
 
+    async fn butt(params : ExecBodyParams)
+    {   
+        //getting User message
+        let mut userm = usermsg(&params);
+
+        //choose a random word from the user phrase
+        let w = thread_rng().gen_range(1..userm.len());
+
+        //change the random word to butt :pepepains
+        userm.insert(w, String::from("Butt"));
+
+
+        let mut bot_reply = String::new();
+    
+        for index in 1..userm.len()
+        {
+            if let Some(word) = userm.get(&index)
+            {
+                bot_reply.push_str(word);
+                bot_reply.push(' ');
+            }
+        }
+
+        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, 
+            bot_reply,
+            params.clone()
+        ).await;
+
+    }
+
+
+
+
+
     async fn forsenforsen(params : ExecBodyParams)
     {
         if params.msg.message_text == "forsen" || params.msg.message_text == "Forsen"
@@ -59,27 +119,13 @@ pub async fn init(mgr: Arc<ModulesManager>) {
 
  async fn thereplyer(params : ExecBodyParams)
 {
-    //getting the user message
-    let sender_message = &params.msg.message_text;
-
-    //vector to store the words
-    let words: Vec<&str> = sender_message.split_whitespace().collect();
-
-    //using Hashmap to store the words
-    let mut index_words:HashMap<usize,String> = HashMap::new();
-
-    //adding to the hashmap each word
-    for(index,word) in words.iter().enumerate()
-    {
-        index_words.insert(index, String::from(*word));
-    }
-
+    let user: HashMap<usize,String> = usermsg(&params);
     //reply message
     let mut bot_reply = String::new();
     
-    for index in 1..index_words.len()
+    for index in 1..user.len()
     {
-        if let Some(word) = index_words.get(&index)
+        if let Some(word) = user.get(&index)
         {
             bot_reply.push_str(word);
             bot_reply.push(' ');
@@ -102,7 +148,25 @@ pub async fn init(mgr: Arc<ModulesManager>) {
 
 }
 
+pub fn usermsg(params : &ExecBodyParams) -> HashMap<usize,String>
+{
+    //getting the user message
+    let sender_message = &params.msg.message_text;
 
+    //vector to store the words
+    let words: Vec<&str> = sender_message.split_whitespace().collect();
+
+    //using Hashmap to store the words
+    let mut index_words:HashMap<usize,String> = HashMap::new();
+
+    //adding to the hashmap each word
+    for(index,word) in words.iter().enumerate()
+    {
+        index_words.insert(index, String::from(*word));
+    }
+    index_words
+
+}