aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTeddy Wing2017-08-16 20:25:03 +0200
committerTeddy Wing2017-08-16 20:25:03 +0200
commit1311706d7cca3cd67af5c974c763aba53b0011a9 (patch)
tree9ed80e96ab141db481a7ad8f4a19b0d45d710e4d
parent76960b444b3562ae56f877b8f05c8abd4e0e4d1a (diff)
downloadsorbot-1311706d7cca3cd67af5c974c763aba53b0011a9.tar.bz2
handlePrivmsg: Move duplicated code to new function
We have some code that's duplicated in both branches of the `Either` case statement that sends a response over IRC. Extract that to a new function that can be shared between the two case statements to try to reduce repetition. Took me a while to wrangle the monads to get this, but it's in working condition now. Need to add the commented `Nothing` branch in so I'm handling all the cases.
-rw-r--r--src/IRC.hs26
1 files changed, 21 insertions, 5 deletions
diff --git a/src/IRC.hs b/src/IRC.hs
index 427fac7..253d51f 100644
--- a/src/IRC.hs
+++ b/src/IRC.hs
@@ -48,8 +48,24 @@ handlePrivmsg = IRC.EventHandler
, channel = T.unpack chan
, nick = T.unpack nick
}
- Just plugin = matchPlugin message
- response <- liftIO $ performPlugin plugin message
- IRC.send $ case response of
- Left err -> IRC.Privmsg chan (Right (T.pack err))
- Right r -> IRC.Privmsg chan (Right (T.pack r))
+ -- case privmsgFromPlugin message of
+ -- () -> return ()
+ -- msg -> IRC.send msg
+ -- response <- privmsgFromPlugin message
+ response <- liftIO $ privmsgFromPlugin message
+ IRC.send response
+
+privmsgFromPlugin :: Message -> IO (IRC.Message T.Text)
+privmsgFromPlugin message = do
+ case matchPlugin message of
+ -- Nothing ->
+ Just plugin -> do
+ -- let response = liftIO $ performPlugin plugin message in
+ response <- liftIO $ performPlugin plugin message
+ return $ case response of
+ Left err -> IRC.Privmsg
+ (T.pack (channel message))
+ (Right (T.pack err))
+ Right r -> IRC.Privmsg
+ (T.pack (channel message))
+ (Right (T.pack r))