diff --git a/src/system.clj b/src/system.clj index 4556c72..9e7a70c 100644 --- a/src/system.clj +++ b/src/system.clj @@ -2,7 +2,8 @@ ;; SPDX-FileCopyrightText: 2022 Sebastian Crane (ns system - (:require [clojure.data.json :as json] + (:require [irc] + [clojure.data.json :as json] [clj-yaml.core :as yaml])) (defn json-data-reader [key value] @@ -32,3 +33,30 @@ (with-open [datafile (clojure.java.io/reader f)] (yaml/parse-stream datafile)) (catch Exception e nil))) + +(defn system [] + {:config nil + :state nil + :irc nil}) + +(defn start [system] + (let [config (load-config "config.yaml") + state (atom (load-state (:data-file config))) + irc (irc/new-irc-connection state config)] + (irclj.core/join irc (get-in config [:irc :channel])) + {:config config + :state state + :irc irc})) + +(defn stop [system] + (do + (save-state + (get-in system [:config :data-file]) + (deref (:state system))) + (irclj.core/quit (system :irc)))) + +(defn restart [system-atom] + (do + (swap! system-atom stop) + (reset! system-atom (system)) + (swap! system-atom start)))