g      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefNone _Make a getter which returns the current time, and a formatted time string for use in IRC logs.ghi   ghi Safe -Check if a message mentions a given nickname.This isn't the same as substring search, since the nickname could appear inside a longer word. For example, "ron" isn't really mentioned in "asynchronic". Therefore, this function is a bit smarter about this, trying to capturing real mentions, and works quite well in practice.j Message contentNickname  j None1Check whether a nickname is present in a channel.1Check whether a nickname is present in a channel..Check in which channels a nickname is present.2Record a channel with the given present nicknames.Create new tracker.-Record a nickname being present in a channel.-Record a nickname being present in a channel.yRecord a nickname change. Remove old nickname from the channels in which it's present, and add the new nickname to them.2Record a channel with the given present nicknames.5Record a channel not having a given nickname anymore.5Record a channel not having a given nickname anymore.;Record a nickname not being present in any channel anymore."Remove a channel from the tracker.!Remove channels from the tracker. k     kNone!Details of the connection to IRC.IRC Server address, e.g. "irc.freenode.net" IRC server port, 6667 should be a safe default!AWhether to make an encrypted connection via TLS (not implemented)"IRC nickname for the bot, e.g. "funbot"#6Connection password, use if the nickname is registered$Connect to an IRC server using the given connection parameters, and return a handle to the open socket. This just opens a TCP connection, without sending any IRC commands.%Disconnect from IRC by closing the client's side of the connection. This function is mainly provided for completeness. You should probably use the QUIT command of IRC to quit the network in a manner coordinated with the server.&sSend an IRC command, given in string form, to the server. The given command string shouldn't contain any newlines.'>Send an IRC message represented in generic form to the server.("Send an IRC message to the server.)lReceive an IRC message, given in string form, from the server. The resulting string won't contain newlines.*lReceive an IRC message in generic form from the server. If parsing the message read from the server fails, l is returned.+ A variant of * which returns m the message if parsing fails.,ZReceive the next valid (successfully parsed) IRC message in generic form from the server.- A variant of ,; which also returns a list of erronous IRC lines received..\Receive an IRC message from the server. If parsing the message read from the server fails, l is returned./ A variant of . which returns m- some information if parsing/analysis fails.0IReceive the next valid (successfully parsed) IRC message from the server.1 A variant of 0Q which also returns a list of error messages for IRC lines whose parsing failed. !"#$%&'()*+,-./01 !"#$%&'()*+,-./01 !"#$%&'()*+,-./01 !"#$%&'()*+,-./01None2:An event triggered by an IRC message sent from the server.3A ping was sent to the bot. The parameters are the server name and optionally a server to forward the response to. They can be passed as-is directly to the PONG response.4#A ping response sent by the server.5zOne or more users have been kicked from a channel for an optionally given reason. Parameters: Channel, nicknames, reason.67A user joined a channel. Parameters: Channel, nickname.7^A user left a channel, optionally with a given reason. Parameters: Channel, nickname, reason.8WA user left the network, optonally for the given reason. Parameters: Nickname, reason.9TODO:Message sent in a channel by a user. The last parameter indicates whether the message is actually a notice. If yes, the client shouldn't automatically send a response. Parameters: Channel, nickname, message, whether notice.;1A channel message that is a virtual action (/me).<A private message sent specifically to the client from a user. The last parameter indicates whether the message is actually a notice. If yes, the client shouldn't send any automatic response. Parameters: Nickname, message, whether notice.=1A private message that is a virtual action (/me).>>A user's nickname has changed. Parameters: Old nick, new nick.?gChannel topic change. Parameterss: Channel, nickname of user who changed the topic, new topic content.@jThe client has been invited to a channel by another user. Parameters: Channel, nickname of inviting user.AThe server sent a list of nicknames present in a channel. Parameters: Channel privacy mode, channel name, list of users. Each list item is a pair of a user privilege level in the channel, and the user's nickname.C9Try to generate events from an IRC message. If it fails, m+ an error message is returned. Otherwise, n) a list of generated events is returned.D?Receive IRC events. If parsing and detecting the events fails, l is returned.E A variant of D which returns m1 an error message if parsing or detection fails.FPReceive the next valid (successfully parsed and detected) series of IRC events.G A variant of Fe which returns a list of error messages for received IRC lines whose parsing/event detection failed.23456789:;<=>?@ABopCDEFG23456789:;<=>?@ABCDEFG23456789:;<=>?@ABCDEFG23456789:;<=>?@ABopCDEFGNone HbLog in as an IRC user with nickname and optional password, using the given connection parameters.IIRC servers send PING messages at regular intervals to test the presence of an active client, at least if no other activity is detected on the connection. The server closes the connection automatically if a PONG response isn't sent from the client within a certain amount of time.Therefore, an IRC client usually listens to these PINGs and sends back PONG messages. This function sends a PONG. The parameters should simply be the ones received in the PING message.JJoin an IRC channel.KJoin one or more IRC channels.LLeave an IRC channel.MLeave one or more IRC channels.N"Leave all IRC channels you joined.O&Send a private message to an IRC user.P*Send a private /me message to an IRC user.Q!Send a message to an IRC channel.R%Send a /me message to an IRC channel.SBFinish the IRC session, asking the server to close the connection. H*Handle to the open socket, returned from $Connection configuration'Whether you want to be invisible (mode +i)&Whether you want to see wallops (mode +w)IHandle to the open socket Server nameOptional server to forward toJHandle to the open socket Channel nameOptional channel key (password)KHandle to the open socket%List of channels and optional keysLMNOHandle to the open socketThe user's nicknameThe message to sendPHandle to the open socketThe user's nicknameThe message to sendQHandle to the open socketThe channel nameThe message to sendRHandle to the open socketThe channel nameThe message to sendSHandle to the open socket*Optional message, e.g. the reason you quit HIJKLMNOPQRS HIJKLMNOPQRS HIJKLMNOPQRSNoneb)Utility for constructing a log file path.c(Create a logger for a given IRC channel.d$Flush buffers and release resources.When the logger is paused for a long period of time (i.e. not momentarily - e.g. by a user disabling channel logging via UI), you can use this to release resources. Later, when logging is needed again, create a fresh new logger.If your client joins many channels but log few of them, you can save resources by keeping open loggers only for the few logged channels.e3Write a log message corresponding to a given event.frIf an IRC client event can be logged, return a matching log event and the channel in which the event has occured.TUVWXYZ[\]^_`aqrsbaDirectory in which to place log files. Relative to the program's working directory, or absolute.Server label, e.g.  "freenode"IRC channel name, e.g.  "#freepost"c;Action which returns a formatted time string. You can use Network.IRC.Fun.Client.Time to create such an action.Path of the log filedtuefTUVWXYZ[\]^_`abcdefa[\]^_`TUVWXYZbcdef TUVWXYZ[\]^_`aqrsbcdtuefNonev          !"#$%&'(()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstu vw xy xz{|k}~ircfu_IC6ZqzTdHKD3vL4751mdY7Network.IRC.Fun.Client.IONetwork.IRC.Fun.Client.EventsNetwork.IRC.Fun.Client.TimeNetwork.IRC.Fun.Client.Util"Network.IRC.Fun.Client.NickTrackerNetwork.IRC.Fun.Client.Commands$Network.IRC.Fun.Client.ChannelLoggerNetwork.IRC.Fun.ClientbaseGHC.IO.Handle.TypesHandleircfu_5LW9INpEfMW0U2BaC9jlWM'Network.IRC.Fun.Messages.Internal.TypesOperatorVoiceRegular PrivilegePublicPrivateSecretChannelPrivacycurrentTimeGettermentionsNetworkTrackerChannelTracker isMemberOf isInChannelpresence newChannel newNetwork addMember addToChannel changeNick addChannel removeMemberremoveFromChannelremoveFromNetwork removeChannelremoveChannels Connection connServerconnPortconnTlsconnNick connPassword ircConnect ircDisconnect hPutIrcRawhPutIrcGenerichPutIrc hGetIrcRawhGetIrcGenericOncehGetIrcGenericOnce'hGetIrcGenerichGetIrcGeneric' hGetIrcOnce hGetIrcOnce'hGetIrchGetIrc'EventPingPongKickJoinPartQuitModeChannelMessage ChannelActionPrivateMessage PrivateAction NickChangeTopicInviteNames OtherEvent detectEventshGetIrcEventsOncehGetIrcEventsOnce' hGetIrcEventshGetIrcEvents'ircLoginircPongircJoin ircJoinMultiircPart ircPartMulti ircPartAll ircSendToUser ircActToUserircSendToChannelircActToChannelircQuitLogEventEnterLeaveLeaveAllMessageActionRename ChanLogEvent EnterChan LeaveChan MessageChan ActInChan RenameInChanLogger logFilePath newLogger removeLoggerlogEventfromClientEventformatactionsettings isNameCharapplySndGHC.BaseNothing Data.EitherLeftRightdetectMessageEventsdetectReplyEvents loggerSet loggerGetTime formatEvent formatLine