diff options
author | Julien Dessaux | 2010-02-04 20:55:54 +0100 |
---|---|---|
committer | Julien Dessaux | 2010-02-04 20:55:54 +0100 |
commit | 53870767c32f61f756861d7bf18b5a55cd45a2e2 (patch) | |
tree | 2cb6b79ecaa039f472a220b26ce2af44d52b488c /Plugins | |
parent | Implemented unregisterCommand. (diff) | |
download | hsbot-53870767c32f61f756861d7bf18b5a55cd45a2e2.tar.gz hsbot-53870767c32f61f756861d7bf18b5a55cd45a2e2.tar.bz2 hsbot-53870767c32f61f756861d7bf18b5a55cd45a2e2.zip |
Rewrote command handling, added the Quote module and cleaned input handling.
Diffstat (limited to 'Plugins')
-rw-r--r-- | Plugins/Quote.hs | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/Plugins/Quote.hs b/Plugins/Quote.hs new file mode 100644 index 0000000..6547cd1 --- /dev/null +++ b/Plugins/Quote.hs @@ -0,0 +1,47 @@ +module Plugins.Quote + ( mainQuote + ) where + +import Control.Concurrent.Chan +import Control.Monad.State +import System.Time (ClockTime) + +import Hsbot.Core +import Hsbot.Types +import Hsbot.Utils + +-- | A quote object +data Quote = Quote + { quoter :: String + , quote :: [String] + , quoteTime :: ClockTime + , votes :: Int + } deriving (Show) + +-- | A QuoteBot state +type QuoteDB = [Quote] + +-- | The QuoteBot monad +type QuoteBot a = StateT QuoteDB IO a + +-- | The main function of the Quote module +mainQuote :: Chan BotMsg -> Chan BotMsg -> IO () +mainQuote serverChan chan = do + writeChan serverChan $ InternalCmd $ IntCmd "REGISTER COMMAND quote Quote" emptyMsg + loop + where + loop = do + input <- readChan chan + eval input + loop + eval :: BotMsg -> IO () + eval (InternalCmd intCmd) = do + let command' = words $ internalCommand intCmd + case command' !! 0 of + "runCommand" -> case (command' !! 1) of + "quote" -> writeChan serverChan $ OutputMsg $ internalCommandMsg intCmd + _ -> trace $ show command' -- TODO : help message + _ -> trace $ show command' + eval (InputMsg msg) = return () + eval _ = return () + |