-- 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 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.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.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.PosixLogger posixLogger :: Maybe FilePath -> ByteString -> Chan Message -> IO () fdWrites :: Fd -> ByteString -> IO () 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.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.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