diff options
author | Julien Dessaux | 2010-05-25 21:54:33 +0200 |
---|---|---|
committer | Julien Dessaux | 2010-05-25 22:07:58 +0200 |
commit | 451564ef5b13302912080d58a9aee6ff0968f70e (patch) | |
tree | 482d14d297d90c2696f98af39cc0cf1712d90bdd /Hsbot/Irc/Core.hs | |
parent | Implemented update message handling in the bot's core. (diff) | |
download | hsbot-451564ef5b13302912080d58a9aee6ff0968f70e.tar.gz hsbot-451564ef5b13302912080d58a9aee6ff0968f70e.tar.bz2 hsbot-451564ef5b13302912080d58a9aee6ff0968f70e.zip |
Cleaned that ugly update message handling and added a reboot command to the ircbot.
Diffstat (limited to '')
-rw-r--r-- | Hsbot/Irc/Core.hs | 29 |
1 files changed, 22 insertions, 7 deletions
diff --git a/Hsbot/Irc/Core.hs b/Hsbot/Irc/Core.hs index 936ced6..b1aee02 100644 --- a/Hsbot/Irc/Core.hs +++ b/Hsbot/Irc/Core.hs @@ -57,7 +57,7 @@ startIrcbot config masterChan myChan = do putStrLn "[IrcBot] Spawning plugins..." ircBotState'' <- execStateT spawnIrcPlugins ircBotState' putStrLn "[IrcBot] Entering Core loop... " - _ <- (execStateT ircBotLoop ircBotState'') `catch` (\(_ :: IOException) -> return (ircBotState'')) + (evalStateT ircBotLoop ircBotState'') `catch` (\(_ :: IOException) -> return ()) return () --resumeIrcBot @@ -103,8 +103,11 @@ ircBotLoop = forever $ do InIrcMsg inIrcMsg -> dispatchMessage $ InIrcMsg inIrcMsg OutIrcMsg outIrcMsg -> sendThisMessage outIrcMsg IntIrcCmd intIrcCmd -> do - processInternalCommand $ IntIrcCmd intIrcCmd + reboot <- processInternalCommand $ IntIrcCmd intIrcCmd reportUpdate + if reboot + then processRebootCommand + else return () where sendThisMessage :: IrcMsg -> IrcBot () sendThisMessage outputMsg = do @@ -142,10 +145,22 @@ reportUpdate :: IrcBot () reportUpdate = do ircbot <- get let masterChan = ircBotMasterChan ircbot - msg = IntMsg $ Msg { msgType = "UPDATE" - , msgFrom = ircConfigName $ ircBotConfig ircbot - , msgTo = "CORE" - , msgCmd = show $ ircBotResumeData ircbot - } + msg = IntMsg $ Msg { msgType = "UPDATE" + , msgFrom = ircConfigName $ ircBotConfig ircbot + , msgTo = "CORE" + , msgStuff = show $ ircBotResumeData ircbot + } + liftIO $ writeChan masterChan msg + +-- | Process a reboot command +processRebootCommand :: IrcBot () +processRebootCommand = do + ircbot <- get + let masterChan = ircBotMasterChan ircbot + msg = IntMsg $ Msg { msgType = "REBOOT" + , msgFrom = ircConfigName $ ircBotConfig ircbot + , msgTo = "CORE" + , msgStuff = show $ ircBotResumeData ircbot + } liftIO $ writeChan masterChan msg |