forked from LibreGaming/matchbot
Compare commits
5 Commits
856432516c
...
6cce43f137
Author | SHA1 | Date |
---|---|---|
Sebastian Crane | 6cce43f137 | |
Sebastian Crane | 91cbdb69da | |
Sebastian Crane | fecd09c656 | |
Sebastian Crane | 0abd793fe7 | |
Sebastian Crane | 56094478db |
12
README.md
12
README.md
|
@ -66,18 +66,18 @@ Since `matchbot` uses Clojure's [tools.deps library](https://clojure.org/guides/
|
|||
You can create, start and stop an instance of the chatbot process with the functions in the `system` namespace:
|
||||
|
||||
``` clojure
|
||||
;; creating a new instance
|
||||
(def my-instance (atom (system/system)))
|
||||
;; creating a new instance - an empty Var
|
||||
(def my-instance nil)
|
||||
|
||||
;; starting the instance
|
||||
(swap! my-instance system/start)
|
||||
(alter-var-root #'my-instance system/start)
|
||||
|
||||
;; restarting the instance
|
||||
(system/restart my-instance)
|
||||
(system/restart #'my-instance)
|
||||
|
||||
;; stopping and resetting the instance
|
||||
(swap! my-instance stop)
|
||||
(reset! my-instance (system/system))
|
||||
(alter-var-root #'my-instance system/stop)
|
||||
(alter-var-root #'my-instance (constantly nil))
|
||||
```
|
||||
|
||||
Once you are familiar with nREPL, you can additionally use [tools.namespace.repl](https://github.com/clojure/tools.namespace) to make reevaluating (reloading) your changes easier:
|
||||
|
|
|
@ -6,21 +6,21 @@
|
|||
[clojure.data.json :as json]
|
||||
[clj-yaml.core :as yaml]))
|
||||
|
||||
(defn json-data-reader [key value]
|
||||
(if (= key :games)
|
||||
(into (empty value)
|
||||
(map #(hash-map (first %)
|
||||
(set (second %)))
|
||||
value))
|
||||
value))
|
||||
(defn setify-vals [x]
|
||||
(reduce #(assoc %1
|
||||
(first %2)
|
||||
(set (second %2)))
|
||||
{} x))
|
||||
|
||||
(defn process-json [x]
|
||||
(update x :games setify-vals))
|
||||
|
||||
(defn load-state [f]
|
||||
(try
|
||||
(with-open [datafile (clojure.java.io/reader f)]
|
||||
(json/read datafile
|
||||
:value-fn json-data-reader
|
||||
:key-fn keyword))
|
||||
(catch Exception e nil)))
|
||||
(process-json
|
||||
(try
|
||||
(with-open [datafile (clojure.java.io/reader f)]
|
||||
(json/read datafile :key-fn keyword))
|
||||
(catch Exception e nil))))
|
||||
|
||||
(defn save-state [f data]
|
||||
(try
|
||||
|
@ -34,12 +34,7 @@
|
|||
(yaml/parse-stream datafile))
|
||||
(catch Exception e nil)))
|
||||
|
||||
(defn system []
|
||||
{:config nil
|
||||
:state nil
|
||||
:irc nil})
|
||||
|
||||
(defn start [system]
|
||||
(defn start [_]
|
||||
(let [config (load-config "config.yaml")
|
||||
state (atom (load-state (:data-file config)))
|
||||
irc (irc/new-irc-connection state config)]
|
||||
|
@ -55,14 +50,12 @@
|
|||
(deref (:state system)))
|
||||
(irclj.core/quit (system :irc))))
|
||||
|
||||
(defn restart [system-atom]
|
||||
(defn restart [system-var]
|
||||
(do
|
||||
(swap! system-atom stop)
|
||||
(reset! system-atom (system))
|
||||
(swap! system-atom start)))
|
||||
(stop (deref system-var))
|
||||
(alter-var-root system-var start)))
|
||||
|
||||
(defn -main [& args]
|
||||
(let [main-system (atom (system/system))]
|
||||
(swap! main-system system/start)
|
||||
(let [main-system (system/start nil)]
|
||||
(.addShutdownHook (Runtime/getRuntime)
|
||||
(Thread. (partial swap! main-system stop)))))
|
||||
(Thread. #(stop main-system)))))
|
||||
|
|
Loading…
Reference in New Issue