packages feed

ircbot 0.2.0 → 0.2.1

raw patch · 5 files changed

+65/−24 lines, 5 filesdep +containersdep +stm

Dependencies added: containers, stm

Files

Network/IRC/Bot/BotMonad.hs view
@@ -36,7 +36,7 @@     , outChan   :: Chan Message     , logFn     :: Logger     , botName   :: String-    , cmdPrefix :: String+    , cmdPrefix    :: String     }    newtype BotPartT m a = BotPartT { unBotPartT :: ReaderT BotEnv m a }
Network/IRC/Bot/Commands.hs view
@@ -31,9 +31,9 @@                     data PrivMsg           -  = PrivMsg { prefix :: (Maybe Prefix) -            , receivers :: [String] -            , msg :: String+  = PrivMsg { prefix     :: (Maybe Prefix) +            , receivers  :: [String] +            , msg        :: String             }       deriving (Eq, Read, Show)        @@ -49,7 +49,7 @@       prefix = msg_prefix  msg   in case cmd of       "PRIVMSG" -> Just $ PrivMsg prefix (init params) (last params)-      _ -> Nothing+      _         -> Nothing       class ToMessage a where   toMessage :: a -> Message
Network/IRC/Bot/Core.hs view
@@ -32,25 +32,25 @@ data BotConf =      BotConf     { channelLogger :: (Maybe (Chan Message -> IO ()))  -- ^ optional channel logging function-    , logger :: Logger           -- ^ app logging-    , host   :: HostName         -- ^ irc server to connect -    , port   :: PortID           -- ^ irc port to connect to (usually, 'PortNumber 6667')-    , nick   :: String           -- ^ irc nick-    , prefix :: String           -- ^ command prefix-    , user   :: User             -- ^ irc user info-    , channels :: Set String     -- ^ channel to join+    , logger        :: Logger           -- ^ app logging+    , host          :: HostName         -- ^ irc server to connect +    , port          :: PortID           -- ^ irc port to connect to (usually, 'PortNumber 6667')+    , nick          :: String           -- ^ irc nick+    , commandPrefix :: String           -- ^ command prefix+    , user          :: User             -- ^ irc user info+    , channels      :: Set String       -- ^ channel to join     }  nullBotConf :: BotConf nullBotConf =     BotConf { channelLogger  = Nothing-            , logger   = stdoutLogger Normal-            , host     = ""-            , port     = PortNumber 6667-            , nick     = ""-            , prefix   = "#"-            , user     = nullUser-            , channels = empty+            , logger         = stdoutLogger Normal+            , host           = ""+            , port           = PortNumber 6667+            , nick           = ""+            , commandPrefix  = "#"+            , user           = nullUser+            , channels       = empty             }  -- | connect to irc server and send NICK and USER commands@@ -66,12 +66,12 @@                runBotPartT botPart (BotEnv msg outgoingChan logger botName prefix)  ircLoop :: Logger -> String -> String -> Chan Message -> Chan Message -> [BotPartT IO ()] -> IO [ThreadId]-ircLoop logger botName cmdPrefix incomingChan outgoingChan parts = +ircLoop logger botName prefix incomingChan outgoingChan parts =      mapM forkPart parts   where     forkPart botPart =       do inChan <- dupChan incomingChan-         forkIO $ partLoop logger botName cmdPrefix inChan outgoingChan (botPart `mplus` return ())+         forkIO $ partLoop logger botName prefix inChan outgoingChan (botPart `mplus` return ())  -- reconnect loop is still a bit buggy      -- if you try to write multiple lines, and the all fail, reconnect will be called multiple times..@@ -137,7 +137,7 @@           -> [BotPartT IO ()] -- ^ bot parts (must include 'pingPart', or equivalent)           -> IO [ThreadId]    -- ^ 'ThreadId' for all forked handler threads simpleBot BotConf{..} parts =-    simpleBot' channelLogger logger host port nick prefix user parts+    simpleBot' channelLogger logger host port nick commandPrefix user parts  -- |simpleBot' connects to the server and handles messages using the supplied BotPartTs --
+ Network/IRC/Bot/Types.hs view
@@ -0,0 +1,38 @@+{-# LANGUAGE DeriveDataTypeable, RecordWildCards #-}+module Network.IRC.Bot.Types+    ( User(..)+    , nullUser+    ) where++import Control.Concurrent       (ThreadId, forkIO, threadDelay)+import Control.Concurrent.Chan  (Chan, dupChan, newChan, readChan, writeChan)+import Control.Concurrent.MVar  (MVar, modifyMVar_, newMVar, readMVar)+import Control.Concurrent.QSem  (QSem, newQSem, waitQSem, signalQSem)+import Control.Exception        (IOException, catch)+import Control.Monad            (mplus, forever, when)+import Control.Monad.Trans      (liftIO)+import Data.Data                (Data, Typeable)+import Data.Time                (UTCTime, addUTCTime, getCurrentTime)+import Network                  (HostName, PortID(PortNumber), connectTo)+import Network.IRC              (Message, decode, encode, joinChan, nick, user)+import Network.IRC              as I+import Network.IRC.Bot.Log      (Logger, LogLevel(Normal, Debug), stdoutLogger)+import Network.IRC.Bot.BotMonad (BotMonad(logM), BotPartT, BotEnv(..), runBotPartT)+import Prelude                  hiding (catch)+import System.IO                (BufferMode(LineBuffering), Handle, hClose, hGetLine, hPutStrLn, hSetBuffering)+++data User = User+    { username   :: String    -- ^ username on client system+    , hostname   :: HostName  -- ^ hostname of client system+    , servername :: HostName  -- ^ irc server client is connected to+    , realname   :: String    -- ^ client's real name+    }+    deriving (Data, Typeable, Eq, Ord, Read, Show)++nullUser :: User+nullUser = User { username   = ""+                , hostname   = "."+                , servername = "."+                , realname   = ""+                }
ircbot.cabal view
@@ -1,5 +1,5 @@ Name:                ircbot-Version:             0.2.0+Version:             0.2.1 Synopsis:            A library for writing irc bots Homepage:            http://patch-tag.com/r/stepcut/ircbot License:             BSD3@@ -26,8 +26,10 @@                        Network.IRC.Bot.Part.NickUser                        Network.IRC.Bot.Parsec                        Network.IRC.Bot.PosixLogger+                       Network.IRC.Bot.Types      Build-depends:  base       >= 4 && <5,+                  containers == 0.4.*,                   filepath   >= 1.2 && < 1.4,                   irc        == 0.5.*,                   mtl        == 2.0.*,@@ -36,7 +38,8 @@                   parsec     == 3.1.*,                   time       == 1.4.*,                   unix       >= 2.4 && < 2.6,-                  random     == 1.0.*+                  random     == 1.0.*,+                  stm        == 2.2.*    -- Modules not exported by this package.   -- Other-modules: