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!))