packages feed

ircbot 0.6.5.3 → 0.6.6

raw patch · 5 files changed

+40/−26 lines, 5 filesdep ~containersdep ~networkdep ~stmPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

Dependency ranges changed: containers, network, stm

API changes (from Hackage documentation)

+ Network.IRC.Bot.Commands: Notice :: Maybe Prefix -> [ByteString] -> ByteString -> Notice
+ Network.IRC.Bot.Commands: [noticeMsg] :: Notice -> ByteString
+ Network.IRC.Bot.Commands: [noticePrefix] :: Notice -> Maybe Prefix
+ Network.IRC.Bot.Commands: [noticeReceivers] :: Notice -> [ByteString]
+ Network.IRC.Bot.Commands: data Notice
+ Network.IRC.Bot.Commands: instance GHC.Classes.Eq Network.IRC.Bot.Commands.Notice
+ Network.IRC.Bot.Commands: instance GHC.Read.Read Network.IRC.Bot.Commands.Notice
+ Network.IRC.Bot.Commands: instance GHC.Show.Show Network.IRC.Bot.Commands.Notice
+ Network.IRC.Bot.Commands: instance Network.IRC.Bot.Commands.ToMessage Network.IRC.Bot.Commands.Notice
- Network.IRC.Bot.BotMonad: maybeZero :: (MonadPlus m) => Maybe a -> m a
+ Network.IRC.Bot.BotMonad: maybeZero :: MonadPlus m => Maybe a -> m a
- Network.IRC.Bot.Commands: PrivMsg :: (Maybe Prefix) -> [ByteString] -> ByteString -> PrivMsg
+ Network.IRC.Bot.Commands: PrivMsg :: Maybe Prefix -> [ByteString] -> ByteString -> PrivMsg
- Network.IRC.Bot.Commands: [prefix] :: PrivMsg -> (Maybe Prefix)
+ Network.IRC.Bot.Commands: [prefix] :: PrivMsg -> Maybe Prefix
- Network.IRC.Bot.Commands: askSenderNickName :: (BotMonad m) => m (Maybe ByteString)
+ Network.IRC.Bot.Commands: askSenderNickName :: BotMonad m => m (Maybe ByteString)
- Network.IRC.Bot.Commands: replyTo :: (BotMonad m) => m (Maybe ByteString)
+ Network.IRC.Bot.Commands: replyTo :: BotMonad m => m (Maybe ByteString)
- Network.IRC.Bot.Core: BotConf :: (Maybe (Chan Message -> IO ())) -> Logger -> HostName -> PortID -> ByteString -> String -> User -> Set ByteString -> Maybe (Int, Int) -> BotConf
+ Network.IRC.Bot.Core: BotConf :: Maybe (Chan Message -> IO ()) -> Logger -> HostName -> PortNumber -> ByteString -> String -> User -> Set ByteString -> Maybe (Int, Int) -> BotConf
- Network.IRC.Bot.Core: [channelLogger] :: BotConf -> (Maybe (Chan Message -> IO ()))
+ Network.IRC.Bot.Core: [channelLogger] :: BotConf -> Maybe (Chan Message -> IO ())
- Network.IRC.Bot.Core: [port] :: BotConf -> PortID
+ Network.IRC.Bot.Core: [port] :: BotConf -> PortNumber
- Network.IRC.Bot.Core: simpleBot' :: (Maybe (Chan Message -> IO ())) -> Logger -> Maybe (Int, Int) -> HostName -> PortID -> ByteString -> String -> User -> [BotPartT IO ()] -> IO ([ThreadId], IO ())
+ Network.IRC.Bot.Core: simpleBot' :: Maybe (Chan Message -> IO ()) -> Logger -> Maybe (Int, Int) -> HostName -> PortNumber -> ByteString -> String -> User -> [BotPartT IO ()] -> IO ([ThreadId], IO ())
- Network.IRC.Bot.Parsec: botPrefix :: (BotMonad m) => ParsecT ByteString () m ()
+ Network.IRC.Bot.Parsec: botPrefix :: BotMonad m => ParsecT ByteString () m ()
- Network.IRC.Bot.Parsec: nat :: (Monad m) => ParsecT ByteString () m Integer
+ Network.IRC.Bot.Parsec: nat :: Monad m => ParsecT ByteString () m Integer
- Network.IRC.Bot.Parsec: parsecPart :: (BotMonad m) => (ParsecT ByteString () m a) -> m a
+ Network.IRC.Bot.Parsec: parsecPart :: BotMonad m => ParsecT ByteString () m a -> m a
- Network.IRC.Bot.Parsec: reportError :: (BotMonad m) => ByteString -> ParseError -> m ()
+ Network.IRC.Bot.Parsec: reportError :: BotMonad m => ByteString -> ParseError -> m ()
- Network.IRC.Bot.Part.Channels: channelsPart :: (BotMonad m) => TVar (Set ByteString) -> m ()
+ Network.IRC.Bot.Part.Channels: channelsPart :: BotMonad m => TVar (Set ByteString) -> m ()
- Network.IRC.Bot.Part.Channels: initChannelsPart :: (BotMonad m) => Set ByteString -> IO (TVar (Set ByteString), m ())
+ Network.IRC.Bot.Part.Channels: initChannelsPart :: BotMonad m => Set ByteString -> IO (TVar (Set ByteString), m ())
- Network.IRC.Bot.Part.Channels: joinChannel :: (BotMonad m) => ByteString -> TVar (Set ByteString) -> m ()
+ Network.IRC.Bot.Part.Channels: joinChannel :: BotMonad m => ByteString -> TVar (Set ByteString) -> m ()
- Network.IRC.Bot.Part.Dice: diceCommand :: (BotMonad m) => ParsecT ByteString () m ()
+ Network.IRC.Bot.Part.Dice: diceCommand :: BotMonad m => ParsecT ByteString () m ()
- Network.IRC.Bot.Part.Dice: dicePart :: (BotMonad m) => m ()
+ Network.IRC.Bot.Part.Dice: dicePart :: BotMonad m => m ()
- Network.IRC.Bot.Part.Hello: helloCommand :: (BotMonad m) => ParsecT ByteString () m ()
+ Network.IRC.Bot.Part.Hello: helloCommand :: BotMonad m => ParsecT ByteString () m ()
- Network.IRC.Bot.Part.Hello: helloPart :: (BotMonad m) => m ()
+ Network.IRC.Bot.Part.Hello: helloPart :: BotMonad m => m ()
- Network.IRC.Bot.Part.NickUser: changeNickUser :: (BotMonad m) => ByteString -> Maybe User -> m ()
+ Network.IRC.Bot.Part.NickUser: changeNickUser :: BotMonad m => ByteString -> Maybe User -> m ()
- Network.IRC.Bot.Part.NickUser: nickUserPart :: (BotMonad m) => m ()
+ Network.IRC.Bot.Part.NickUser: nickUserPart :: BotMonad m => m ()
- Network.IRC.Bot.Part.Ping: pingPart :: (BotMonad m) => m ()
+ Network.IRC.Bot.Part.Ping: pingPart :: BotMonad m => m ()

Files

Network/IRC/Bot/Commands.hs view
@@ -8,7 +8,7 @@ import Data.Data import Data.List (isPrefixOf) import Data.Monoid ((<>))-import Network (PortID(PortNumber))+import Network.Socket (PortNumber) import Network.IRC import Network.IRC.Bot.BotMonad @@ -73,6 +73,15 @@ instance ToMessage PrivMsg where     toMessage (PrivMsg prefix receivers msg) = Message prefix "PRIVMSG" (receivers <> [msg]) +data Notice+  = Notice  { noticePrefix     :: (Maybe Prefix)+            , noticeReceivers  :: [ByteString]+            , noticeMsg        :: ByteString+            }+      deriving (Eq, Read, Show)++instance ToMessage Notice where+    toMessage (Notice prefix receivers msg) = Message prefix "NOTICE" (receivers <> [msg])  -- | get the nickname of the user who sent the message askSenderNickName :: (BotMonad m) => m (Maybe ByteString)
Network/IRC/Bot/Core.hs view
@@ -22,7 +22,7 @@ import Data.Set                 (Set, empty) import Data.Time                (UTCTime, addUTCTime, getCurrentTime) import GHC.IO.Handle            (hFlushAll)-import Network                  (HostName, PortID(PortNumber), connectTo)+import Network.Socket           hiding (Debug) import Network.IRC              (Message, decode, encode, joinChan, nick, showMessage, user) import Network.IRC              as I import Network.IRC.Bot.Types    (User(..), nullUser)@@ -33,7 +33,7 @@ import Prelude                  hiding (catch) import           Control.Concurrent.SSem (SSem) import qualified Control.Concurrent.SSem as SSem-import System.IO                (BufferMode(NoBuffering, LineBuffering), Handle, hClose, hGetLine, hPutChar, hSetBuffering)+import System.IO                (BufferMode(NoBuffering, LineBuffering), Handle, hClose, hGetLine, hPutChar, hSetBuffering, IOMode(..))  -- |Bot configuration data BotConf =@@ -41,7 +41,7 @@     { 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')+    , port          :: PortNumber       -- ^ irc port to connect to (usually, 'PortNumber 6667')     , nick          :: ByteString       -- ^ irc nick     , commandPrefix :: String           -- ^ command prefix     , user          :: User             -- ^ irc user info@@ -54,7 +54,7 @@     BotConf { channelLogger  = Nothing             , logger         = stdoutLogger Normal             , host           = ""-            , port           = PortNumber 6667+            , port           = 6667             , nick           = ""             , commandPrefix  = "#"             , user           = nullUser@@ -64,15 +64,20 @@  -- | connect to irc server and send NICK and USER commands ircConnect :: HostName-           -> PortID+           -> PortNumber            -> ByteString            -> User            -> IO Handle-ircConnect host port n u =-    do h <- connectTo host port-       hSetBuffering h LineBuffering-       return h+ircConnect host port n u = do+    addr <- head <$> getAddrInfo Nothing (Just host) (Just $ show port)+    print addr+    sock <- socket (addrFamily addr) (addrSocketType addr) (addrProtocol addr)+    connect sock $ addrAddress addr +    h <- socketToHandle sock ReadWriteMode+    hSetBuffering h LineBuffering+    return h+ partLoop :: Logger -> ByteString -> String -> Chan Message -> Chan Message -> (BotPartT IO ()) -> IO () partLoop logger botName prefix incomingChan outgoingChan botPart =   forever $ do msg <- readChan incomingChan@@ -89,7 +94,7 @@ -- reconnect loop is still a bit buggy -- if you try to write multiple lines, and the all fail, reconnect will be called multiple times.. -- something should be done so that this does not happen-connectionLoop :: Logger -> Maybe (Int, Int) -> TMVar UTCTime -> HostName -> PortID -> ByteString -> User -> Chan Message -> Chan Message -> Maybe (Chan Message) -> SSem -> IO (ThreadId, ThreadId, Maybe ThreadId, IO ())+connectionLoop :: Logger -> Maybe (Int, Int) -> TMVar UTCTime -> HostName -> PortNumber -> ByteString -> User -> Chan Message -> Chan Message -> Maybe (Chan Message) -> SSem -> IO (ThreadId, ThreadId, Maybe ThreadId, IO ()) connectionLoop logger mLimitConf tmv host port nick user outgoingChan incomingChan logChan connSSem =   do hTMVar <- atomically $ newTMVar (undefined :: Handle)      (limit, limitTid) <-@@ -133,7 +138,7 @@  ircConnectLoop :: (LogLevel -> ByteString -> IO a) -- ^ logging                -> HostName-               -> PortID+               -> PortNumber                -> ByteString                -> User                -> IO Handle@@ -144,7 +149,7 @@              threadDelay (60 * 10^6)              ircConnectLoop logger host port nick user) -doConnect :: (LogLevel -> ByteString -> IO a) -> HostName -> PortID -> ByteString -> User -> TMVar Handle -> SSem -> IO ()+doConnect :: (LogLevel -> ByteString -> IO a) -> HostName -> PortNumber -> ByteString -> User -> TMVar Handle -> SSem -> IO () doConnect logger host port nick user hTMVar connSSem =     do logger Normal $ "Connecting to " <> (C.pack host) <> " as " <> nick        h <- ircConnectLoop logger host port nick user@@ -153,7 +158,7 @@        SSem.signal connSSem        return () -reconnect :: Logger -> HostName -> PortID -> ByteString -> User -> TMVar Handle -> SSem -> IOException -> IO ()+reconnect :: Logger -> HostName -> PortNumber -> ByteString -> User -> TMVar Handle -> SSem -> IOException -> IO () reconnect logger host port nick user hTMVar connSSem e =     do logger Normal $ "IRC Connection died: " <> C.pack (show e) {-@@ -190,7 +195,7 @@           -> Logger           -- ^ application logging           -> Maybe (Int, Int) -- ^ rate limiter settings (burst length, delay in microseconds)           -> HostName         -- ^ irc server to connect-          -> PortID           -- ^ irc port to connect to (usually, 'PortNumber 6667')+          -> PortNumber       -- ^ irc port to connect to (usually, '6667')           -> ByteString       -- ^ irc nick           -> String           -- ^ command prefix           -> User             -- ^ irc user info
Network/IRC/Bot/Types.hs view
@@ -7,7 +7,7 @@ import Data.ByteString          (ByteString) import Data.Data                (Data, Typeable) import Network.IRC              as I-import Network                  (HostName)+import Network.Socket           (HostName)  data User = User     { username   :: ByteString    -- ^ username on client system
demo.hs view
@@ -6,7 +6,7 @@ import Data.ByteString            (ByteString) import qualified Data.ByteString.Char8 as C import Data.Set                   (Set, insert)-import Network                    (HostName, PortID(PortNumber), connectTo)+import Network.Socket      hiding (Debug) import Network.IRC                (Message) import Network.IRC.Bot.BotMonad   (BotMonad(..)) import Network.IRC.Bot.Core       (BotConf(..), User(..), nullBotConf, simpleBot)@@ -39,7 +39,7 @@     ]     where       setIrcServer n = BotConfOpt $ \c -> c { host = n, user = (user c) { servername = n } }-      setPort str    = BotConfOpt $ \c -> c { port = PortNumber (fromIntegral $ read str) }+      setPort str    = BotConfOpt $ \c -> c { port = (fromIntegral $ read str) }       setNick n      = BotConfOpt $ \c -> c { nick = C.pack n }       setUsername n  = BotConfOpt $ \c -> c { user = (user c) { username = C.pack n } }       setHostname n  = BotConfOpt $ \c -> c { user = (user c) { hostname = n } }
ircbot.cabal view
@@ -1,5 +1,5 @@ Name:                ircbot-Version:             0.6.5.3+Version:             0.6.6 Synopsis:            A library for writing IRC bots Description:         A simple library for an IRC bot License:             BSD3@@ -12,7 +12,7 @@ Build-type:          Simple Cabal-version:       >=1.10 Homepage:            https://github.com/stepcut/ircbot-tested-with:         GHC == 7.6.3, GHC == 7.8.4, GHC == 7.10.2, GHC==8.0.2+tested-with:         GHC == 7.10.2, GHC==8.0.2, GHC==8.6.5, GHC==8.8.3, GHC==8.10.1  source-repository head     type:     git@@ -39,17 +39,17 @@    Build-depends:  base       >= 4    && <5,                   bytestring >= 0.10 && < 0.11,-                  containers >= 0.4  && < 0.6,+                  containers >= 0.4  && < 0.7,                   directory   < 1.4,                   filepath   >= 1.2  && < 1.5,                   irc        == 0.6.*,                   mtl        >= 2.0  && < 2.3,-                  network    >= 2.3  && < 2.7,+                  network    >= 3.1  && < 3.2,                   parsec     == 3.1.*,                   time       >= 1.5  && < 1.10,                   unix       >= 2.4  && < 2.8,                   random     >= 1.0  && < 1.2,-                  stm        >= 2.2  && < 2.5,+                  stm        >= 2.2  && < 2.6,                   SafeSemaphore >= 0.10 && < 0.11  Executable demo@@ -57,17 +57,17 @@   ghc-options:         -threaded -rtsopts -with-rtsopts=-N   build-depends:  base       >= 4    && <5,                   bytestring >= 0.10 && < 0.11,-                  containers >= 0.4  && < 0.6,+                  containers >= 0.4  && < 0.7,                   directory   < 1.4,                   filepath   >= 1.2  && < 1.5,                   irc        == 0.6.*,                   mtl        >= 2.0  && < 2.3,-                  network    >= 2.3  && < 2.7,+                  network    >= 3.1  && < 3.2,                   parsec     == 3.1.*,                   time       >= 1.5  && < 1.10,                   unix       >= 2.4  && < 2.8,                   random     >= 1.0  && < 1.2,-                  stm        >= 2.2  && < 2.5,+                  stm        >= 2.2  && < 2.6,                   SafeSemaphore >= 0.10 && < 0.11   other-modules:                     Network.IRC.Bot