diff options
author | Teddy Wing | 2017-08-16 20:25:03 +0200 |
---|---|---|
committer | Teddy Wing | 2017-08-16 20:25:03 +0200 |
commit | 1311706d7cca3cd67af5c974c763aba53b0011a9 (patch) | |
tree | 9ed80e96ab141db481a7ad8f4a19b0d45d710e4d /src/IRC.hs | |
parent | 76960b444b3562ae56f877b8f05c8abd4e0e4d1a (diff) | |
download | sorbot-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.
Diffstat (limited to 'src/IRC.hs')
-rw-r--r-- | src/IRC.hs | 26 |
1 files changed, 21 insertions, 5 deletions
@@ -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)) |