From 53870767c32f61f756861d7bf18b5a55cd45a2e2 Mon Sep 17 00:00:00 2001 From: Julien Dessaux Date: Thu, 4 Feb 2010 20:55:54 +0100 Subject: Rewrote command handling, added the Quote module and cleaned input handling. --- Plugins/Quote.hs | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 Plugins/Quote.hs (limited to 'Plugins/Quote.hs') 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 () + -- cgit v1.2.3