summaryrefslogtreecommitdiff
path: root/Hsbot/Types.hs
diff options
context:
space:
mode:
Diffstat (limited to 'Hsbot/Types.hs')
-rw-r--r--Hsbot/Types.hs54
1 files changed, 54 insertions, 0 deletions
diff --git a/Hsbot/Types.hs b/Hsbot/Types.hs
new file mode 100644
index 0000000..ff57c49
--- /dev/null
+++ b/Hsbot/Types.hs
@@ -0,0 +1,54 @@
+module Hsbot.Types
+ ( Bot
+ , BotState (..)
+ , BotStatus (..)
+ , BotEnv (..)
+ , Env
+ , Message (..)
+ , PluginState (..)
+ ) where
+
+import Control.Concurrent
+import qualified Data.Map as M
+import Control.Monad.Reader
+import Control.Monad.State
+import qualified Network.IRC as IRC
+import Network.TLS
+import System.IO
+
+import Hsbot.Config
+
+-- 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)
+ , botCommands :: M.Map String [String]
+ , botChannels :: [String]
+ , botNickname :: String
+ }
+
+-- The Plugin monad
+data PluginState = PluginState
+ { pluginName :: String
+ , pluginChan :: Chan Message
+ }
+
+data BotStatus = BotContinue | BotExit | BotReload | BotRestart deriving (Show)
+
+data Message = IncomingMsg IRC.Message
+ | OutgoingMsg IRC.Message
+