From d4be110200ba3f3a2f19236ec3c16f980ab458aa Mon Sep 17 00:00:00 2001 From: Julien Dessaux Date: Sat, 23 Apr 2011 13:35:04 +0200 Subject: Continue refactoring, worked on the core loop and the plugin infrastructure. --- Hsbot/Plugin/Ping.hs | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 Hsbot/Plugin/Ping.hs (limited to 'Hsbot/Plugin') diff --git a/Hsbot/Plugin/Ping.hs b/Hsbot/Plugin/Ping.hs new file mode 100644 index 0000000..b020359 --- /dev/null +++ b/Hsbot/Plugin/Ping.hs @@ -0,0 +1,38 @@ +module Hsbot.Plugin.Ping + ( pingId + , ping + ) where + +import Control.Concurrent.Chan () +import Control.Exception +import Control.Monad.State (execStateT, forever) +import qualified Network.IRC as IRC +import Prelude hiding (catch) + +import Hsbot.Message +import Hsbot.Types +import Hsbot.Utils + +pingId :: PluginId +pingId = PluginId + { pluginName = "ping" + , pluginEp = ping } + +-- | The plugin's main entry point +ping :: PluginState -> IO () +ping state = do + _ <- (execStateT run state) `catch` (\(_ :: AsyncException) -> return state) + return () + +-- | The IrcPlugin monad main function +run :: Plugin IO () +run = forever $ do + msg <- readMsg + eval msg + where + eval :: Message -> Plugin IO () + eval (IncomingMsg msg) + | (IRC.msg_command msg) == "PING" = writeMsg . OutgoingMsg . IRC.Message Nothing "PONG" $ IRC.msg_params msg + | otherwise = return () + eval _ = return () + -- cgit v1.2.3