module Hsbot.Message ( processInternalMessage ) where import Control.Monad.State import qualified Data.Map as M import Hsbot.PluginUtils import Hsbot.Types -- | Processes an internal message processInternalMessage :: BotMsg -> Bot (Bool) processInternalMessage (IntMsg msg) | msgTo msg == "CORE" = processCoreMessage msg | otherwise = do plugins <- gets botPlugins case M.lookup (msgTo msg) plugins of Just (plugin, _) -> sendToPlugin (IntMsg msg) plugin Nothing -> return () return False processInternalMessage _ = return (False) processCoreMessage :: Msg -> Bot (Bool) processCoreMessage msg = do case msgType msg of "UPDATE" -> processUpdateCommand msg _ -> return () return $ (msgType msg) == "REBOOT" -- | Process an update command processUpdateCommand :: Msg -> Bot () processUpdateCommand msg = do bot <- get let oldData = botResumeData bot from = msgFrom msg stuff = msgStuff msg put $ bot { botResumeData = M.insert from stuff oldData }