
    Yf$                     ^   d Z ddlmZ ddlmZmZmZ ddlmZ ddl	m
Z
mZmZ ddlmZ ddlmZ  G d d	e
j                  Z eej                   G d
 de
j                              Z G d de
j        ej                  Z eej                   G d de
j                              ZdS )z%
IRC support for Instance Messenger.
    )implementer)deferprotocolreactor)succeed)basesupport
interfaceslocalsONLINE)ircc                   .    e Zd Zd Zd Zd Zd ZddZdS )	IRCPersonc                     | j         j        t          j        | j         j                            d| j        z             d S )NzWHOIS %saccountclientr
   OfflineErrorsendLinenameselfs    M/var/www/html/env/lib/python3.11/site-packages/twisted/words/im/ircsupport.pyimperson_whoiszIRCPerson.imperson_whois   s<    <&%%$$Z$)%;<<<<<    c                     t           S Nr   r   s    r   isOnlinezIRCPerson.isOnline       r   c                     t           S r   r   r   s    r   	getStatuszIRCPerson.getStatus   r   r   c                 l    || _         | j                                                            |            d S r   )statuschatgetContactsListsetContactStatus)r   r#   s     r   	setStatuszIRCPerson.setStatus   s1    	!!##44T:::::r   Nc                 T   | j         j        t          j        |                    d          D ]l}|rC|                    dd           dk    r)| j         j                            | j        d|fg           G| j         j                            | j        |           mt          |          S )N
styleemoteACTION)
r   r   r
   r   splitgetctcpMakeQueryr   msgr   r   textmetalines       r   sendMessagezIRCPerson.sendMessage"   s    <&%%JJt$$ 	9 	9D 9$//7::#11$)x>N=OPPPP#''	48888t}}r   r   )__name__
__module____qualname__r   r   r!   r'   r5    r   r   r   r      sd        = = =    ; ; ;     r   r   c                   0    e Zd Zd Zd Zd Zi fdZd ZdS )IRCGroupc                     d S r   r9   r   s    r   imgroup_testActionzIRCGroup.imgroup_testAction/       r   c                     | j         j        t          j        d}| j         j                            d| j         d|j         d|            d S )Nzfor great justice!zKICK # z :r   )r   targetreasons      r   imtarget_kickzIRCGroup.imtarget_kick2   sW    <&%%%$$%Qdi%Q%Q&+%Q%Q%Q%QRRRRRr   c                     | j         j        t          j        | j         j                            | j        |           d S r   )r   r   r
   r   topicr   )r   rE   s     r   setTopiczIRCGroup.setTopic9   s9    <&%%!!$)U33333r   c                 p   | j         j        t          j        |rQ|                    dd           dk    r7| j         j                            | j        d|fg           t          |          S |                    d          D ]'}| j         j        	                    | j        |           (t          |          S )Nr*   r+   r,   r)   )
r   r   r
   r   r.   r/   r   r   r-   sayr1   s       r   sendGroupMessagezIRCGroup.sendGroupMessage>   s    <&%% 	!DHHWd++w66L--di8T:J9KLLL4== JJt$$ 	5 	5DL##DIt4444t}}r   c                     | j         j        t          j        | j         j                            | j                   | j         j                            | j        d           d S N   )r   r   r
   r   leaver   getGroupConversationr   s    r   rM   zIRCGroup.leaveI   sT    <&%%!!$),,,00A>>>>>r   N)r6   r7   r8   r=   rC   rF   rI   rM   r9   r   r   r;   r;   -   sl          S S S4 4 4
 +- 	 	 	 	? ? ? ? ?r   r;   c                       e Zd ZddZddZd Zd Zd Zd Zd	 Z	d
 Z
ddZd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd ZdS )IRCProtoNc                     t           j                            | |||           i | _        i | _        i | _        i | _        d S r   )r   AbstractClientMixin__init___namreplies	_ingroups_groups_topics)r   r   chatuilogonDeferreds       r   rS   zIRCProto.__init__Q   s@    '00wVVVr   r   c                     |                                 }| j                            | j                            ||           |          S )N)
stayHidden)lowerr$   rN   getGroup)r   r   hides      r   rN   zIRCProto.getGroupConversationX   sE    zz||y--ItT**t . 
 
 	
r   c                 8    | j                             ||           S r   )r$   	getPersonr   r   s     r   r`   zIRCProto.getPerson^   s    y""4...r   c                    	 d| _         | j        j        | _        | j        j        | _        d| _        t          j                            |            | j        j	        D ]}| 
                    |           d| j        _        | j        | j                            |            | j                                         d S # t           $ r dd l}|                                 Y d S w xY w)NTzTwisted-IM userrL   r   )performLoginr   usernamenicknamepasswordrealnamer   	IRCClientconnectionMadechannels	joinGroup	_isOnline_logonDeferredcallbackr$   r%   BaseException	traceback	print_exc)r   channelrp   s      r   ri   zIRCProto.connectionMadea   s    	" $D L1DM L1DM-DMM((...<0 ( (w''''%&DL"".#,,T222I%%''''' 	" 	" 	"!!!!!!	"s   B9B= ="C#"C#c                 h    || _         d|z  | _        t          j                            | |           d S )Nz%s (IRC))r   accountNamer   rh   setNick)r   nicks     r   ru   zIRCProto.setNickv   s4    	%,dD)))))r   c                 z    | j                             | j                             |dd         |           d          S )z9
        Called when I am kicked from a channel.
        rL   N)r$   rN   r]   )r   rr   kickermessages       r   
kickedFromzIRCProto.kickedFrom{   s7     y--di.@.@d.S.SUVWWWr   c                     d S r   r9   )r   kickeerr   rx   ry   s        r   
userKickedzIRCProto.userKicked   r>   r   c                 :    |                      |||ddi           d S )NdontAutoRespondrL   )privmsg)r   rd   rr   ry   s       r   noticedzIRCProto.noticed   s&    Xw2CQ1GHHHHHr   c                 f   |i }|                     dd          d         }|| j        k    rd S |d         dk    r6|dd          }|                     |                              |||           d S | j                            |                     |                                        ||           d S )N!rL   r   #r-   r   rN   showGroupMessager$   getConversationr`   showMessage)r   rd   rr   ry   metadatagroups         r   r   zIRCProto.privmsg   s    H>>#q))!,ty  F1:ABBKE%%e,,=='8   F	!!$..":":;;GGX	
 	
 	
 	
 	
r   c                 f   |                     dd          d         }|| j        k    rd S ddi}|d         dk    r6|dd          }|                     |                              |||           d S | j                            |                     |                                        ||           d S )Nr   rL   r   r*   r+   r   r   )r   rd   rr   r+   r3   r   s         r   actionzIRCProto.action   s    >>#q))!,ty  F!1:ABBKE%%e,,==htTTTF	!!$..":":;;GGtTTTTTr   c                 
   |d         dd                                          }|d                                         }t          t          |                    D ]5}||         d         dv r#||         dd         ||<   ||         d         dv #6|| j        vr
g | j        |<   | j        |                             |           |D ]>}	 | j        |                             |           $# t          $ r |g| j        |<   Y ;w xY wdS )z
        RPL_NAMREPLY
        >> NAMES #bnl
        << :Arlington.VA.US.Undernet.Org 353 z3p = #bnl :pSwede Dan-- SkOyg AG
           rL   N   r   )@+)	r\   r-   rangelenrT   extendrU   appendro   )r   prefixparamsr   usersuire   s          r   irc_RPL_NAMREPLYzIRCProto.irc_RPL_NAMREPLY   s1    q	!""##%%q	!!E

## 	* 	*B)A,*,,!"IabbMb	 )A,*,,(((&(DU#&&u--- 	3 	3H3x(//6666  3 3 3,17x(((3	3 	3s    C((D ?D c                     |d         dd          }|                      |                              | j        |                                                    | j        |                                = d S rK   )rN   setGroupMembersrT   r\   r   r   r   r   s       r   irc_RPL_ENDOFNAMESzIRCProto.irc_RPL_ENDOFNAMES   sg    q	!""!!%((88U[[]]+	
 	
 	
 U[[]]+++r   c                 B    |d         | j         |d         dd          <   d S )Nr   rL   )rW   )r   r   r   s      r   irc_RPL_TOPICzIRCProto.irc_RPL_TOPIC   s$    &,QiVAYqrr]###r   c                     |d         dd          }|                      |                              | j        |         |d                    | j        |= d S )NrL   r   )rN   rF   rW   r   s       r   irc_333zIRCProto.irc_333   sR    q	!""!!%((11$,u2EvayQQQLr   c                     |                     d          d         }|d         dd          }|d         }|                     |                              ||           d S Nr   r   rL   )r-   rN   rF   )r   r   r   re   r   rE   s         r   	irc_TOPICzIRCProto.irc_TOPIC   s\    <<$$Q'q	!""q	!!%((11%BBBBBr   c                 d   |                     d          d         }|d         dd                                          }|| j        k    rg	 | j        |                             |           n# t
          $ r |g| j        |<   Y nw xY w|                     |                              |           d S d S r   )r-   r\   re   rU   r   ro   rN   memberJoinedr   r   r   re   r   s        r   irc_JOINzIRCProto.irc_JOIN   s    <<$$Q'q	!""##%%t}$$3x(//6666  3 3 3,17x(((3%%e,,99(CCCCC %$s   
 A+ +BBc                 L   |                     d          d         }|d         dd                                          }|| j        k    rY|| j        |         v rL| j        |                             |           |                     |                              |           d S d S d S r   )r-   r\   re   rU   removerN   
memberLeftr   s        r   irc_PARTzIRCProto.irc_PART   s    <<$$Q'q	!""##%%t}$$x000x(//666))%00;;HEEEEE %$00r   c                     |                     d          d         }|| j        v rD| j        |         D ]*}|                     |                              |           +g | j        |<   d S d S Nr   r   )r-   rU   rN   r   r   s        r   irc_QUITzIRCProto.irc_QUIT   s|    <<$$Q't~%%1 F F))%00;;HEEEE')DN8$$$ &%r   c                    |                     d          d         }|d         }|| j        vrd S | j        |         D ]+}|                     |                              ||           ,| j        |         | j        |<   | j        |= d S r   )r-   rU   rN   memberChangedNick)r   r   r   fromNicktoNickr   s         r   irc_NICKzIRCProto.irc_NICK   s    <<$$Q'4>))F^H- 	Q 	QE%%e,,>>xPPPP!%!9vN8$$$r   c                     d S r   r9   )r   r   commandr   s       r   irc_unknownzIRCProto.irc_unknown   r>   r   c                 Z    |                      |           |                     |           d S r   )joinrN   ra   s     r   rk   zIRCProto.joinGroup   s+    		$!!$'''''r   r   )r   )r6   r7   r8   rS   rN   r`   ri   ru   rz   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   rk   r9   r   r   rP   rP   P   sp          
 
 
 
/ / /" " "** * *
X X X  I I I
 
 
 
 	U 	U 	U3 3 3(, , ,0 0 0     
C C CD D DF F F* * *% % %  ( ( ( ( (r   rP   c                   0    e Zd ZdZeZeZ	 ddZd Z	d Z
dS )
IRCAccountIRC c           	          t           j                            | ||||||           d |                    d          D             | _        | j        dgk    r	g | _        d S d S )Nc                 6    g | ]}|                                 S r9   )strip).0rr   s     r   
<listcomp>z'IRCAccount.__init__.<locals>.<listcomp>  s     LLLWLLLr   ,r   )r   AbstractAccountrS   r-   rj   )r   rt   	autoLoginrd   rf   hostportrj   s           r   rS   zIRCAccount.__init__   st     	#,,+y(HdD	
 	
 	
 MLs8K8KLLL=RD  DMMM ! r   c                     t          j                    }t          j        t          t
          | ||          }|                    | j        | j                  }|	                    |j
                   |S r   )r   Deferredr   ClientCreatorr   rP   
connectTCPr   r   
addErrbackerrback)r   rX   rY   ccds        r   _startLogOnzIRCAccount._startLogOn  sY    ((#GXtV]SSMM$)TY//	]*+++r   c                     d S r   r9   r   s    r   logOffzIRCAccount.logOff  s    r   N)r   )r6   r7   r8   gatewayTyper;   _groupFactoryr   _personFactoryrS   r   r   r9   r   r   r   r      s\        KMN PR         r   r   N)__doc__zope.interfacer   twisted.internetr   r   r   twisted.internet.deferr   twisted.words.imr   r	   r
   twisted.words.im.localsr   twisted.words.protocolsr   AbstractPersonr   IGroupAbstractGroupr;   rR   rh   rP   IAccountr   r   r9   r   r   <module>r      s    ' & & & & & 5 5 5 5 5 5 5 5 5 5 * * * * * * < < < < < < < < < < * * * * * * ' ' ' ' ' '    *   8 Z? ? ? ? ?{( ? ?  ?Dd( d( d( d( d({. d( d( d(N Z !!    ,   "!  r   