diff --git a/bot/bot_app.py b/bot/bot_app.py
index 5806478..81c920c 100644
--- a/bot/bot_app.py
+++ b/bot/bot_app.py
@@ -4,6 +4,7 @@ import misskey
 from parsing import parse_notification
 from db_utils import get_or_create_user, add_pull, get_config, set_config
 from client import client_connection
+from response import generate_response
 
 # Initialize the Misskey client
 client = client_connection()
@@ -44,15 +45,49 @@ def stream_notifications():
                     instance = host if host else "local"
 
                     if instance in whitelisted_instances or instance == "local":
-                        note = notification.get("note", {}).get("text", "")
+                        note = notification.get("note", {})
+                        note_text = note.get("text", "")
+                        note_id = note.get("id")
                         notif_type = notification.get("type", "unknown")
 
+                        # We want the visibility to be related to the type that was received (so if
+                        # people don't want to dump a bunch of notes on home they don't have to)
+                        
+                        visibility = notification["note"]["visibility"]
+                        if visibility != "specified":
+                            visibility = "home"
+
                         print(f"📨 [{notif_type}] from @{username}@{instance}")
-                        print(f"💬 {note}")
+                        print(f"💬 {note_text}")
                         print("-" * 30)
 
-                        # 🧠 Send to the parser
-                        parse_notification(notification,client)
+                        
+                        # We get the type of notification to filter the ones that we actually want
+                        # to parse
+
+                        notif_type = notification.get("type")
+                        if notif_type in ('mention', 'reply'):
+                            # 🧠 Send to the parser
+                            parsed_command = parse_notification(notification,client)
+                            # Get the response
+                            response = generate_response(parsed_command)
+                            if isinstance(response, str):
+                                client.notes_create(
+                                    text=response,
+                                    reply_id=note_id,
+                                    visibility=visibility
+                                )
+                            elif response:
+                                client.notes_create(
+                                    text=response[0],
+                                    reply_id=note_id,
+                                    visibility=visibility,
+                                    file_ids=response[1]
+                                    #visible_user_ids=[] #todo: write actual visible users ids so pleromers can use the bot privately
+                                )
+                            
+
+                        
 
                     else:
                         print(f"⚠️ Blocked notification from untrusted instance: {host}")
@@ -70,7 +105,7 @@ def stream_notifications():
 
         except Exception as e:
             print(f"An exception has occured: {e}\n{traceback.format_exc()}")
-            time.sleep(5)
+            time.sleep(2)
 
 
 
diff --git a/bot/parsing.py b/bot/parsing.py
index c17a276..bbefe70 100644
--- a/bot/parsing.py
+++ b/bot/parsing.py
@@ -1,23 +1,11 @@
 import random, re
 import config
-from gacha_response import gacha_response
 
 def parse_notification(notification,client):
-    '''Oarses any notifications received by the bot and sends any commands to
+    '''Parses any notifications received by the bot and sends any commands to
     gacha_response()'''
 
-    # We get the type of notification to filter the ones that we actually want
-    # to parse
-
-    notif_type = notification.get("type")
-    if not notif_type in ('mention', 'reply'):
-        return  # Ignore anything that isn't a mention
-
-    # We want the visibility to be related to the type that was received (so if
-    # people don't want to dump a bunch of notes on home they don't have to)
-    visibility = notification["note"]["visibility"]
-    if visibility != "specified":
-        visibility = "home"
+ 
 
     # Get the full Activitypub ID of the user
     user = notification.get("user", {})
@@ -50,22 +38,4 @@ def parse_notification(notification,client):
     command = parts[0].lower() if parts else None
     arguments = parts[1:] if len(parts) > 1 else []
 
-    # TODO: move response generation to a different function
-    response = gacha_response(command.lower(),full_user, arguments, note_obj)
-    if not response:
-        return
-
-    if isinstance(response, str):
-        client.notes_create(
-            text=response,
-            reply_id=note_id,
-            visibility=visibility
-        )
-    else:
-        client.notes_create(
-            text=response[0],
-            reply_id=note_id,
-            visibility=visibility,
-            file_ids=response[1]
-            #visible_user_ids=[] #todo: write actual visible users ids so pleromers can use the bot privately
-        )
+    return [command,full_user, arguments, note_obj]
diff --git a/bot/gacha_response.py b/bot/response.py
similarity index 92%
rename from bot/gacha_response.py
rename to bot/response.py
index e703aff..2c58c43 100644
--- a/bot/gacha_response.py
+++ b/bot/response.py
@@ -26,11 +26,13 @@ def is_float(val):
         return False
 
 
-# TODO: See issue #3, separate command parsing from game logic.
-def gacha_response(command,full_user, arguments,note_obj):
-    '''Parses a given command with arguments, processes the game state and
+def generate_response(parsed_command):
+    
+    '''Given a command with arguments, processes the game state and
     returns a response'''
 
+    command, full_user, arguments, note_obj = parsed_command
+    
     if command == "roll":
         user_id = get_or_create_user(full_user)
         character_id, character_name, file_id, rarity = get_character()