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