summaryrefslogtreecommitdiff
path: root/Plugins/Quote.hs
diff options
context:
space:
mode:
authorJulien Dessaux2010-02-04 21:05:37 +0100
committerJulien Dessaux2010-02-04 21:05:37 +0100
commitfd8d5faf5f4ab085b01316e15403779ca30cf3f9 (patch)
tree83dfae790dcb184d651567f06929fc69338733a9 /Plugins/Quote.hs
parentFixed some types' functions. (diff)
downloadhsbot-fd8d5faf5f4ab085b01316e15403779ca30cf3f9.tar.gz
hsbot-fd8d5faf5f4ab085b01316e15403779ca30cf3f9.tar.bz2
hsbot-fd8d5faf5f4ab085b01316e15403779ca30cf3f9.zip
Began a complete rewrite of command and plugin management.
Wrote a command routing statement, added an IrcPlugin monad.
Diffstat (limited to 'Plugins/Quote.hs')
-rw-r--r--Plugins/Quote.hs49
1 files changed, 30 insertions, 19 deletions
diff --git a/Plugins/Quote.hs b/Plugins/Quote.hs
index 6547cd1..4c6e22c 100644
--- a/Plugins/Quote.hs
+++ b/Plugins/Quote.hs
@@ -6,7 +6,7 @@ import Control.Concurrent.Chan
import Control.Monad.State
import System.Time (ClockTime)
-import Hsbot.Core
+import Hsbot.IRCPlugin
import Hsbot.Types
import Hsbot.Utils
@@ -24,24 +24,35 @@ type QuoteDB = [Quote]
-- | The QuoteBot monad
type QuoteBot a = StateT QuoteDB IO a
--- | The main function of the Quote module
+-- | The plugin's main entry point
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 ()
+ let plugin = PluginInstance "Quote" serverChan chan
+ (runStateT run plugin) `catch` (const $ return ((), plugin))
+ return ()
+
+-- | The IrcPlugin monad main function
+run :: IrcPlugin ()
+run = do
+ -- TODO : init quote handling (sqlite + structure to handle temporary stuff)
+ sendRegisterCommand "quote"
+ runPlugin
+ sendUnregisterCommand "quote"
+ -- TODO : send cancel messages for all temporary stuff
+
+runPlugin :: IrcPlugin ()
+runPlugin = forever $ do
+ msg <- readMsg
+ eval msg
+ where
+ eval :: BotMsg -> IrcPlugin ()
+ eval (InternalCmd intCmd) = do
+ case intCmdCmd intCmd of
+ "RUN" -> let stuff = words $ intCmdMsg intCmd
+ in case head stuff of
+ "quote" -> lift $ trace $ "Quote module has been invoked for: " ++ (show intCmd)
+ _ -> lift $ trace $ show intCmd -- TODO : help message
+ _ -> lift $ trace $ show intCmd
+ eval (InputMsg msg) = return ()
+ eval _ = return ()