summaryrefslogtreecommitdiff
path: root/Main.hs
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 ()