diff --git a/src/metabase/events/metabot_lifecycle.clj b/src/metabase/events/metabot_lifecycle.clj
index 1b95901f4c25139e6968730d6e6be83bf7656612..ca915a4900d69ef8ef0d88cf05356c4e2b947e9d 100644
--- a/src/metabase/events/metabot_lifecycle.clj
+++ b/src/metabase/events/metabot_lifecycle.clj
@@ -27,12 +27,12 @@
   (when-let [{topic :topic object :item} metabot-lifecycle-event]
     (try
       ;; if someone updated our slack-token, or metabot was enabled/disabled then react accordingly
-      (let [{:keys [slack-token metabot-enabled]} object]
-        (cond
-          (and (contains? object :metabot-enabled)
-               (not= "true" metabot-enabled))      (metabot/stop-metabot!)
-          (and (contains? object :slack-token)
-               (seq slack-token))                  (metabot/start-metabot!)))
+      (when (and (contains? object :metabot-enabled) (contains? object :slack-token))
+        (let [{:keys [slack-token metabot-enabled]} object]
+          (cond
+            (nil? slack-token)      (metabot/stop-metabot!)
+            (not metabot-enabled)   (metabot/stop-metabot!)
+            :else                   (metabot/restart-metabot!))))
       (catch Throwable e
         (log/warn (format "Failed to process driver notifications event. %s" topic) e)))))
 
diff --git a/src/metabase/metabot.clj b/src/metabase/metabot.clj
index a27038422976b9a834b86f5f472ee46ffa1cc2d3..29fe66769120886c9d7cc8895a2dadab26966898 100644
--- a/src/metabase/metabot.clj
+++ b/src/metabase/metabot.clj
@@ -317,3 +317,12 @@
   (log/info "Stopping MetaBot...  🤖")
   (reset! websocket-monitor-thread-id nil)
   (disconnect-websocket!))
+
+(defn restart-metabot!
+  "Restart the Metabot listening process.
+   Used on settings changed"
+  []
+  (when @websocket-monitor-thread-id
+    (log/info "Metabot already running. Killing the previous WebSocket listener first.")
+    (stop-metabot!))
+  (start-metabot!))