blob: 58a7ca4b66e4ebf1e1e1ec2d09e9e51ada5331e3 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
module Main where
import System
import Cmd
import Conf
import Env
import IRC
import State
import Tools
main :: IO ()
main = do
let conf = makeConf
databaseFile <- get "databaseFile" conf
let state = stateLoad databaseFile
state' <- state -- Extract State from the IO Monad
ircConnect (Env state' conf dispatch)
-- Shortcut
r :: IO ()
r = main
dispatch :: Dispatch
dispatch cmd sendMessage env@(EnvWoDispatch state conf) =
let commands = [
Cmd "!h" "Prints help" printHelp,
Cmd "!i" "Prints infos" printInfos,
Cmd "!p" "Prints current state" printState,
Cmd "!s" "Stores current state to file" storeState,
Cmd "!q" "quits" quit
]
printHelp _ = printHelp' commands
where printHelp' = sendMessage . concat . showL
printInfos _ = do
sendMessage $ (envGet "name" env)
++ " " ++ (envGet "version" env)
++ " (try !h)"
printState = sendMessage . show
storeState state = do
sendMessage "Storing current state"
stateSave (envGet "databaseFile" env) state
quit state = do
sendMessage "Good bye"
stateSave (envGet "databaseFile" env) state
exitWith ExitSuccess
in case cmdGet ("!" ++ cmd) commands of
Just (Cmd _ _ cmdAction) -> cmdAction state
Nothing -> return ()
|