Archived
1
0
Fork 0

Improved message dispatching in core.

This commit is contained in:
Julien Dessaux 2010-08-20 19:08:13 +02:00
parent 41f442028d
commit 8bbe88a078
2 changed files with 19 additions and 16 deletions

View file

@ -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)

9
TODO
View file

@ -1,10 +1,9 @@
:julien!~julien@ogu21.corp PRIVMSG #shbot :@quote graou snif
* Find a way to prevent the socket from being garbage collected, by writing a connection handler for example
* Design another way to launch and manage hsbot and it's configuration
* Find a way to handle bot reloading threw exec
* Find a way so that not a single message/information would be lost in the case of a reboot
* Improved configuration file errors display
* implement quick quoting for one line quotes
* write the vote system for the quote module
* only the quote reporter should be able to edit it
* detect too identical quoting in a raw, or implement quote abort
@ -28,3 +27,7 @@
* write a safe reload : try reload before unloading
* remove from Types.hs what can be removed from it
* Find a way to handle bot reloading threw exec
* Find a way to prevent the socket from being garbage collected, by writing a connection handler for example
* Find a way so that not a single message/information would be lost in the case of a reboot