28 lines
837 B
Haskell
28 lines
837 B
Haskell
{-# LANGUAGE Safe #-}
|
|
{-# LANGUAGE ScopedTypeVariables #-}
|
|
{-# LANGUAGE TypeFamilies #-}
|
|
|
|
module Bot.Lib where
|
|
|
|
import Bot.DSL
|
|
import Bot.Extension
|
|
import Bot.Log
|
|
import Control.Monad (forever)
|
|
import Control.Monad.Catch (MonadCatch, SomeException, catch)
|
|
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
|
|
responses <- catMaybes <$> mapM (`act` msg) extensions
|
|
mapM_ putMsg responses
|