irc-fun-client 0.1.1.0 → 0.2.0.0
raw patch · 5 files changed
+46/−2 lines, 5 files
Files
- NEWS +25/−0
- irc-fun-client.cabal +1/−1
- src/Network/IRC/Fun/Client/ChannelLogger.hs +1/−0
- src/Network/IRC/Fun/Client/Events.hs +6/−0
- src/Network/IRC/Fun/Client/NickTracker.hs +13/−1
NEWS view
@@ -3,6 +3,31 @@ +irc-fun-client 0.2.0.0 -- 2015-09-22+====================================++General, build and documentation changes:++* (None)++New APIs, features and enhancements:++* New event constructor, NickChange+* Channel logger can log nick changes+* New nickname tracker function, changeNick++Bug fixes:++* (None)++Dependency changes:++* (None)+++++ irc-fun-client 0.1.1.0 -- 2015-09-10 ====================================
irc-fun-client.cabal view
@@ -1,5 +1,5 @@ name: irc-fun-client-version: 0.1.1.0+version: 0.2.0.0 synopsis: Another library for writing IRC clients. description: This is an IRC client library that uses @irc-fun-messages@ library package
src/Network/IRC/Fun/Client/ChannelLogger.hs view
@@ -113,4 +113,5 @@ Part chan nick _reason -> Just $ Leave nick chan Quit nick _reason -> Just $ LeaveAll nick ChannelMessage chan nick msg _notice -> Just $ Message nick chan msg+ NickChange old new -> Just $ Rename old new _ -> Nothing
src/Network/IRC/Fun/Client/Events.hs view
@@ -61,6 +61,8 @@ -- yes, the client shouldn't send any automatic response. Parameters: -- Nickname, message, whether notice. | PrivateMessage String String Bool+ -- | A user's nickname has changed. Parameters: Old nick, new nick.+ | NickChange String String -- | Channel topic change. Parameterss: Channel, nickname of user who -- changed the topic, new topic content. | Topic String String String@@ -79,6 +81,10 @@ detectMessageEvents :: SpecificMessage -> Either String [Event] detectMessageEvents sm@(SpecificMessage mpref msg) = case msg of+ NickMessage newnick ->+ if null sender+ then err+ else one $ NickChange sender newnick QuitMessage reason -> if null sender then err
src/Network/IRC/Fun/Client/NickTracker.hs view
@@ -14,7 +14,7 @@ -} -- | Using the tools provided here, you can track which users are members of--- which channels. This functionality has a veriety of uses, e.g. displaying+-- which channels. This functionality has a variety of uses, e.g. displaying -- user lists in client UI and logging/displaying quit messages in the correct -- channel logs/buffers. module Network.IRC.Fun.Client.NickTracker@@ -27,6 +27,7 @@ , newNetwork , addMember , addToChannel+ , changeNick , addChannel , removeMember , removeFromChannel@@ -87,6 +88,17 @@ Just (ChannelTracker nicks) -> let ct = ChannelTracker $ S.insert nick nicks in M.insert chan ct chans++-- | Record a nickname change. Remove old nickname from the channels in which+-- it's present, and add the new nickname to them.+changeNick :: NickName -> NickName -> NetworkTracker -> NetworkTracker+changeNick old new (NetworkTracker cts) = NetworkTracker $ f cts+ where+ f chans =+ let chansP = M.filter (old `isMemberOf`) chans+ chansR = M.map (removeMember old) chansP+ chansN = M.map (addMember new) chansR+ in chansN `M.union` chans -- | Record a channel with the given present nicknames. addChannel :: ChannelName -> [NickName] -> NetworkTracker -> NetworkTracker