summaryrefslogtreecommitdiff
path: root/Hsbot/Irc/Types.hs
diff options
context:
space:
mode:
Diffstat (limited to 'Hsbot/Irc/Types.hs')
-rw-r--r--Hsbot/Irc/Types.hs48
1 files changed, 48 insertions, 0 deletions
diff --git a/Hsbot/Irc/Types.hs b/Hsbot/Irc/Types.hs
new file mode 100644
index 0000000..eac58d7
--- /dev/null
+++ b/Hsbot/Irc/Types.hs
@@ -0,0 +1,48 @@
+module Hsbot.Irc.Types
+ ( IrcBot
+ , IrcBotState (..)
+ , IrcServer
+ , IrcServerState (..)
+ ) where
+
+import Control.Concurrent
+import Control.Monad.State
+import qualified Data.Map as M
+import Data.Time
+import System.IO
+
+import Hsbot.Irc.Config
+import Hsbot.Irc.Message
+import Hsbot.Irc.PluginCommons
+import Hsbot.Message
+
+-- | The Ircbot monad
+type IrcBot = StateT IrcBotState IO
+
+-- | An Ircbot state
+data IrcBotState = IrcBotState
+ { ircBotStartTime :: UTCTime -- the bot's uptime
+ , ircBotPlugins :: M.Map String IrcPluginState -- Loaded plugins
+ , ircBotCommands :: M.Map String [String] -- Loaded plugins
+ , ircBotChan :: Chan IrcBotMsg -- The IrcBot's communication channel
+ , ircBotMasterChan :: Chan BotMsg -- The Hsbot communication channel
+ , ircBotMyChan :: Chan BotMsg -- The Hsbot communication channel
+ , ircBotServerState :: IrcServerState -- The state of the IrcServer
+ , ircBotHandle :: Handle -- The server's socket/handle
+ , ircBotConfig :: IrcConfig -- The starting configuration
+ , ircBotReaderThreadId :: ThreadId
+ , ircBotMasterReaderThreadId :: ThreadId
+ }
+
+-- | The IrcServer monad
+type IrcServer = StateT IrcServerState IrcBot
+
+-- | An IRC server
+data IrcServerState = IrcServerState
+ { ircServerId :: String -- the server's address
+ , ircServerChannels :: [String] -- the Channels we are connected to
+ , ircServerNickname :: String -- the hsbot's nickname
+ , ircServerCommandPrefix :: Char -- the prefix the ircbot will recognize as commands
+ , ircServerChan :: Chan IrcBotMsg -- the IrcBot channel
+ }
+