From eb732a97b82f9d03f68247d79301ee26b84b650b Mon Sep 17 00:00:00 2001 From: Teddy Wing Date: Sat, 4 Nov 2017 03:00:38 +0100 Subject: Bot(privmsgFromPlugin): Try to use the `Bot` monad instead of `IO` Convert this function and `Plugins(performPlugin)` to use a `Bot`-wrapped plugin. Still having a lot of trouble with this, unable to get past monad-related compilation errors. The plan is to leave this as-is for now and attack the problem from a different place, looking at the `main` function next, applying our plugins with `runBot`, and then passing those monad-wrapped plugins to `connectIRC`. Once that's taken care of, we'll see what we need to modify in this middle strata of the stack. --- src/IRC.hs | 6 ++++-- src/Plugin.hs | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/IRC.hs b/src/IRC.hs index 2127aa7..18508b2 100644 --- a/src/IRC.hs +++ b/src/IRC.hs @@ -13,6 +13,7 @@ import qualified Data.Text as T import qualified Network.IRC.Client as IRC +import Bot (Bot) import Message import Plugin (matchPlugin, performPlugin) import Plugin.Base (queryOnly) @@ -61,10 +62,11 @@ handlePrivmsg = IRC.EventHandler Nothing -> return () Just r -> sequence_ r -privmsgFromPlugin :: Message -> MaybeT IO [IRC.StatefulIRC s ()] +privmsgFromPlugin :: Message -> MaybeT Bot [IRC.StatefulIRC s ()] privmsgFromPlugin message = do plugin <- liftMaybe $ matchPlugin message - response <- liftIO $ performPlugin plugin message + response <- lift $ performPlugin plugin message + -- plugin' <- liftMaybe plugin return $ case response of Left err -> [IRC.send $ IRC.Privmsg (toChannel plugin message) diff --git a/src/Plugin.hs b/src/Plugin.hs index 04a8054..d4aa6f9 100644 --- a/src/Plugin.hs +++ b/src/Plugin.hs @@ -67,8 +67,10 @@ matchPlugins message plugins = -- [return p | p <- plugins', M.textStr message =~ matchRegex p] -- | Run the action belonging to the plugin, stored in its `perform` field. -performPlugin :: Plugin -> PluginAction -performPlugin p message = perform p $ message +performPlugin :: Bot Plugin -> PluginAction +performPlugin p message = do + plugin <- p + perform plugin $ message plugins :: [Bot Plugin] plugins = PL.plugins ++ [help] -- cgit v1.2.3