o b$@sdZddlmZddlmZmZmZddlmZddl m Z m Z m Z ddl mZddlmZGdd d e jZee jGd d d e jZGd d d e jejZee jGddde jZdS)z% IRC support for Instance Messenger. ) implementer)deferprotocolreactor)succeed) basesupport interfaceslocalsONLINE)ircc@s6eZdZddZddZddZddZd d d Zd S) IRCPersoncCs*|jjdur tj|jjd|jdS)NzWHOIS %saccountclientr OfflineErrorsendLinenameselfr=/usr/lib/python3/dist-packages/twisted/words/im/ircsupport.pyimperson_whoiss zIRCPerson.imperson_whoiscCtSNr rrrrisOnlinezIRCPerson.isOnlinecCrrr rrrr getStatusrzIRCPerson.getStatuscCs||_|j|dSr)statuschatgetContactsListsetContactStatus)rrrrr setStatusszIRCPerson.setStatusNcCsj|jjdur tj|dD]"}|r'|dddkr'|jj|jd|fgq|jj|j|qt |S)N styleemoteACTION) rrr rsplitget ctcpMakeQueryrmsgrrtextmetalinerrr sendMessage"s zIRCPerson.sendMessager)__name__ __module__ __qualname__rrrr"r/rrrrr s r c@s8eZdZddZddZddZifddZd d Zd S) IRCGroupcCdSrrrrrrimgroup_testAction/rzIRCGroup.imgroup_testActioncCs>|jjdur tjd}|jjd|jd|jd|dS)Nzfor great justice!zKICK # z :r)rtargetreasonrrr imtarget_kick2s (zIRCGroup.imtarget_kickcCs(|jjdur tj|jj|j|dSr)rrr rtopicr)rr:rrrsetTopic9s zIRCGroup.setTopiccCsp|jjdur tj|r#|dddkr#|jj|jd|fgt|S|dD] }|jj |j|q(t|S)Nr$r%r&r#) rrr rr(r)rrr'sayr+rrrsendGroupMessage>s zIRCGroup.sendGroupMessagecCs8|jjdur tj|jj|j|jj|jddSN)rrr rleavergetGroupConversationrrrrr@Is zIRCGroup.leaveN)r0r1r2r5r9r;r=r@rrrrr3-s   r3c@seZdZd-ddZd.ddZddZd d Zd d Zd dZddZ ddZ d-ddZ ddZ ddZ ddZddZddZdd Zd!d"Zd#d$Zd%d&Zd'd(Zd)d*Zd+d,ZdS)/IRCProtoNcCs.tj||||i|_i|_i|_i|_dSr)rAbstractClientMixin__init__ _namreplies _ingroups_groups_topics)rrchatui logonDeferredrrrrDQs  zIRCProto.__init__rcCs"|}|jj|j|||dS)N) stayHidden)lowerrrAgetGroup)rrhiderrrrAXszIRCProto.getGroupConversationcCs|j||Sr)r getPersonrrrrrrO^szIRCProto.getPersoncCsz9d|_|jj|_|jj|_d|_tj||jj D]}| |qd|j_ |j dur2|j ||jWdStyKddl}|YdSw)NTzTwisted-IM userr?r) performLoginrusernamenicknamepasswordrealnamer IRCClientconnectionMadechannels joinGroup _isOnline_logonDeferredcallbackrr BaseException traceback print_exc)rchannelr^rrrrWas         zIRCProto.connectionMadecCs"||_d||_tj||dS)Nz%s (IRC))r accountNamer rVsetNick)rnickrrrrbvs zIRCProto.setNickcCs |j|j|dd|dS)z9 Called when I am kicked from a channel. r?N)rrArM)rr`kickermessagerrr kickedFrom{s zIRCProto.kickedFromcCr4rr)rkickeer`rdrerrr userKickedrzIRCProto.userKickedcCs||||ddidS)NdontAutoRespondr?)privmsg)rrRr`rerrrnoticedszIRCProto.noticedcCsx|duri}|ddd}||jkrdS|ddkr-|dd}|||||dS|j||||dS)N!r?r#r'rrAshowGroupMessagergetConversationrO showMessage)rrRr`remetadatagrouprrrrjs    zIRCProto.privmsgcCst|ddd}||jkrdSddi}|ddkr+|dd}|||||dS|j||||dS)Nrlr?rr$r%rmrn)rrRr`r%r-rsrrractions   zIRCProto.actionc Cs|ddd}|d}tt|D]}||ddvr2||dd||<||ddvs q||jvr=g|j|<|j|||D]}z |j||WqGtyb|g|j|<YqGwdS)z RPL_NAMREPLY >> NAMES #bnl << :Arlington.VA.US.Undernet.Org 353 z3p = #bnl :pSwede Dan-- SkOyg AG r?Nr)@+) rLr'rangelenrEextendrFappendr])rprefixparamsrsusersuirSrrrirc_RPL_NAMREPLYs"    zIRCProto.irc_RPL_NAMREPLYcCs:|ddd}|||j||j|=dSr>)rAsetGroupMembersrErLrr}r~rsrrrirc_RPL_ENDOFNAMESs   zIRCProto.irc_RPL_ENDOFNAMEScCs|d|j|ddd<dS)Nrur?)rH)rr}r~rrr irc_RPL_TOPICszIRCProto.irc_RPL_TOPICcCs8|ddd}|||j||d|j|=dS)Nr?ru)rAr;rHrrrrirc_333s zIRCProto.irc_333cCs<|dd}|ddd}|d}||||dSNrlrr?)r'rAr;)rr}r~rSrsr:rrr irc_TOPICszIRCProto.irc_TOPICcCsx|dd}|ddd}||jkr:z |j||Wnty/|g|j|<Ynw|||dSdSr)r'rLrSrFr|r]rA memberJoinedrr}r~rSrsrrrirc_JOINs  zIRCProto.irc_JOINcCsf|dd}|ddd}||jkr/||j|vr1|j|||||dSdSdSr)r'rLrSrFremoverA memberLeftrrrrirc_PARTs zIRCProto.irc_PARTcCsJ|dd}||jvr#|j|D] }|||qg|j|<dSdSNrlr)r'rFrArrrrrirc_QUITs  zIRCProto.irc_QUITcCsb|dd}|d}||jvrdS|j|D] }||||q|j||j|<|j|=dSr)r'rFrAmemberChangedNick)rr}r~fromNicktoNickrsrrrirc_NICKs  zIRCProto.irc_NICKcCr4rr)rr}commandr~rrr irc_unknownrzIRCProto.irc_unknowncCs||||dSr)joinrArPrrrrYs zIRCProto.joinGroupr)r)r0r1r2rDrArOrWrbrfrhrkrjrtrrrrrrrrrrrYrrrrrBPs,      rBc@s4eZdZdZeZeZ d ddZddZ ddZ d S) IRCAccountIRCc CsHtj|||||||dd|dD|_|jdgkr"g|_dSdS)NcSsg|]}|qSr)strip).0r`rrr sz'IRCAccount.__init__..,r)rAbstractAccountrDr'rX)rra autoLoginrRrThostportrXrrrrDs  zIRCAccount.__init__cCs:t}ttt|||}||j|j}| |j |Sr) rDeferredr ClientCreatorrrB connectTCPrr addErrbackerrback)rrIrJccdrrr _startLogOns  zIRCAccount._startLogOncCr4rrrrrrlogOffszIRCAccount.logOffN)r) r0r1r2 gatewayTyper3 _groupFactoryr _personFactoryrDrrrrrrrs  rN)__doc__zope.interfacertwisted.internetrrrtwisted.internet.deferrtwisted.words.imrrr twisted.words.im.localsr twisted.words.protocolsr AbstractPersonr IGroup AbstractGroupr3rCrVrBIAccountrrrrrrs    "(