?!7G      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrst u v w x y z { | } ~  Safesimple rate limiter(c) 2012 Eric MertensBSD3jeremy@seereason.comstableportableSafe "Construct a new rate limit control Execute this before sending#Loop which manages the limit timers  max burst lengthdelay (in microseconds)    None!"0username on client systemhostname of client system!irc server client is connected toclient's real name     Safe0None /9:;<=I$%&'()*+,-./0123456789:;$%&'()*+,-.34/0125678$%&./012345'()*+,-678 $%&'()*+,-./0123456789:;None0Y1get the nickname of the user who sent the messageZ'figure out who to reply to for a given VIf message was sent to a #channel reply to the channel. Otherwise reply to the sender.[!returns the receiver of a message0if multiple receivers, it returns only the firstHIJKLMNOPQRSTUVWXYZ[\]HIJKLMNPOQRSTUVWXYZ[STQRULMNOPVWJKXHI]\YZ[HIJKLMNOPQRSTUVWXYZ[\]NoneklklklklNone:nparse a positive integeroparser that checks for the - (from the ')p6create a bot part by using Parsec to parse the commandThe argument to p is a parser function.,The argument to that parsec function is the target% that the response should be sent to.The parser will receive the P from the L.see dicePart for an example usage.mnopqrsmnopqrsmnopqrmnopqrs Nonetutututu None!"0vBot configurationx!optional channel logging functiony app loggingzirc server to connect{3irc port to connect to (usually, 'PortNumber 6667')|irc nick}command prefix~ irc user infochannel to join%(burst length, delay in microseconds)5connect to irc server and send NICK and USER commandsRsimpleBot connects to the server and handles messages using the supplied BotPartTsthe 'Chan Message' for the optional logging function will include all received and sent messages. This means that the bots output will be included in the logs.SsimpleBot' connects to the server and handles messages using the supplied BotPartTsthe 'Chan Message' for the optional logging function will include all received and sent messages. This means that the bots output will be included in the logs.call  if . Do nothing for Nothing.vwxyz{|}~loggingBot configurationbot parts (must include pingPart, or equivalent)F for all forked handler threads and a function that forces a reconnect optional logging functionapplication logging;rate limiter settings (burst length, delay in microseconds)irc server to connect3irc port to connect to (usually, 'PortNumber 6667')irc nickcommand prefix irc user infobot parts (must include pingPart,  channelsPart, and 'nickUserPart)' H for all forked handler threads and an IO action that forces a reconnect vw~|xyz{}vwxyz{|}~  v wxyz{|}~ None None NoneNoneNoneK $%&'()*+,-.34/0125678HIJKLMNPOQRSTUVWXYZ[mnopqrvw~|xyz{} !"#$%&'()*+,-./012234456789:;<=>?@ABCDEFGHIJKLMNOPQRSTTUVWWXYZ[[\]^_`abcdefghijklmnopqrstuvwxyz{| } ~     #ircbot-0.6.5-GGWTwieGv9261oYgyhyPjvNetwork.IRC.Bot.ErrorCodesNetwork.IRC.Bot.LimiterNetwork.IRC.Bot.TypesNetwork.IRC.Bot.LogNetwork.IRC.Bot.BotMonadNetwork.IRC.Bot.CommandsNetwork.IRC.Bot.PosixLoggerNetwork.IRC.Bot.ParsecNetwork.IRC.Bot.Part.NickUserNetwork.IRC.Bot.CoreNetwork.IRC.Bot.Part.ChannelsNetwork.IRC.Bot.Part.DiceNetwork.IRC.Bot.Part.HelloNetwork.IRC.Bot.Part.PingNetwork.IRC.BotnoNicknameGivenerroneusNickname nicknameInUse nickCollisionLimiterlimitsIn limitsOut limitsDelaylimitsThreadId newLimiterlimitUserusernamehostname servernamerealnamenullUser $fDataUser$fEqUser $fOrdUser $fReadUser $fShowUserLoggerLogLevelDebugNormal Important stdoutLogger nullLogger $fEqLogLevel $fOrdLogLevel$fReadLogLevel$fShowLogLevel$fDataLogLevelBotPartT unBotPartTBotEnvmessageoutChanlogFnbotName cmdPrefixBotMonad askBotEnv askMessage askOutChan localMessage sendMessagelogMwhoami runBotPartT mapBotPartT maybeZero$fBotMonadBotPartT$fMonadRWSrwsBotPartT$fMonadReaderrBotPartT$fApplicativeBotPartT$fAlternativeBotPartT$fFunctorBotPartT$fMonadBotPartT$fMonadFixBotPartT$fMonadPlusBotPartT$fMonadTransBotPartT$fMonadIOBotPartT$fMonadWriterBotPartT$fMonadStateBotPartT$fMonadErrorBotPartT$fMonadContBotPartTPong ToMessage toMessagePrivMsgprefix receiversmsgPingHostNamecmdpingprivMsg toPrivMsg sendCommandaskSenderNickNamereplyTo askReceiver$fToMessagePrivMsg$fToMessagePong$fEqPing $fOrdPing $fReadPing $fShowPing $fDataPing $fEqPrivMsg $fReadPrivMsg $fShowPrivMsg$fEqPong $fOrdPong $fReadPong $fShowPong $fDataPong posixLoggerfdWrites mapParsecTnat botPrefix parsecPart reportErrorshowErrorMessages$fBotMonadParsecT nickUserPartchangeNickUserBotConf channelLoggerloggerhostportnick commandPrefixuserchannelslimits nullBotConf simpleBot simpleBot'initChannelsPart channelsPart joinChanneldicePart diceCommand helloPart helloCommandpingPartlimiter!irc-0.6.1.0-EjlcXuDddgQSR9uABAiHONetwork.IRC.BaseMessage ircConnectwriteMaybeChanbaseControl.Concurrent.Chan writeChanGHC.BaseJustpartLoopircLoopconnectionLoopircConnectLoop doConnect reconnect onConnectLoop GHC.Conc.SyncThreadId