From 29e84fb4a5fc81ebadfc4266b0b753eef44fa558 Mon Sep 17 00:00:00 2001 From: pb Date: Sun, 14 Mar 2010 15:32:50 +0000 Subject: git-svn-id: https://ssl.buetow.org/repos/hsbot/trunk@31 9f8f72e9-4bf4-416e-b76e-7d4203597157 --- Cmd.hs | 6 ++++++ Main.hs | 57 +++++++++++++++++++++++++-------------------------------- 2 files changed, 31 insertions(+), 32 deletions(-) diff --git a/Cmd.hs b/Cmd.hs index d4c617a..3e85e86 100644 --- a/Cmd.hs +++ b/Cmd.hs @@ -7,4 +7,10 @@ data Cmd = Cmd String String (State -> IO ()) instance Show Cmd where show (Cmd a b _) = a ++ " - " ++ b +cmdGet :: String -> [Cmd] -> Maybe Cmd +cmdGet x commands = + let command = [ (Cmd a b c) | (Cmd a b c) <- commands, a == x ] + in if length command == 0 + then Nothing + else Just (head command) diff --git a/Main.hs b/Main.hs index f550665..b3c6f7c 100644 --- a/Main.hs +++ b/Main.hs @@ -23,36 +23,29 @@ r = main dispatch :: Dispatch dispatch cmd sendMessage env@(Env state conf _) = - let (Cmd _ _ dispatchFunction) = getCmd ("!" ++ cmd) - in dispatchFunction state - where - getCmd x = - let command = [ (Cmd a b c) | (Cmd a b c) <- commands, a == x ] - in if length command == 0 - then getCmd "!i" - else head command - - 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 - + 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 _ _ dispatchFunction) -> dispatchFunction state + Nothing -> dispatch "i" sendMessage env -- cgit v1.2.3