!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~     SafeThe O keeps track of rate limit settings as well as the current state of the limit.`Construct a new rate limit with the RFC 2813 specified 2 second penalty and 10 second threshold@Construct a new rate limit with the given penalty and threshold.)Account for an event in the context of a . This command will block and delay as required to satisfy the current rate. Once it returns it is safe to proceed with the rate limited action. !" penalty  threshold  !"Safe#CCompatibility indirection for time-1.4.2 and time-1.5 compatibility#Format string Input string ##Safe?Case insensitive identifier representing channels and nicknames breaks down the IRC protocol into its most basic parts. The "trailing" parameter indicated in the IRC protocol with a leading colon will appear as the last parameter in the parameter list.8Note that RFC 2812 specifies a maximum of 15 parameters. .:prefix COMMAND param0 param1 param2 .. paramN  d packages a nickname along with the username and hsotname if they are known in the current context. Construct an  from a $Returns the original $ of an Returns the case-normalized $ of an # which is suitable for comparison.mAttempt to split an IRC protocol message without its trailing newline information into a structured message.%RFC 2812 specifies that there can only be up to 14 "middle" parameters, after that the fifteenth is the final parameter and the trailing : is optional!&Parse a whole IRC message assuming that the trailing newlines have already been removed. This parser will parse valid messages correctly but will also accept some invalid messages. Presumably the server isn't sending invalid messages!'WParse the list of parameters in a raw message. The RFC allows for up to 15 parameters.(EParse the server-time message prefix: @time=2015-03-04T22:29:04.064Z)-Take the bytes up to the next space delimiterZTake the bytes up to the next space delimiter. If the first character of this token is a :* then take the whole remaining bytestringRender   as nick!username@hostnameSplit up a hostmask into a nickname, username, and hostname. The username and hostname might not be defined but are delimited by a ! and @ respectively.xSerialize a structured IRC protocol message back into its wire format. This command adds the required trailing newline.*Build concatenate a list of parameters into a single, space- delimited bytestring. Use a colon for the last parameter if it contains a colon or a space.+^When the first parser succeeds require the second parser to succeed. Otherwise return NothingcCapitalize a string according to RFC 2812 Latin letters are capitalized and {|}~ are mapped to []^&, %&'(-.)/*+012345   ,  %&'(-.)/*+012345Safe Construct a MODE command !MODE target *(mode) *(modeparams)Construct a KICK command@KICK channel nick msgConstruct a REMOVE command@REMOVE channel nick msgConstruct a JOIN command. A join command can support multiple channels separated by commas, and takes an optional channel key. JOIN channel [key]Construct a PART command. PART channel messageUConstruct a TOPIC command. This is used to lookup the current topic or to change it. TOPIC channel messageConstruct a WHOIS command.  WHOIS user Construct a WHOWAS command.  WHOWAS user!`Construct a NICK command. This is used to specify the initial nickname as well as to change it.  NICK nickname"bConstruct a USER command. This is used in the initial handshake to specify username and realname. USER username 0 * realname#bConstruct a PING command. This is used to respond to the PING command to keep a connection alive.  PONG token$bConstruct a PONG command. This is used to respond to the PING command to keep a connection alive.  PONG token%jConstruct a PASS command. This is used in the initial handshake to specify a password for the connection.  PASS password&Construct a CAP LS command. This is used during the inital connection to request a list of extensions that are supported by the server. It should be followed by CAP REQ and eventually CAP END commands. CAP LS'|Construct a CAP REQ command. This is used to request a subset of the capabilities returned in response to a CAP LS command. CAP REQ :cap0 cap1 .. capN(kConstruct a CAP END command. This terminates the capability negotiation portion of the initial connection. CAP END)_Construct a PRIVMSG command. This send normal chat messages to both users as well as channels. PRIVMSG target message,^Construct a NOTICE command. This send notice chat messages to both users as well as channels. NOTICE target message-"Construct an AUTHENTICATE command. AUTHENTICATE message.Construct a HELP command.  HELP topic/Construct an AWAY command. AWAY away_message0Construct a QUIT command. QUIT quit_message1Construct a LIST command. LIST  channel *(","  channel)2Construct a INVITE command. INVITE  nickanme channel3Construct a NAMES command. NAMES [  channel *(","  channel)4Construct an OPER command. OPER  name password5Construct a WHO command. WHO mask6Construct a KNOCK command. KNOCK channel7Construct an ACCEPT command. ACCEPT nick8Construct an TIME command. TIME [ server]>9Construct an ADMIN command. ADMIN [ server]>:Construct a STATS command. STATS  letter [ server]>#6target modes and params channel nick msg channel nick msg channel message channel topic user user ! nickname " username  realname #token $token % password &'()target message *target command  parameters +target command  parameters ,target message -message .topic /message 0message 1 channels 2 nickname  channel 3 channels 4name  password 5mask 6channel 7nick, -nick, * 8server 9server :target " !"#$%&'()*+,-./0123456789:"%!"40312)*+, 5$#&'(-/.6789:#6 !"#$%&'()*+,-./0123456789:Safe<401= 402 server>403?404@405A406B407C409D411E412F 421 commandG422H 423 serverI431J 432 badnickK433 nickL435M437N438O440P441 nickQ 442 channelR443 nickS451T456U457V458W 461 commandX462Y463Z464[465\470 dstchannel] 471 channel^472 mode_473`474a475b477c478 moded479 namee480f481g482h483i484 nickj486k489l491m494n501 modeo502p 524 topicq713r713s714t716u723 privv742 mode settingww provides a typed view of the various IRC protocol messages. There are more messages defined for IRC (and many of those overlap) than are in common use. Please report a bug if a common message is missing from this type.x@001 "Welcome to the Internet Relay Network <nick>!<user>@<host>"y6002 "Your host is <servername>, running version <ver>"z$003 "This server was created <date>"{004 servername version *(modes)|005 *(KEY=VALUE)} 008 snomask~ 042 unique-id 211 arguments 212 arguments 213 arguments 214 arguments 215 arguments 216 arguments 217 arguments 218 arguments219 mode 220 arguments221 modes *(params)225240241242243244245246247248249250 connectionK251 "There are <integer> users and <integer> services on <integer> servers"252 number-of-ops253 number-of-unknown254 number-of-channels4255 "I have <integer> clients and <integer> servers" 256 server257 admin-info-1258 admin-info-2259 admin-email 263 command265 [local] [max] txt266 [global] [max] txt270 privstring 276 nick txt281282301 nick away_message302 *(user hosts) 303 *(nick)(inspircd) 304 text305306311 nick user host realname312 nick server serverinfo313 nick "is an IRC operator"314 nick user host realname 315 channel317 nick idle signon318 nick319 nick channels321322 channel usercount topic323324 channel modes *(params) 331 channel332 channel topic328 channel url329 channel timestamp330 nick account333 channel nickname timestamp341 nick channel346 channel mask who timestamp 347 channel348 channel mask who timestamp 349 channel351 version server comments+352 channel user host server nick flags txt353 channeltype channel names364 mask server info365 mask 366 channel#367 channel banned banner timestamp 368 channel369 nick372 line-of-motd3753761391 server "<string showing server's local time>"371 info374 378 nick host379 nick modes *(args)381 text 396 hostname671 nick704 topic text705 topic text706 topic text 710 channel 711 channel717 nick 718 nick mask#728 channel mode mask who timestamp729 channel mode 900 account901902903904905906907908 comma-sep-mechs789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~;<;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~wxyz{|}~;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuv789:;;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~;<None      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!            !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~None*Event types and associated fields used by .ctcp command and argumentsctcp command and argumentsr represents a high-level event to be communicated out to the library user when something changes on a connection.666None-CINa is the type of user-level metadata tracked for the users visible on the current IRC connection.IMask entries are used to represent an entry in a ban list for a channel. represents the current state of a channel as seen on the connection. It includes all user lists, modes, and other metadata about a channel.5Settings that describe how to interpret channel modesz is the state of an IRC connection. It maintains channel membership, user and channel modes, and other connection state." value with everything unspecified"The channel modes used by Freenode(The default UMODE as defined by Freenode=Default value for  with everything unspecified.0This represents the metadata of an unknown user.mPrimary state machine step function. Call this function with a timestamp and a server message to update the L state. If additional messages are required they will be requested via the   type.>ZEvent handler when receiving a new privmsg. The message will be passed along as an event.?GRecord the new topic as set by the given user and emit a change event.@.Mark all the given nicks as active (not-away).\Split up a mode change command and arguments into individual changes given a configuration.A Update an  when a user changes nicknames.B Update the " when a user parts from a channel.C Update an & when a user is kicked from a channel.D Update an  with the quitting of a user.ECompute the nickname and channel modes from an entry in a NAMES reply. The leading channel prefixes are translated into the appropriate modes. Execute the  G value using a given operation for sending and recieving IRC messages.FAdd a message to the client state for users and channels. The user or channel record should be added if it does not already exist.[Predicate to determine if a given identifier is the primary nick for the given connection.Predicate for identifiers to identify which represent channel names. Channel prefixes are configurable, but the most common is #?Predicate for identifiers to identify which represent nicknamesGHIJ=K   L  M  (key,value)NOPQnicks Rnick Snick  user@host Tchannel members topic U nickname  away message Vchannel error >sender message target message W? changed by channel  topic text XY raw, spaces delimited caps list Z username  password [Channel modes mode parameters \@ active nicks ]who target modes changed arguments ^ (+/-,mode,argument)_ (+/-,mode,argument)changer channel ` settings  timestamp changer +/- mode  argument mode interpretation modes arguments aAold user infomation new nickname Buser information channel part reason C kicker  channel  kicked  kick reason bcD user info  quit reason d who joined  account name  channel efgwho message hE  (mode,prefix)names entry (nickname, modes) ijklFtarget nick mode channel channel mode h     h     eGHIJ=K   L  MNOPQRSTUV>W?XYZ[\@]^_`aABCbcDdefghEijklFm      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~       !"#$%&'()*+,- ./0123456789:;<=>?@ABCDEFGHIJKL MNOPQRSTUVWXYZ[\]^_`abcdefghijklmircco_2Bs9HVbu9aCEHZkzKfyTry Irc.RateLimit Irc.FormatIrc.CmdIrc.CoreIrc.Core.Prisms Irc.Message Irc.ModelIrc.Time RateLimitnewRateLimitDefault newRateLimit tickRateLimit Identifier RawIrcMsgmsgTime msgPrefix msgCommand msgParamsUserInfouserNickuserNameuserHostmkIdidBytesidDenoteparseRawIrcMsgrenderUserInfo parseUserInforenderRawIrcMsg ircFoldCaseasUtf8modeCmdkickCmd removeCmdjoinCmdpartCmdtopicCmdwhoisCmd whowasCmdnickCmduserCmdpingCmdpongCmdpassCmdcapLsCmd capReqCmd capEndCmd privMsgCmdctcpRequestCmdctcpResponseCmd noticeCmdauthenticateCmdhelpCmdawayCmdquitCmdlistCmd inviteCmdnamesCmdoperCmdwhoCmdknockCmd acceptCmdtimeCmdadminCmdstatsCmdIrcError ErrNoSuchNickErrNoSuchServerErrNoSuchChannelErrCannotSendToChanErrTooManyChannelsErrWasNoSuchNickErrTooManyTargets ErrNoOriginErrNoRecipientErrNoTextToSendErrUnknownCommand ErrNoMotdErrNoAdminInfoErrNoNicknameGivenErrErroneousNicknameErrNicknameInUseErrBanNickChangeErrUnavailResourceErrNickTooFastErrServicesDownErrUserNotInChannelErrNotOnChannelErrUserOnChannelErrNotRegistered ErrAcceptFullErrAcceptExist ErrAcceptNotErrNeedMoreParamsErrAlreadyRegisteredErrNoPermForHostErrPasswordMismatchErrYoureBannedCreepErrLinkChannelErrChannelFullErrUnknownModeErrInviteOnlyChanErrBannedFromChanErrBadChannelKeyErrNeedReggedNickErrBanListFullErrBadChanName ErrThrottleErrNoPrivilegesErrChanOpPrivsNeededErrCantKillServerErrIsChanService ErrNoNonRegErrVoiceNeeded ErrNoOperHost ErrOwnModeErrUnknownUmodeFlagErrUsersDontMatchErrHelpNotFoundErrTooManyKnocks ErrChanOpenErrKnockOnChan ErrTargUmodeG ErrNoPrivsErrMlockRestricted MsgFromServer RplWelcome RplYourHost RplCreated RplMyInfo RplISupport RplSnoMask RplYourIdRplStatsLinkInfoRplStatsCommands RplStatsCLine RplStatsNLine RplStatsILine RplStatsKLine RplStatsQLine RplStatsYLine RplEndOfStats RplStatsPLine RplUmodeIs RplStatsDLine RplStatsVLine RplStatsLLineRplStatsUptime RplStatsOLine RplStatsHLine RplStatsSLine RplStatsPing RplStatsXLine RplStatsULine RplStatsDebug RplStatsConnRplLuserClient RplLuserOpRplLuserUnknownRplLuserChannels RplLuserMeRplLuserAdminMeRplLuserAdminLoc1RplLuserAdminLoc2RplLuserAdminEmailRplLoadTooHigh RplLocalUsersRplGlobalUsersRplPrivsRplWhoisCertFp RplAcceptListRplEndOfAcceptRplAway RplUserHostRplIsOn RplSyntax RplUnAway RplNowAway RplWhoisUserRplWhoisServerRplWhoisOperator RplWhoWasUser RplEndOfWho RplWhoisIdle RplEndOfWhoisRplWhoisChannels RplListStartRplList RplListEndRplChannelModeIs RplNoTopicSetRplTopic RplChannelUrlRplCreationTimeRplWhoisAccountRplTopicWhoTime RplInviting RplInviteListRplEndOfInviteListRplExceptionListRplEndOfExceptionList RplVersion RplWhoReply RplNameReplyRplLinks RplEndOfLinks RplEndOfNames RplBanListRplEndOfBanListRplEndOfWhoWasRplMotd RplMotdStart RplEndOfMotdRplTimeRplInfo RplEndOfInfo RplWhoisHost RplWhoisModes RplYoureOper RplHostHiddenErrRplWhoisSecure RplHelpStartRplHelp RplEndOfHelpRplKnockRplKnockDelivered RplTargNotify RplUmodeGMsg RplQuietListRplEndOfQuietList RplLoggedIn RplLoggedOut RplNickLockedRplSaslSuccess RplSaslFailRplSaslTooLongRplSaslAbortedRplSaslAlready RplSaslMechsAwayPingPongNoticeTopicPrivMsgExtJoinJoinNickModeQuitCapKickPartInviteError AuthenticateAccountircMsgToServerMsg _RplWelcome _RplYourHost _RplCreated _RplMyInfo _RplISupport _RplSnoMask _RplYourId_RplStatsLinkInfo_RplStatsCommands_RplStatsCLine_RplStatsNLine_RplStatsILine_RplStatsKLine_RplStatsQLine_RplStatsYLine_RplEndOfStats_RplStatsPLine _RplUmodeIs_RplStatsDLine_RplStatsVLine_RplStatsLLine_RplStatsUptime_RplStatsOLine_RplStatsHLine_RplStatsSLine _RplStatsPing_RplStatsXLine_RplStatsULine_RplStatsDebug _RplStatsConn_RplLuserClient _RplLuserOp_RplLuserUnknown_RplLuserChannels _RplLuserMe_RplLuserAdminMe_RplLuserAdminLoc1_RplLuserAdminLoc2_RplLuserAdminEmail_RplLoadTooHigh_RplLocalUsers_RplGlobalUsers _RplPrivs_RplWhoisCertFp_RplAcceptList_RplEndOfAccept_RplAway _RplUserHost_RplIsOn _RplSyntax _RplUnAway _RplNowAway _RplWhoisUser_RplWhoisServer_RplWhoisOperator_RplWhoWasUser _RplEndOfWho _RplWhoisIdle_RplEndOfWhois_RplWhoisChannels _RplListStart_RplList _RplListEnd_RplChannelModeIs_RplNoTopicSet _RplTopic_RplChannelUrl_RplCreationTime_RplWhoisAccount_RplTopicWhoTime _RplInviting_RplInviteList_RplEndOfInviteList_RplExceptionList_RplEndOfExceptionList _RplVersion _RplWhoReply _RplNameReply _RplLinks_RplEndOfLinks_RplEndOfNames _RplBanList_RplEndOfBanList_RplEndOfWhoWas_RplMotd _RplMotdStart _RplEndOfMotd_RplTime_RplInfo _RplEndOfInfo _RplWhoisHost_RplWhoisModes _RplYoureOper_RplHostHidden_Err_RplWhoisSecure _RplHelpStart_RplHelp _RplEndOfHelp _RplKnock_RplKnockDelivered_RplTargNotify _RplUmodeGMsg _RplQuietList_RplEndOfQuietList _RplLoggedIn _RplLoggedOut_RplNickLocked_RplSaslSuccess _RplSaslFail_RplSaslTooLong_RplSaslAborted_RplSaslAlready _RplSaslMechs_Away_Ping_Pong_Notice_Topic_PrivMsg_ExtJoin_Join_Nick_Mode_Quit_Cap_Kick_Part_Invite_Error _Authenticate_AccountIrcMessageType PrivMsgType NoticeMsgType ActionMsgType AwayMsgType JoinMsgType KickMsgType PartMsgType QuitMsgType NickMsgType TopicMsgType ErrorMsgType ErrMsgType ModeMsgType InviteMsgType KnockMsgTypeCallerIdMsgTypeCallerIdDeliveredMsgTypeCtcpReqMsgTypeCtcpRspMsgType IrcMessage _mesgType _mesgSender _mesgStamp_mesgMe _mesgModes _mesgStatusdefaultIrcMessagemesgMe mesgModes mesgSender mesgStamp mesgStatusmesgType _PrivMsgType_NoticeMsgType_ActionMsgType _AwayMsgType _JoinMsgType _KickMsgType _PartMsgType _QuitMsgType _NickMsgType _TopicMsgType _ErrorMsgType _ErrMsgType _ModeMsgType_InviteMsgType _KnockMsgType_CallerIdMsgType_CallerIdDeliveredMsgType_CtcpReqMsgType_CtcpRspMsgTypeIrcUser_usrAway _usrAccount_usrHost IrcMaskEntry_maskEntryMask _maskEntryWho_maskEntryStamp IrcChannel _chanTopic _chanUsers _chanModes _chanCreation_chanMaskLists_chanUrl ModeTypes _modesLists_modesAlwaysArg _modesSetArg_modesNeverArg_modesPrefixModesPhaseRegistrationPhase ActivePhase SaslPhase IrcConnection _connNick _connChannels_connId_connChanTypes_connStatusMsg _connKnock _connNickLen _connExcepts _connInvex _connUsers_connChanModeTypes_connUserModeTypes _connModes _connTopicLen _connMyInfo _connSasl _connUmode _connSnoMask _connPhasedefaultIrcConnectiondefaultChanModeTypesdefaultUmodeTypesdefaultIrcUserconnChanModeTypes connChannels connExceptsconnId connInvex connKnock connModes connMyInfoconnNick connNickLen connPhaseconnSasl connSnoMask connStatusMsg connTopicLen connUmodeconnUserModeTypes connUsers chanCreation chanMaskLists chanModes chanTopicchanUrl chanUsers usrAccountusrAwayusrHost maskEntryMaskmaskEntryStamp maskEntryWhoLogicLogicOpExpectEmitRecordmodesAlwaysArg modesLists modesNeverArgmodesPrefixModes modesSetArg advanceModel unsplitModes splitModesrunLogicisMyNick isChannelName isNickNamesplitStatusMsgnickHasModeInChannelchannelHasMode rateStamp rateThreshold ratePenalty myParseTimebytes_6vj5EoliHgNHISHCVCb069Data.ByteString.Internal ByteStringmaxMiddleParamsrawIrcMsgParser paramsParser timeParsersimpleTokenParser buildParamsguarded parseIrcTime prefixParser renderPrefixcasemap decodeCP1252cp1252$fIsStringIdentifier$fOrdIdentifier$fEqIdentifier outgoingMsg ChannelType SecretChannelPrivateChannel PublicChannel asTimeStampasNumberdefaultChannel doPrivMsgdoTopicdoIsOndoNickdoPartdoKickdoQuitsplitNamesReplyName recordMessageFuzzyKnownUnknownNone connChanTypes doISupportsupportupdateChanModesupdateChanPrefix doAcceptListdoCallerIdDeliver doCallerIddoList doAwayReplydoChannelErrorparseCtcpCommanddoCapLsdoCapAckencodePlainAuthenticationdoChannelModeIs doServerError doModeChangedoUserModeChangesdoChannelModeChangesinstallModeChange doMaskListupdateUserRecord doWhoReply doJoinChannel learnUserInfodoNotifyChanneldoServerMessage doNameReplygetStamp recordFor getMessage sendMessage