demobot/src/Bot/Lib.hs

28 lines
837 B
Haskell
Raw Normal View History

2018-12-23 23:23:14 +02:00
{-# LANGUAGE Safe #-}
{-# LANGUAGE ScopedTypeVariables #-}
2018-12-23 23:52:19 +02:00
{-# LANGUAGE TypeFamilies #-}
2018-12-23 23:23:14 +02:00
module Bot.Lib where
import Bot.DSL
import Bot.Extension
import Bot.Log
import Control.Monad (forever)
2018-12-23 23:52:19 +02:00
import Control.Monad.Catch (MonadCatch, SomeException, catch)
2018-12-23 23:23:14 +02:00
import Data.Maybe (catMaybes)
import qualified Data.Text as T
tshow :: Show a => a -> T.Text
tshow = T.pack . show
mainLoop :: forall m. (MonadCatch m, MonadBot m) => [Extension (Meta m)] -> m ()
mainLoop extensions = forever $ catch go handleFail
where
handleFail :: SomeException -> m ()
handleFail e = logError $ tshow e
go :: m ()
go = do
msg <- recvMsg
2018-12-23 23:52:19 +02:00
responses <- catMaybes <$> mapM (`act` msg) extensions
2018-12-23 23:23:14 +02:00
mapM_ putMsg responses