{-# LANGUAGE RecordWildCards #-} module Hirc.Types where import System.IO (Handle) import Control.Concurrent.STM (TVar) import Control.Monad.Reader (ReaderT) type Command = String type Param = String type Receiver = String data Message = Message { m_prefix :: Maybe Prefix, m_command :: Command, m_params :: [Param] } deriving Show data Error = BadMessage String deriving Show data Prefix = Prefix { p_name :: String, p_user :: Maybe String, p_host :: Maybe String } deriving Show type Net = ReaderT Bot IO data Bot = Bot { bot_server :: Server, bot_nick :: TVar String, bot_chan :: TVar String, bot_socket :: Handle } data Config = Config { config_server :: Server, config_nick :: String, config_chan :: String } deriving Show data Hooks = Hooks { hooks_onConnect :: Net (), hooks_onDisconnect :: Net (), hooks_onError :: Error -> Net (), hooks_onMessage :: Message -> Net () --hooks_shell :: Net() } data Server = Server { hostname :: String, port :: Int } instance Show Server where show Server{..} = hostname ++ ":" ++ show port