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 (DispatchEnv state' conf dispatch) -- Shortcut r :: IO () r = main dispatch :: Dispatch dispatch cmd sendMessage env@(Env 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 ()