-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/
-- | A library for writing IRC bots
--
-- A simple library for an IRC bot
@package ircbot
@version 0.6.5.2
module Network.IRC.Bot.ErrorCodes
noNicknameGiven :: ByteString
erroneusNickname :: ByteString
nicknameInUse :: ByteString
nickCollision :: ByteString
-- | A simple rate limiter.
module Network.IRC.Bot.Limiter
data Limiter
Limiter :: SSem -> SSem -> Int -> ThreadId -> Limiter
[limitsIn] :: Limiter -> SSem
[limitsOut] :: Limiter -> SSem
[limitsDelay] :: Limiter -> Int
[limitsThreadId] :: Limiter -> ThreadId
-- | Construct a new rate limit control
newLimiter :: Int -> Int -> IO Limiter
-- | Execute this before sending
limit :: Limiter -> IO ()
module Network.IRC.Bot.Log
data LogLevel
Debug :: LogLevel
Normal :: LogLevel
Important :: LogLevel
type Logger = LogLevel -> ByteString -> IO ()
stdoutLogger :: LogLevel -> Logger
nullLogger :: Logger
instance Data.Data.Data Network.IRC.Bot.Log.LogLevel
instance GHC.Show.Show Network.IRC.Bot.Log.LogLevel
instance GHC.Read.Read Network.IRC.Bot.Log.LogLevel
instance GHC.Classes.Ord Network.IRC.Bot.Log.LogLevel
instance GHC.Classes.Eq Network.IRC.Bot.Log.LogLevel
module Network.IRC.Bot.BotMonad
newtype BotPartT m a
BotPartT :: ReaderT BotEnv m a -> BotPartT m a
[unBotPartT] :: BotPartT m a -> ReaderT BotEnv m a
class (Functor m, MonadPlus m, MonadIO m) => BotMonad m
askBotEnv :: BotMonad m => m BotEnv
askMessage :: BotMonad m => m Message
askOutChan :: BotMonad m => m (Chan Message)
localMessage :: BotMonad m => (Message -> Message) -> m a -> m a
sendMessage :: BotMonad m => Message -> m ()
logM :: BotMonad m => LogLevel -> ByteString -> m ()
whoami :: BotMonad m => m ByteString
data BotEnv
BotEnv :: Message -> Chan Message -> Logger -> ByteString -> String -> BotEnv
[message] :: BotEnv -> Message
[outChan] :: BotEnv -> Chan Message
[logFn] :: BotEnv -> Logger
[botName] :: BotEnv -> ByteString
[cmdPrefix] :: BotEnv -> String
runBotPartT :: BotPartT m a -> BotEnv -> m a
mapBotPartT :: (m a -> n b) -> BotPartT m a -> BotPartT n b
maybeZero :: (MonadPlus m) => Maybe a -> m a
instance Control.Monad.Cont.Class.MonadCont m => Control.Monad.Cont.Class.MonadCont (Network.IRC.Bot.BotMonad.BotPartT m)
instance Control.Monad.Error.Class.MonadError e m => Control.Monad.Error.Class.MonadError e (Network.IRC.Bot.BotMonad.BotPartT m)
instance Control.Monad.State.Class.MonadState s m => Control.Monad.State.Class.MonadState s (Network.IRC.Bot.BotMonad.BotPartT m)
instance Control.Monad.Writer.Class.MonadWriter w m => Control.Monad.Writer.Class.MonadWriter w (Network.IRC.Bot.BotMonad.BotPartT m)
instance Control.Monad.IO.Class.MonadIO m => Control.Monad.IO.Class.MonadIO (Network.IRC.Bot.BotMonad.BotPartT m)
instance Control.Monad.Trans.Class.MonadTrans Network.IRC.Bot.BotMonad.BotPartT
instance GHC.Base.MonadPlus m => GHC.Base.MonadPlus (Network.IRC.Bot.BotMonad.BotPartT m)
instance Control.Monad.Fix.MonadFix m => Control.Monad.Fix.MonadFix (Network.IRC.Bot.BotMonad.BotPartT m)
instance GHC.Base.Monad m => GHC.Base.Monad (Network.IRC.Bot.BotMonad.BotPartT m)
instance GHC.Base.Functor m => GHC.Base.Functor (Network.IRC.Bot.BotMonad.BotPartT m)
instance GHC.Base.Alternative m => GHC.Base.Alternative (Network.IRC.Bot.BotMonad.BotPartT m)
instance GHC.Base.Applicative m => GHC.Base.Applicative (Network.IRC.Bot.BotMonad.BotPartT m)
instance Control.Monad.Reader.Class.MonadReader r m => Control.Monad.Reader.Class.MonadReader r (Network.IRC.Bot.BotMonad.BotPartT m)
instance Control.Monad.RWS.Class.MonadRWS r w s m => Control.Monad.RWS.Class.MonadRWS r w s (Network.IRC.Bot.BotMonad.BotPartT m)
instance (GHC.Base.Functor m, Control.Monad.IO.Class.MonadIO m, GHC.Base.MonadPlus m) => Network.IRC.Bot.BotMonad.BotMonad (Network.IRC.Bot.BotMonad.BotPartT m)
module Network.IRC.Bot.Commands
type HostName = ByteString
cmd :: (Functor m, MonadPlus m, BotMonad m) => Command -> m ()
data Ping
Ping :: HostName -> Ping
ping :: (Functor m, MonadPlus m, BotMonad m) => m Ping
data PrivMsg
PrivMsg :: (Maybe Prefix) -> [ByteString] -> ByteString -> PrivMsg
[prefix] :: PrivMsg -> (Maybe Prefix)
[receivers] :: PrivMsg -> [ByteString]
[msg] :: PrivMsg -> ByteString
privMsg :: (Functor m, MonadPlus m, BotMonad m) => m PrivMsg
toPrivMsg :: Message -> Maybe PrivMsg
class ToMessage a
toMessage :: ToMessage a => a -> Message
sendCommand :: (ToMessage c, BotMonad m, Functor m) => c -> m ()
data Pong
Pong :: HostName -> Pong
-- | get the nickname of the user who sent the message
askSenderNickName :: (BotMonad m) => m (Maybe ByteString)
-- | figure out who to reply to for a given Message
--
-- If message was sent to a #channel reply to the channel. Otherwise
-- reply to the sender.
replyTo :: (BotMonad m) => m (Maybe ByteString)
-- | returns the receiver of a message
--
-- if multiple receivers, it returns only the first
askReceiver :: (Alternative m, BotMonad m) => m (Maybe ByteString)
instance Data.Data.Data Network.IRC.Bot.Commands.Pong
instance GHC.Show.Show Network.IRC.Bot.Commands.Pong
instance GHC.Read.Read Network.IRC.Bot.Commands.Pong
instance GHC.Classes.Ord Network.IRC.Bot.Commands.Pong
instance GHC.Classes.Eq Network.IRC.Bot.Commands.Pong
instance GHC.Show.Show Network.IRC.Bot.Commands.PrivMsg
instance GHC.Read.Read Network.IRC.Bot.Commands.PrivMsg
instance GHC.Classes.Eq Network.IRC.Bot.Commands.PrivMsg
instance Data.Data.Data Network.IRC.Bot.Commands.Ping
instance GHC.Show.Show Network.IRC.Bot.Commands.Ping
instance GHC.Read.Read Network.IRC.Bot.Commands.Ping
instance GHC.Classes.Ord Network.IRC.Bot.Commands.Ping
instance GHC.Classes.Eq Network.IRC.Bot.Commands.Ping
instance Network.IRC.Bot.Commands.ToMessage Network.IRC.Bot.Commands.Pong
instance Network.IRC.Bot.Commands.ToMessage Network.IRC.Bot.Commands.PrivMsg
module Network.IRC.Bot.Parsec
mapParsecT :: (Monad m, Monad n) => (m (Consumed (m (Reply s u a))) -> n (Consumed (n (Reply s u b)))) -> ParsecT s u m a -> ParsecT s u n b
-- | parse a positive integer
nat :: (Monad m) => ParsecT ByteString () m Integer
-- | parser that checks for the cmdPrefix (from the BotEnv)
botPrefix :: (BotMonad m) => ParsecT ByteString () m ()
-- | create a bot part by using Parsec to parse the command
--
-- The argument to parsecPart is a parser function.
--
-- The argument to that parsec function is the target that the
-- response should be sent to.
--
-- The parser will receive the msg from the PrivMsg.
--
-- see dicePart for an example usage.
parsecPart :: (BotMonad m) => (ParsecT ByteString () m a) -> m a
reportError :: (BotMonad m) => ByteString -> ParseError -> m ()
showErrorMessages :: String -> String -> String -> String -> String -> [Message] -> [String]
instance (Network.IRC.Bot.BotMonad.BotMonad m, GHC.Base.Monad m) => Network.IRC.Bot.BotMonad.BotMonad (Text.Parsec.Prim.ParsecT s u m)
module Network.IRC.Bot.Part.Channels
initChannelsPart :: (BotMonad m) => Set ByteString -> IO (TVar (Set ByteString), m ())
channelsPart :: (BotMonad m) => TVar (Set ByteString) -> m ()
joinChannel :: (BotMonad m) => ByteString -> TVar (Set ByteString) -> m ()
module Network.IRC.Bot.Part.Dice
dicePart :: (BotMonad m) => m ()
diceCommand :: (BotMonad m) => ParsecT ByteString () m ()
module Network.IRC.Bot.Part.Hello
helloPart :: (BotMonad m) => m ()
helloCommand :: (BotMonad m) => ParsecT ByteString () m ()
module Network.IRC.Bot.Part.Ping
pingPart :: (BotMonad m) => m ()
module Network.IRC.Bot.PosixLogger
posixLogger :: Maybe FilePath -> ByteString -> Chan Message -> IO ()
fdWrites :: Fd -> ByteString -> IO ()
module Network.IRC.Bot.Types
data User
User :: ByteString -> HostName -> HostName -> ByteString -> User
-- | username on client system
[username] :: User -> ByteString
-- | hostname of client system
[hostname] :: User -> HostName
-- | irc server client is connected to
[servername] :: User -> HostName
-- | client's real name
[realname] :: User -> ByteString
nullUser :: User
instance GHC.Show.Show Network.IRC.Bot.Types.User
instance GHC.Read.Read Network.IRC.Bot.Types.User
instance GHC.Classes.Ord Network.IRC.Bot.Types.User
instance GHC.Classes.Eq Network.IRC.Bot.Types.User
instance Data.Data.Data Network.IRC.Bot.Types.User
module Network.IRC.Bot.Part.NickUser
nickUserPart :: (BotMonad m) => m ()
changeNickUser :: (BotMonad m) => ByteString -> Maybe User -> m ()
module Network.IRC.Bot.Core
-- | simpleBot connects to the server and handles messages using the
-- supplied BotPartTs
--
-- the 'Chan Message' for the optional logging function will include all
-- received and sent messages. This means that the bots output will be
-- included in the logs.
simpleBot :: BotConf -> [BotPartT IO ()] -> IO ([ThreadId], IO ())
-- | simpleBot' connects to the server and handles messages using the
-- supplied BotPartTs
--
-- the 'Chan Message' for the optional logging function will include all
-- received and sent messages. This means that the bots output will be
-- included in the logs.
simpleBot' :: (Maybe (Chan Message -> IO ())) -> Logger -> Maybe (Int, Int) -> HostName -> PortID -> ByteString -> String -> User -> [BotPartT IO ()] -> IO ([ThreadId], IO ())
-- | Bot configuration
data BotConf
BotConf :: (Maybe (Chan Message -> IO ())) -> Logger -> HostName -> PortID -> ByteString -> String -> User -> Set ByteString -> Maybe (Int, Int) -> BotConf
-- | optional channel logging function
[channelLogger] :: BotConf -> (Maybe (Chan Message -> IO ()))
-- | app logging
[logger] :: BotConf -> Logger
-- | irc server to connect
[host] :: BotConf -> HostName
-- | irc port to connect to (usually, 'PortNumber 6667')
[port] :: BotConf -> PortID
-- | irc nick
[nick] :: BotConf -> ByteString
-- | command prefix
[commandPrefix] :: BotConf -> String
-- | irc user info
[user] :: BotConf -> User
-- | channel to join
[channels] :: BotConf -> Set ByteString
-- | (burst length, delay in microseconds)
[limits] :: BotConf -> Maybe (Int, Int)
nullBotConf :: BotConf
data User
User :: ByteString -> HostName -> HostName -> ByteString -> User
-- | username on client system
[username] :: User -> ByteString
-- | hostname of client system
[hostname] :: User -> HostName
-- | irc server client is connected to
[servername] :: User -> HostName
-- | client's real name
[realname] :: User -> ByteString
nullUser :: User
module Network.IRC.Bot