36 lines
1.1 KiB
Haskell
36 lines
1.1 KiB
Haskell
|
{-# LANGUAGE FlexibleContexts #-}
|
||
|
|
||
|
module Network.IRC.Handlers (coreMsgHandlerNames, mkMsgHandler) where
|
||
|
|
||
|
import qualified Network.IRC.Handlers.Auth as Auth
|
||
|
import qualified Network.IRC.Handlers.Core as Core
|
||
|
import qualified Network.IRC.Handlers.Greet as Greet
|
||
|
import qualified Network.IRC.Handlers.MessageLogger as Logger
|
||
|
import qualified Network.IRC.Handlers.NickTracker as NickTracker
|
||
|
import qualified Network.IRC.Handlers.SongSearch as SongSearch
|
||
|
|
||
|
import ClassyPrelude
|
||
|
import Control.Concurrent.Lifted (Chan)
|
||
|
|
||
|
import Network.IRC.Types
|
||
|
|
||
|
coreMsgHandlerNames :: [Text]
|
||
|
coreMsgHandlerNames = ["pingpong", "help"]
|
||
|
|
||
|
mkMsgHandler :: BotConfig -> Chan SomeEvent -> MsgHandlerName -> IO (Maybe MsgHandler)
|
||
|
mkMsgHandler botConfig eventChan name =
|
||
|
flip (`foldM` Nothing) handlerMakers $ \finalHandler handler ->
|
||
|
case finalHandler of
|
||
|
Just _ -> return finalHandler
|
||
|
Nothing -> handler botConfig eventChan name
|
||
|
|
||
|
where
|
||
|
handlerMakers = [
|
||
|
Auth.mkMsgHandler
|
||
|
, Core.mkMsgHandler
|
||
|
, Greet.mkMsgHandler
|
||
|
, Logger.mkMsgHandler
|
||
|
, NickTracker.mkMsgHandler
|
||
|
, SongSearch.mkMsgHandler
|
||
|
]
|