diff options
author | tv <tv@krebsco.de> | 2019-01-21 19:44:39 +0100 |
---|---|---|
committer | tv <tv@krebsco.de> | 2019-01-21 19:44:39 +0100 |
commit | a00da57346c195b1b15d1c6aca2891483901aae6 (patch) | |
tree | fab49308ba6a4a96a0eb01fa7eb8f727d9c95f07 /src/Reaktor/Internal.hs | |
parent | 2842e05c232505c670daee0fffb9a34d5c866217 (diff) |
src: Types -> Internal
Diffstat (limited to 'src/Reaktor/Internal.hs')
-rw-r--r-- | src/Reaktor/Internal.hs | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/src/Reaktor/Internal.hs b/src/Reaktor/Internal.hs new file mode 100644 index 0000000..d3ac9cf --- /dev/null +++ b/src/Reaktor/Internal.hs @@ -0,0 +1,58 @@ +{-# LANGUAGE OverloadedStrings #-} +module Reaktor.Internal (module Reaktor.Internal, module X) where + +import Blessings (Blessings) +import Control.Monad.Trans.Class as X (lift) +import Control.Monad.Trans.State as X (gets,modify) +import Control.Monad.Trans.State (StateT) +import Data.Aeson +import Data.Aeson.Types +import qualified Data.ByteString.Char8.Extended as BS +import Network.Socket as X (HostName,ServiceName) + + +type Prefix = BS.ByteString + +type Nickname = BS.ByteString +type Password = BS.ByteString +type MsgTarget = BS.ByteString +type Channel = MsgTarget + +data PluginState = PluginState { + s_putLog :: Blessings BS.ByteString -> IO (), + s_nick :: BS.ByteString, + s_sendMsg :: Message -> IO (), + s_sendMsg' :: Message -> Message -> IO () + } + +setNick :: Nickname -> PluginIO () +setNick newnick = modify (\q -> q { s_nick = newnick }) + +getNick :: PluginIO Nickname +getNick = gets s_nick + +sendMsg :: Message -> PluginIO () +sendMsg msg = gets s_sendMsg >>= \f -> lift $ f msg + +sendMsg' :: Message -> Message -> PluginIO () +sendMsg' msg logMsg = gets s_sendMsg' >>= \f -> lift $ f msg logMsg + + +type PluginIO = StateT PluginState IO + +type PluginFunc = Message -> PluginIO () + +data Plugin = Plugin { + pluginFunc :: PluginFunc, + requireTLS :: Bool + } + +simplePlugin :: FromJSON a => (a -> PluginFunc) -> Value -> IO Plugin +simplePlugin f v = + either error (\x -> return $ Plugin (f x) False) (parseEither parseJSON v) + + +type Param = BS.ByteString +type Command = BS.ByteString +data Message = Message (Maybe Prefix) Command [Param] + deriving Show |