summaryrefslogtreecommitdiff
path: root/Hsbot/Types.hs
blob: 28ad430118b5e4e46bb0497a10792763a787cfe3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
module Hsbot.Types
    ( Bot
    , BotState (..)
    , BotStatus (..)
    , BotEnv (..)
    , Env
    , Message (..)
    , Plugin
    , PluginId (..)
    , PluginState (..)
    ) where

import Control.Concurrent
import qualified Data.Map as M
import Control.Monad.Reader
import Control.Monad.State
import Network.TLS
import System.IO

import Hsbot.Config
import Hsbot.Message

-- The bot environment
type Env = ReaderT BotEnv

data BotEnv = BotEnv
    { envHandle      :: Handle
    , envChan        :: Chan Message
    , envQuitMv      :: MVar (BotStatus)
    , envThreadIdsMv :: MVar [ThreadId]
    , envConfig      :: Config
    , envTLS         :: Maybe TLSParams
    , envTLSCtx      :: Maybe TLSCtx
    }

-- The bot monad
type Bot = StateT BotState

data BotState = BotState
    { botPlugins  :: M.Map String (PluginState, MVar (), ThreadId)
    , botHooks    :: [Chan Message]
    , botChannels :: [String]
    , botNickname :: String
    }

-- The Plugin monad
type Plugin = StateT PluginState

data PluginState = PluginState
    { pluginId     :: PluginId
    , pluginChan   :: Chan Message
    , pluginMaster :: Chan Message
    }

data PluginId = PluginId
    { pluginName :: String
    , pluginEp   :: PluginState -> IO ()
    }

data BotStatus = BotContinue | BotExit | BotReload | BotRestart deriving (Show)