From 8bbe88a07879a4c3c6205756135972df33aa9b09 Mon Sep 17 00:00:00 2001 From: Julien Dessaux Date: Fri, 20 Aug 2010 19:08:13 +0200 Subject: Improved message dispatching in core. --- HsbotIrcBot/Hsbot/Irc/Core.hs | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) (limited to 'HsbotIrcBot/Hsbot') diff --git a/HsbotIrcBot/Hsbot/Irc/Core.hs b/HsbotIrcBot/Hsbot/Irc/Core.hs index 525c3d6..a280549 100644 --- a/HsbotIrcBot/Hsbot/Irc/Core.hs +++ b/HsbotIrcBot/Hsbot/Irc/Core.hs @@ -105,26 +105,26 @@ ircBotCore = do -- | Dispatches an input message dispatchMessage :: IrcBotMsg -> IrcBot (BotStatus) dispatchMessage (InIrcMsg inIrcMsg) = do - config <- gets ircBotConfig - plugins <- gets ircBotPlugins - cmds <- gets ircBotCommands - if (isPluginCommand config) + bot <- get + let config = ircBotConfig bot + plugins = ircBotPlugins bot + cmds = ircBotCommands bot + if isPluginCommand config then - let key = tail . head $ words getMsgContent + let getMsgContent = unwords . tail $ ircMsgParameters inIrcMsg + key = tail . head $ words getMsgContent pluginNames = fromMaybe [] $ M.lookup key cmds plugins' = fromMaybe [] $ mapM (flip M.lookup plugins) pluginNames + sendRunCommand cmd plugin = sendToPlugin (IntIrcCmd $ IrcCmd "RUN" "CORE" (ircPluginName plugin) cmd inIrcMsg) plugin in mapM_ (sendRunCommand (tail getMsgContent) . first) plugins' else mapM_ (sendToPlugin (InIrcMsg inIrcMsg) . first) (M.elems plugins) return BotContinue where - isPluginCommand :: IrcConfig -> Bool - isPluginCommand config = - and [ ircMsgCommand inIrcMsg == "PRIVMSG" - , (head getMsgContent) == ircConfigCommandPrefix config ] - sendRunCommand :: String -> IrcPluginState -> IrcBot () - sendRunCommand cmd plugin = sendToPlugin (IntIrcCmd $ IrcCmd "RUN" "CORE" (ircPluginName plugin) cmd inIrcMsg) plugin - getMsgContent :: String - getMsgContent = unwords . tail $ ircMsgParameters inIrcMsg + isPluginCommand config = and [ ircMsgCommand inIrcMsg == "PRIVMSG", prefix == ircConfigCommandPrefix config ] + prefix | length msgWords >= 1 = head . head $ msgWords + | otherwise = ' ' + where + msgWords = tail $ ircMsgParameters inIrcMsg dispatchMessage _ = return (BotContinue) -- cgit v1.2.3