ó ‹ÛHc @s dZddlZddlZddlZddlZddlZddlZddlZddlZdddfZ dZ de fd„ƒYZ dfd „ƒYZ ejd ƒZd fd „ƒYZd e fd„ƒYZdefd„ƒYZejdƒZdefd„ƒYZde fd„ƒYZdefd„ƒYZdfd„ƒYZdfd„ƒYZdZdZdZidd 6d!d"6d#d$6ee6Zejed%ƒZd&„Zd'Zej ej!eZ"ej#ej$d(ej%d)ƒZ&d*„Z'd+„Z(d,„Z)d-„Z*d.„Z+d/„Z,d0„Z-d1„Z.d2„Z/d3„Z0d4„Z1d5d6„Z2d7„Z3ižd8d96d:d;6d<d=6d>d?6d@dA6dBdC6dDdE6dFdG6dHdI6dJdK6dLdM6dNdO6dPdQ6dRdS6dTdU6dVdW6dXdY6dZd[6d\d]6d^d_6d`da6dbdc6ddde6dfdg6dhdi6djdk6dldm6dndo6dpdq6drds6dtdu6dvdw6dxdy6dzd{6d|d}6d~d6d€d6d‚dƒ6d„d…6d†d‡6dˆd‰6dŠd‹6dŒd6dŽd6dd‘6d’d“6d”d•6d–d—6d˜d™6dšd›6dœd6dždŸ6d d¡6d¢d£6d¤d¥6d¦d§6d¨d©6dªd«6d¬d­6d®d¯6d°d±6d²d³6d´dµ6d¶d·6d¸d¹6dºd»6d¼d½6d¾d¿6dÀdÁ6dÂdÃ6dÄdÅ6dÆdÇ6dÈdÉ6dÊdË6dÌdÍ6dÎdÏ6dÐdÑ6dÒdÓ6dÔdÕ6dÖd×6dØdÙ6dÚdÛ6dÜdÝ6dÞdß6dàdá6dâdã6dädå6dædç6dèdé6dêdë6dìdí6dîdï6dðdñ6dòdó6dôdõ6död÷6dødù6dúdû6düdý6dþdÿ6dd6dd6dd6dd6dd 6d d 6d d 6dd6dd6dd6dd6dd6dd6dd6dd6dd6d d!6d"d#6d$d%6d&d'6d(d)6d*d+6d,d-6d.d/6d0d16d2d36d4d56d6d76d8d96d:d;6d<d=6d>d?6d@dA6dBdC6dDdE6dFdG6dHdI6dJdK6dLdM6dNdO6dPdQ6dRdS6dTdU6dVdW6dXdY6dZd[6d\d]6d^d_6d`da6dbdc6ddde6dfdg6dhdi6djdk6dldm6dndo6dpdq6drds6Z4dtdudvdwdxdygZ5dzd{d|d}d~dd€dd‚dƒd„d…d†g Z6e5e6e4j7ƒZ8dS(‡s!irclib -- Internet Relay Chat (IRC) protocol client library. This library is intended to encapsulate the IRC protocol at a quite low level. It provides an event-driven IRC client framework. It has a fairly thorough support for the basic IRC protocol, CTCP, DCC chat, but DCC file transfers is not yet supported. In order to understand how to make an IRC client, I'm afraid you more or less must understand the IRC specifications. They are available here: [IRC specifications]. The main features of the IRC client framework are: * Abstraction of the IRC protocol. * Handles multiple simultaneous IRC server connections. * Handles server PONGing transparently. * Messages to the IRC server are done by calling methods on an IRC connection object. * Messages from an IRC server triggers events, which can be caught by event handlers. * Reading from and writing to IRC server sockets are normally done by an internal select() loop, but the select()ing may be done by an external main loop. * Functions can be registered to execute at specified times by the event-loop. * Decodes CTCP tagging correctly (hopefully); I haven't seen any other IRC client implementation that handles the CTCP specification subtilties. * A kind of simple, single-server, object-oriented IRC client class that dispatches events to instance methods is included. Current limitations: * The IRC protocol shines through the abstraction a bit too much. * Data is not written asynchronously to the server, i.e. the write() may block if the TCP buffers are stuffed. * There are no support for DCC file transfers. * The author haven't even read RFC 2810, 2811, 2812 and 2813. * Like most projects, documentation is lacking... .. [IRC specifications] http://www.irchelp.org/irchelp/rfc/ iÿÿÿÿNiiitIRCErrorcBseZdZRS(sRepresents an IRC exception.(t__name__t __module__t__doc__(((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pyR[stIRCcBsªeZdZdddd„Zd„Zd„Zd„Zdd„Zdd„Z d d „Z dd „Z d „Z dd „Z dd„Zdd„Zd„Zd„ZRS(s6Class that handles one or several IRC server connections. When an IRC object has been instantiated, it can be used to create Connection objects that represent the IRC connections. The responsibility of the IRC object is to provide an event-driven framework for the connections and to keep the connections alive. It runs a select loop to poll each connection's TCP socket and hands over the sockets with incoming data for processing by the corresponding connection. The methods of most interest for an IRC client writer are server, add_global_handler, remove_global_handler, execute_at, execute_delayed, process_once and process_forever. Here is an example: irc = irclib.IRC() server = irc.server() server.connect("irc.some.where", 6667, "my_nickname") server.privmsg("a_nickname", "Hi there!") irc.process_forever() This will connect to the IRC server irc.some.where on port 6667 using the nickname my_nickname and send the message "Hi there!" to the nickname a_nickname. cCsn|r!|r!||_||_nd|_d|_||_g|_i|_g|_|jdtdƒdS(sEConstructor for IRC objects. Optional arguments are fn_to_add_socket, fn_to_remove_socket and fn_to_add_timeout. The first two specify functions that will be called with a socket object as argument when the IRC object wants to be notified (or stop being notified) of data coming on a new socket. When new data arrives, the method process_data should be called. Similarly, fn_to_add_timeout is called with a number of seconds (a floating point number) as first argument when the IRC object wants to receive a notification (by calling the process_timeout method). So, if e.g. the argument is 42.17, the object wants the process_timeout method to be called after 42 seconds and 170 milliseconds. The three arguments mainly exist to be able to use an external main loop (for example Tkinter's or PyGTK's main app loop) instead of calling the process_forever method. An alternative is to just call ServerConnection.process_once() once in a while. tpingiÖÿÿÿN( tfn_to_add_sockettfn_to_remove_sockettNonetfn_to_add_timeoutt connectionsthandlerstdelayed_commandstadd_global_handlert _ping_ponger(tselfRRR ((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pyt__init__|s         cCs t|ƒ}|jj|ƒ|S(s.Creates and returns a ServerConnection object.(tServerConnectionR tappend(Rtc((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pytserver¤s cCsHxA|D]9}x0|jD]%}||jƒkr|jƒqqWqWdS(s¹Called when there is more data to read on connection sockets. Arguments: sockets -- A list of socket objects. See documentation for IRC.__init__. N(R t _get_sockett process_data(RtsocketstsR((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pyR«s cCsetjƒ}xR|jr`||jddkr\|jdd|jddŒ|jd=qPqWdS(s`Called when a timeout notification is due. See documentation for IRC.__init__. iiiN(ttimeR (Rtt((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pytprocess_timeout¹s     icCsytd„|jƒ}td„|ƒ}|r^tj|gg|ƒ\}}}|j|ƒn tj|ƒ|jƒdS(scProcess data from connections once. Arguments: timeout -- How long the select() call should wait if no data is available. This method should be called periodically to check and process incoming data, if there are any. If that seems boring, look at the process_forever method. cSs |jƒS(N(R(tx((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pytÒscSs |dkS(N(R(R((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pyRÓsN(tmapR tfiltertselectRRtsleepR(RttimeoutRtitote((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pyt process_onceÆs ! gš™™™™™É?cCsx|j|ƒqdS(sÃRun an infinite loop, processing data from connections. This method repeatedly calls process_once. Arguments: timeout -- Parameter to pass to process_once. N(R&(RR"((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pytprocess_foreverÛs tcCs%x|jD]}|j|ƒq WdS(sDisconnects all connections.N(R t disconnect(RtmessageR((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pytdisconnect_allçscCs@||jkrg|j|[^ ]+) +)?(?P[^ ]+)( *(?P .+))?t ConnectioncBs8eZdZd„Zd„Zdd„Zdd„ZRS(s=Base class for IRC connections. Must be overridden. cCs ||_dS(N(t irclibobj(RRE((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pyRUscCs td‚dS(NsNot overridden(R(((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pyRXscCs|jj|||ƒdS(N(RER8(RR5R6R7((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pyR8^scCs|jj|||ƒdS(N(RER4(RR9R6R7((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pyR4as(((RRRRRR8R4(((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pyRDPs    tServerConnectionErrorcBseZRS((RR(((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pyRFestServerNotConnectedErrorcBseZRS((RR(((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pyRGhss ? RcBsKeZdZd„Zd7d7d7ddeed„Zd„Zd„Zd„Z d„Z d „Z d „Z d „Z d „Zd „Zd„Zdd„Zdd„Zd„Zdd„Zd„Zdd„Zd„Zd„Zdd„Zdd„Zddd„Zd7dd„Zdd„Zd„Zdd„Zd7d„Z d„Z!d „Z"d!„Z#dd"„Z$d#„Z%dd$„Z&dd%„Z'd&„Z(d'„Z)dd(„Z*d)„Z+dd*„Z,dd+„Z-dd,„Z.d7d-„Z/dd.„Z0d/„Z1d0„Z2dd1„Z3dd2„Z4d3„Z5ddd4„Z6d5„Z7ddd6„Z8RS(8s–This class represents an IRC server connection. ServerConnection objects are instantiated by calling the server method on an IRC object. cCs/tj||ƒd|_d|_d|_dS(Ni(RDRt connectedRtsockettssl(RRE((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pyRws  R(ic Csæ|jr|jdƒnd|_i|_d|_||_||_||_||_|pa||_ |pp||_ ||_ ||_ ||_ tjƒ|_| rÄtjtjtjƒ|_ntjtjtjƒ|_yZ|jj|j |j fƒ|jj|j|jfƒ| r8tj|jƒ|_nWn9tjk rt} |jjƒd|_td| ‚nXd|_|jjr |jj|jƒn|j r¼|j|j ƒn|j|jƒ|j|j |j ƒ|S(s–Connect/reconnect to a server. Arguments: server -- Server name. port -- Port number. nickname -- The nickname. password -- Password (if any). username -- The username. ircname -- The IRC name ("realname"). localaddress -- Bind the connection to a specific local IP address. localport -- Bind the connection to a specific local port. ssl -- Enable support for ssl. ipv6 -- Enable support for ipv6. This function can be called to reconnect a closed connection. Returns the ServerConnection object. sChanging serversR(sCouldn't connect to socket: %siN( RHR)tprevious_bufferR treal_server_namet real_nicknameRtporttnicknametusernametircnametpasswordt localaddresst localportRIt gethostnamet localhosttAF_INET6t SOCK_STREAMtAF_INETtbindtconnectRJterrortcloseRRFRERtpass_tnicktuser( RRRNRORRRPRQRSRTRJtipv6R((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pyR[}sF                cCs!|jdƒ|jj|ƒdS(sClose the connection. This method closes the connection permanently; after it has been called, the object is unusable. sClosing objectN(R)RERC(R((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pyR]Ãs cCs|jS(s [Internal](RI(R((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pyRÍscCs|jr|jSdSdS(s–Get the (real) server name. This method returns the (real) server name, or, more specifically, what the server calls itself. R(N(RL(R((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pytget_server_nameÑs cCs|jS(sÑGet the (real) nick name. This method returns the (real) nickname. The library keeps track of nick changes, so it might not be the nick name that was passed to the connect() method. (RM(R((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pyt get_nicknameÝsc Cs^y4|jr!|jjdƒ}n|jjdƒ}Wn$tjk rZ}|jdƒdSX|sr|jdƒdStj|j|ƒ}|j ƒ|_xÀ|D]¸}t r¶dG|GHn|sÂqžnd}d}d}|j t d|jƒd|gƒƒtj|ƒ}|jdƒr>|jdƒ}|js>||_q>n|jdƒre|jdƒjƒ}n|jd ƒrÈ|jd ƒjd d ƒ} | d jƒ}t| ƒdkrÈ|j| d ƒqÈn|tkrát|}n|d krt|ƒ|jkr1|d |_q1n|dkr1|d |_n|dkr©|d |d } } t| ƒ} |dkr‚t| ƒrd}qnt| ƒr—d}nd}x¶| D]þ}t|ƒtjkrb|d krÔd}nd}t|ƒ}t rd||| |fGHn|j t ||| |ƒƒ|dkr¢|d dkr¢|j t d|| |d ƒƒq¢q¤t rƒd||| |gfGHn|j t ||| |gƒƒq¤Wqžd} |dkrË|d g}n-|dkrä|d } n|d } |d }|dkrt| ƒsd}qnt r:d||| |fGHn|j t ||| |ƒƒqžWdS(!s [Internal]iisConnection reset by peerNs FROM SERVER:tall_raw_messagestprefixtcommandtarguments :iiR_twelcometprivmsgtnoticetpubmsgt pubnoticet privnoticetctcpt ctcpreplys2command: %s, source: %s, target: %s, arguments: %stACTIONtactiontquitRtmodetumodei@i@(sprivmsgsnotice(sprivmsgRk(RJtreadRItrecvR\R)t_linesep_regexptsplitRKtpoptDEBUGRRBtEventRbt_rfc_1459_command_regexptmatchtgroupRLtlowertlenRtnumeric_eventstnm_to_nRMt _ctcp_dequotet is_channelttypettypest TupleTypetlist( Rtnew_dataRtlinestlineReRfR7tmtattargetR*tmessages((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pyRæs¤                        &&        cCsZ|jj||ƒ|jƒ|jkrVx+|j|jƒD]}|||ƒq<WndS(s [Internal]N(RERBR@R (RR.tfn((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pyRBZscCs|jS(sWReturn connection status. Returns true if connected, otherwise false. (RH(R((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pyt is_connectedascGs|jj|ŒdS(sSAdd global handler. See documentation for IRC.add_global_handler. N(RER (Rtargs((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pyR hscGs|jj|ŒdS(sYRemove global handler. See documentation for IRC.remove_global_handler. N(RER3(RR’((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pyR3oscCs|jd||ƒdS(sSend a CTCP ACTION command.RpN(Rn(RRŽRq((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pyRqvscCs&|jdjd|gƒjƒƒdS(sSend an ADMIN command.t tADMINN(tsend_rawtjointstrip(RR((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pytadminzscCs:|jƒ}|j|d||r+d|p.dfƒdS(sSend a CTCP command.s%s%sR“R(N(tupperRi(RtctcptypeRŽt parameter((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pyRn~s cCs|j|d|ƒdS(sSend a CTCP REPLY command.s%sN(Rj(RRŽR›((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pyt ctcp_replyƒscCs||js dSd|_|j|ƒy|jjƒWntjk rL}nXd|_|jtd|jd|gƒƒdS(sZHang up the connection. Arguments: message -- Quit message. NiR)R(( RHRrRIR]R\RRBR{R(RR*R((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pyR)‡s    cCs|jd|ƒdS(sSend a GLOBOPS command.s GLOBOPS :N(R•(Rttext((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pytglobopsœscCs&|jdjd|gƒjƒƒdS(sSend an INFO command.R“tINFON(R•R–R—(RR((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pytinfo scCs)|jdjd||gƒjƒƒdS(sSend an INVITE command.R“tINVITEN(R•R–R—(RR_tchannel((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pytinvite¤scCs|jddj|ƒƒdS(sWSend an ISON command. Arguments: nicks -- List of nicks. sISON R“N(R•R–(Rtnicks((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pytison¨scCs%|jd||od|fƒdS(sSend a JOIN command.s JOIN %s%sR“N(R•(RR¢tkey((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pyR–±scCs(|jd|||od|fƒdS(sSend a KICK command.s KICK %s %s%ss :N(R•(RR¢R_tcomment((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pytkickµscCsEd}|r|d|}n|r4|d|}n|j|ƒdS(sSend a LINKS command.tLINKSR“N(R•(Rt remote_servert server_maskRf((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pytlinks¹s cCsNd}|r&|ddj|ƒ}n|r=|d|}n|j|ƒdS(sSend a LIST command.tLISTR“t,N(R–R•(RtchannelsRRf((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pyRˆÂs cCs|jd|od|ƒdS(sSend a LUSERS command.tLUSERSR“N(R•(RR((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pytlusersËscCs|jd||fƒdS(sSend a MODE command.s MODE %s %sN(R•(RRŽRf((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pyRsÏscCs|jd|od|ƒdS(sSend an MOTD command.tMOTDR“N(R•(RR((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pytmotdÓscCs.|jd|r"ddj|ƒp%dƒdS(sSend a NAMES command.tNAMESR“R®R(N(R•R–(RR¯((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pytnames×scCs|jd|ƒdS(sSend a NICK command.sNICK N(R•(Rtnewnick((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pyR_ÛscCs|jd||fƒdS(sSend a NOTICE command.s NOTICE %s :%sN(R•(RRŽR((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pyRjßscCs|jd||fƒdS(sSend an OPER command.s OPER %s %sN(R•(RR_RR((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pytoperäscCsct|ƒtjkr7|jd||o/d|ƒn(|jddj|ƒ|oZd|ƒdS(sSend a PART command.sPART R“R®N(R…R†t StringTypeR•R–(RR¯R*((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pytpartès"cCs|jd|ƒdS(sSend a PASS command.sPASS N(R•(RRR((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pyR^ïscCs%|jd||od|fƒdS(sSend a PING command.s PING %s%sR“N(R•(RRŽttarget2((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pyRóscCs%|jd||od|fƒdS(sSend a PONG command.s PONG %s%sR“N(R•(RRŽRº((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pytpong÷scCs|jd||fƒdS(sSend a PRIVMSG command.sPRIVMSG %s :%sN(R•(RRŽR((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pyRiûscCs$|jddj|ƒ|fƒdS(s+Send a PRIVMSG command to multiple targets.sPRIVMSG %s :%sR®N(R•R–(RttargetsR((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pyt privmsg_manyscCs|jd|od|ƒdS(sSend a QUIT command.tQUITs :N(R•(RR*((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pyRrscCs|jdkrtd‚nyJ|jr>|jj|dƒn|jj|dƒtrddG|GHnWn#tjk rŠ}|jdƒnXdS(sbSend raw string to the server. The string will be padded with appropriate CR LF. sNot connected.s s TO SERVER:sConnection reset by peer.N( RIRRGRJtwritetsendRzR\R)(RtstringR((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pyR• s  cCs%|jd||od|fƒdS(sSend an SQUIT command.s SQUIT %s%ss :N(R•(RRR§((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pytsquitscCs%|jd||od|fƒdS(sSend a STATS command.s STATS %s%sR“N(R•(Rt statstypeR((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pytstats!scCs|jd|od|ƒdS(sSend a TIME command.tTIMER“N(R•(RR((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pyR%scCs;|dkr |jd|ƒn|jd||fƒdS(sSend a TOPIC command.sTOPIC s TOPIC %s :%sN(RR•(RR¢t new_topic((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pyttopic)s cCs|jd|od|ƒdS(sSend a TRACE command.tTRACER“N(R•(RRŽ((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pyttrace0scCs|jd||fƒdS(sSend a USER command.sUSER %s 0 * :%sN(R•(RRPtrealname((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pyR`4scCs|jddj|ƒƒdS(sSend a USERHOST command.s USERHOST R®N(R•R–(RR¤((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pytuserhost8scCs|jd|od|ƒdS(sSend a USERS command.tUSERSR“N(R•(RR((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pytusers<scCs|jd|od|ƒdS(sSend a VERSION command.tVERSIONR“N(R•(RR((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pytversion@scCs|jd|ƒdS(sSend a WALLOPS command.s WALLOPS :N(R•(RR((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pytwallopsDscCs+|jd|od||odfƒdS(sSend a WHO command.sWHO%s%sR“s oN(R•(RRŽtop((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pytwhoHscCs|jddj|ƒƒdS(sSend a WHOIS command.sWHOIS R®N(R•R–(RR¼((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pytwhoisLscCs2|jd||od||o&d|fƒdS(sSend a WHOWAS command.s WHOWAS %s%s%sR“N(R•(RR_tmaxR((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pytwhowasPs  N(9RRRRRtFalseR[R]RRbRcRRBR‘R R3RqR˜RnRœR)RžR R£R¥R–R¨R¬RˆR±RsR³RµR_RjR·R¹R^RR»RiR½RrR•RÂRÄRRÇRÉR`RËRÍRÏRÐRÒRÓRÕ(((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pyRpsl E  t                                         tDCCConnectionErrorcBseZRS((RR(((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pyR×VsR;cBsPeZdZd„Zd„Zd„Zdd„Zd„Zd„Zd„Z RS( sˆThis class represents a DCC connection. DCCConnection objects are instantiated by calling the dcc method on an IRC object. cCsAtj||ƒd|_d|_||_d|_d|_dS(Ni(RDRRHtpassiveR<Rt peeraddresstpeerport(RRER<((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pyR`s     cCsÏtj|ƒ|_||_d|_d|_i|_tjtjtjƒ|_d|_ y |jj |j|jfƒWn#tj k rŸ}t d|‚nXd|_ |jjrË|jj|jƒn|S(sÐConnect/reconnect to a DCC peer. Arguments: address -- Host/IP address of the peer. port -- The port number to connect to. Returns the DCCConnection object. R(isCouldn't connect to socket: %siN(RIt gethostbynameRÙRÚRRKR RYRXRØR[R\R×RHRER(RtaddressRNR((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pyR[hs         cCs´d|_i|_tjtjtjƒ|_d|_yT|jjtjtjƒƒdfƒ|jj ƒ\|_ |_ |jj dƒWn#tj k r¯}td|‚nX|S(sKWait for a connection/reconnection from a DCC peer. Returns the DCCConnection object. The local IP address and port are available as self.localaddress and self.localport. After connection from a peer, the peer address and port are available as self.peeraddress and self.peerport. R(iii sCouldn't bind socket: %s(RKR RIRYRXRØRZRÛRUt getsocknameRSRTtlistenR\R×(RR((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pyRÞ‚s   %R(cCs…|js dSd|_y|jjƒWntjk r?}nXd|_|jj|td|jd|gƒƒ|jj |ƒdS(soHang up the connection and close the object. Arguments: message -- Quit message. Nitdcc_disconnectR(( RHRIR]R\RRERBR{RÙRC(RR*R((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pyR)˜s    c CsÞ|jrš|j rš|jjƒ\}\|_|_|jjƒ||_d|_trqd|j|jfGHn|jj |t d|jddƒƒdSy|jj d ƒ}Wn$tj k rÖ}|jdƒdSX|sî|jdƒdS|jdkrPtj|j|ƒ}|d |_t|jƒdkrC|jƒdS|d }n |g}d }|j}d}xi|D]a}trd G|GHn|g} tr´d |||| fGHn|jj |t |||| ƒƒquWdS(s [Internal]isDCC connection from %s:%dt dcc_connectNiisConnection reset by peerR:iÿÿÿÿtdccmsgs FROM PEER:s2command: %s, source: %s, target: %s, arguments: %si@i@(RØRHRItacceptRÙRÚR]RzRERBR{RRvR\R)R<RwRxRKR€( RtconnR‰RtchunksRfReRŽtchunkR7((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pyR­sR!               cCs|jS(s [Internal](RI(R((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pyRåscCsryH|jj|ƒ|jdkr5|jjdƒntrGd|GHnWn#tjk rm}|jdƒnXdS(szSend data to DCC peer. The string will be padded with appropriate LF if it's a DCC CHAT session. R:s s TO PEER: %s sConnection reset by peer.N(RIRÀR<RzR\R)(RRÁR((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pyRiés( RRRRR[RÞR)RRRi(((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pyR;Zs     8 tSimpleIRCClientcBsheZdZd„Zd„Zd„Zd d d ddeed„Zdd„Z dd „Z d „Z RS( sìA simple single-server IRC client class. This is an example of an object-oriented wrapper of the IRC framework. A real IRC client can be made by subclassing this class and adding appropriate methods. The method on_join will be called when a "join" event is created (which is done when the server sends a JOIN messsage/command), on_privmsg will be called for "privmsg" events, and so on. The handler methods get two arguments: the connection object (same as self.connection) and the event object. Instance attributes that can be used by sub classes: ircobj -- The IRC instance. connection -- The ServerConnection instance. dcc_connections -- A list of DCCConnection instances. cCs]tƒ|_|jjƒ|_g|_|jjd|jdƒ|jjd|jdƒdS(NR>iöÿÿÿRß(RtircobjRRAtdcc_connectionsR t _dispatchert_dcc_disconnect(R((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pyRs   cCs<d|jƒ}t||ƒr8t||ƒ||ƒndS(s [Internal]ton_N(R@thasattrtgetattr(RRR%RŒ((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pyRéscCs|jj|ƒdS(N(RèR1(RRR%((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pyRêsR(ic Cs/|jj||||||||| | ƒ dS(s[Connect/reconnect to a server. Arguments: server -- Server name. port -- Port number. nickname -- The nickname. password -- Password (if any). username -- The username. ircname -- The IRC name. localaddress -- Bind the connection to a specific local IP address. localport -- Bind the connection to a specific local port. ssl -- Enable support for ssl. ipv6 -- Enable support for ipv6. This function can be called to reconnect a closed connection. N(RAR[( RRRNRORRRPRQRSRTRJRa((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pyR[s R:cCs6|jj|ƒ}|jj|ƒ|j||ƒ|S(s·Connect to a DCC peer. Arguments: address -- IP address of the peer. port -- Port to connect to. Returns a DCCConnection instance. (RçR=RèRR[(RRÜRNR<R=((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pyRà>s cCs0|jj|ƒ}|jj|ƒ|jƒ|S(s[Listen for connections from a DCC peer. Returns a DCCConnection instance. (RçR=RèRRÞ(RR<R=((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pyt dcc_listenNs cCs|jjƒdS(sStart the IRC client.N(RçR'(R((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pytstartXsN( RRRRRéRêRRÖR[RàRîRï(((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pyRæùs     R{cBs>eZdZdd„Zd„Zd„Zd„Zd„ZRS(s Class representing an IRC event.cCs:||_||_||_|r-||_n g|_dS(s?Constructor of Event objects. Arguments: eventtype -- A string describing the event. source -- The originator of the event (a nick mask or a server). target -- The target of the event (a nick or a channel). arguments -- Any event specific arguments. N(t _eventtypet_sourcet_targett _arguments(RR@tsourceRŽR7((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pyR_s    cCs|jS(sGet the event type.(Rð(R((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pyR@tscCs|jS(sGet the event source.(Rñ(R((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pyRôxscCs|jS(sGet the event target.(Rò(R((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pyRŽ|scCs|jS(sGet the event arguments.(Ró(R((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pyR7€sN( RRRRRR@RôRŽR7(((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pyR{]s     ss\stt0s tns trs(.)cCs—t|ƒ}t|ƒ}|jddƒ}x$dD]}|j|d|ƒ}q1W|jddƒ}|jddƒ}tj|tjƒ}|j|ƒS(s\Check if a nick matches a mask. Returns true if the nick matches, otherwise false. s\s\\s .$|[](){}+t?t.t*s.*(t irc_lowertreplacetretcompilet IGNORECASER}(R_tmasktchRø((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pyt mask_matches‘s   s-[]\`^{}s[]\^s{}|~cCs |jtƒS(stReturns a lowercased string. The definition of lowercased comes from the IRC specification (RFC 1459). (t translatet_ircstring_translation(R((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pyRü¥scCsd„}t|kr*tj||ƒ}nt|kr=|gS|jtƒ}g}d}xŽ|t|ƒdkrèt||ƒdkr›|j||ƒn|t|ƒdkrÛ|jt||djddƒƒƒn|d}q[Wt|ƒddkr|jt|dƒn|SdS(s­[Internal] Dequote a message according to CTCP specifications. The function returns a list where each element can be either a string (normal message) or a tuple of one or two strings (tagged messages). If a tuple has only one element (ie is a singleton), that element is the tag; otherwise the tuple has two elements: the tag and the data. Arguments: message -- The message to be decoded. cSs|jdƒ}tj||ƒS(Ni(R~t_low_level_mappingR?(t match_objR((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pyt_low_level_replace»siiiR“iÿÿÿÿN(t_LOW_LEVEL_QUOTEt_low_level_regexptsubt_CTCP_DELIMITERRxR€Rttuple(R*RRäRR#((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pyRƒ­s"   *cCs|o|ddkS(soCheck if a string is a channel name. Returns true if the argument is a channel name, otherwise false. is#&+!((RÁ((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pyR„ãsc CsYt|ƒ}tttt|d?d@|d?d@|d?d@|d@gƒƒ}dj|ƒS(sŠConvert an IP number as an integer given in ASCII representation (e.g. '3232235521') to an IP address string (e.g. '192.168.0.1').iiÿiiRú(tlongRtstrtintR–(tnumR÷tp((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pytip_numstr_to_quadês "cCsmtt|jdƒƒ}t|dd>|dd>B|dd>B|dBƒ}|d d kri|d }n|S( sŠConvert an IP address string (e.g. '192.168.0.1') to an IP number as an integer given in ASCII representation (e.g. '3232235521').RúiiiiiiiiÿÿÿÿtL(RRRxR(tquadRR((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pytip_quad_to_numstrós 4 cCs|jdƒdS(sRGet the nick part of a nickmask. (The source of an Event is a nickmask.) t!i(Rx(R((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pyR‚ýscCs|jdƒdS(sVGet the userhost part of a nickmask. (The source of an Event is a nickmask.) Ri(Rx(R((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pytnm_to_uhscCs|jdƒdS(sRGet the host part of a nickmask. (The source of an Event is a nickmask.) t@i(Rx(R((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pytnm_to_h scCs$|jdƒd}|jdƒdS(sRGet the user part of a nickmask. (The source of an Event is a nickmask.) RiRi(Rx(R((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pytnm_to_uscCs t|dƒS(s'Parse a nick mode string. The function returns a list of lists with three members: sign, mode and argument. The sign is "+" or "-". The argument is always None. Example: >>> irclib.parse_nick_modes("+ab-c") [['+', 'a', None], ['+', 'b', None], ['-', 'c', None]] R((t _parse_modes(t mode_string((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pytparse_nick_modess cCs t|dƒS(sZParse a channel mode string. The function returns a list of lists with three members: sign, mode and argument. The sign is "+" or "-". The argument is None if mode isn't one of "b", "k", "l", "v" or "o". Example: >>> irclib.parse_channel_modes("+ab-c foo") [['+', 'a', None], ['+', 'b', 'foo'], ['-', 'c', None]] tbklvo(R(R((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pytparse_channel_modes)s R(c Csg}d}d}|jƒ}t|ƒdkr4gS|d|d}}|ddkr]gSx°|D]¨}|dkr|}qd|dkr”d} qd||kröt|ƒ|dkrÝ|j||||gƒ|d}q |j||dgƒqd|j||dgƒqdW|S(s [Internal]iR(is+-R“N(RxR€RR( Rt unary_modestmodest arg_counttsignRt mode_partR’Rtcollecting_arguments((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pyR8s*        cCs|j|jƒƒdS(s [Internal]N(R»RŽ(RAR.((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pyRWsRht001tyourhostt002tcreatedt003tmyinfot004t featurelistt005t tracelinkt200ttraceconnectingt201ttracehandshaket202t traceunknownt203t traceoperatort204t traceusert205t traceservert206t traceservicet207t tracenewtypet208t traceclasst209ttracereconnectt210t statslinkinfot211t statscommandst212t statsclinet213t statsnlinet214t statsilinet215t statsklinet216t statsqlinet217t statsylinet218t endofstatst219tumodeist221t serviceinfot231t endofservicest232tservicet233tservlistt234t servlistendt235t statsllinet241t statsuptimet242t statsolinet243t statshlinet244t luserconnst250t luserclientt251tluseropt252t luserunknownt253t luserchannelst254tlusermet255tadminmet256t adminloc1t257t adminloc2t258t adminemailt259ttracelogt261t endoftracet262ttryagaint263tn_localt265tn_globalt266tnonet300tawayt301RËt302R¥t303tunawayt305tnowawayt306t whoisusert311t whoisservert312t whoisoperatort313t whowasusert314tendofwhot315t whoischanopt316t whoisidlet317t endofwhoist318t whoischannelst319t liststartt321Rˆt322tlistendt323t channelmodeist324t channelcreatet329tnotopict331t currenttopict332t topicinfot333tinvitingt341t summoningt342t invitelistt346tendofinvitelistt347t exceptlistt348tendofexceptlistt349RÏt351twhoreplyt352tnamreplyt353tkilldonet361tclosingt362tcloseendt363R¬t364t endoflinkst365t endofnamest366tbanlistt367t endofbanlistt368t endofwhowast369R t371R³t372t infostartt373t endofinfot374t motdstartt375t endofmotdt376tmotd2t377t youreopert381t rehashingt382tmyportist384Rt391t usersstartt392RÍt393t endofuserst394tnouserst395t nosuchnickt401t nosuchservert402t nosuchchannelt403tcannotsendtochant404ttoomanychannelst405t wasnosuchnickt406ttoomanytargetst407tnoorigint409t norecipientt411t notexttosendt412t notoplevelt413t wildtoplevelt414tunknowncommandt421tnomotdt422t noadmininfot423t fileerrort424tnonicknamegivent431terroneusnicknamet432t nicknameinuset433t nickcollisiont436tunavailresourcet437tusernotinchannelt441t notonchannelt442t useronchannelt443tnologint444tsummondisabledt445t usersdisabledt446t notregisteredt451tneedmoreparamst461talreadyregisteredt462t nopermforhostt463tpasswdmismatcht464tyourebannedcreept465tyouwillbebannedt466tkeysett467t channelisfullt471t unknownmodet472tinviteonlychant473tbannedfromchant474t badchannelkeyt475t badchanmaskt476t nochanmodest477t banlistfullt478t noprivilegest481tchanoprivsneededt482tcantkillservert483t restrictedt484tuniqopprivsneededt485t nooperhostt491t noservicehostt492tumodeunknownflagt501tusersdontmatcht502RàRßRáR)RnRoR\R–R¨RsR¹RRiRmRkRlRrR£R»(9RR,RþR RIRÁtsysRR†RÎRzt ExceptionRRRÿR|RDRFRGRwRR×R;RæR{R t_CTCP_LEVEL_QUOTER RR Rt_specialt ascii_letterstdigitstnick_characterst maketranstascii_uppercasetascii_lowercaseRRüRƒR„RRR‚RRRRR RRRtgenerated_eventstprotocol_eventstvaluesR>(((spD:/Documents and Settings/TimBuk/Mes documents/Téléchargements/python-irclib-0.4.8/python-irclib-0.4.8\irclib.pyt>sÊ        îÿçŸd'    6