
    Vh$                     r   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j2                         G d de
j4                               Zy)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y)	IRCPersonc                     | j                   j                  t        j                  | j                   j                  j	                  d| j
                  z         y )NzWHOIS %saccountclientr
   OfflineErrorsendLinenameselfs    K/home/dcms/DCMS/lib/python3.12/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                 d    || _         | j                  j                         j                  |        y r   )statuschatgetContactsListsetContactStatus)r   r#   s     r   	setStatuszIRCPerson.setStatus   s$    		!!#44T:r   Nc                    | j                   j                  t        j                  |j	                  d      D ]}  }|rI|j                  dd       dk(  r4| j                   j                  j                  | j                  d|fg       N| j                   j                  j                  | j                  |        t        |      S )N
styleemoteACTION)
r   r   r
   r   splitgetctcpMakeQueryr   msgr   r   textmetalines       r   sendMessagezIRCPerson.sendMessage"   s    <<&%%%JJt$ 	9D$/7:##11$))x>N=OP##''		48		9
 t}r   r   )__name__
__module____qualname__r   r   r!   r'   r5    r   r   r   r      s    =;r   r   c                   .    e Zd Zd Zd Zd Zi fdZd Zy)IRCGroupc                      y r   r9   r   s    r   imgroup_testActionzIRCGroup.imgroup_testAction/       r   c                     | j                   j                  t        j                  d}| j                   j                  j	                  d| j
                   d|j
                   d|        y )Nzfor great justice!zKICK # z :r   )r   targetreasons      r   imtarget_kickzIRCGroup.imtarget_kick2   sV    <<&%%%%$$vdii[&++b%QRr   c                     | j                   j                  t        j                  | j                   j                  j	                  | j
                  |       y r   )r   r   r
   r   topicr   )r   rE   s     r   setTopiczIRCGroup.setTopic9   s<    <<&%%%!!$))U3r   c                    | j                   j                  t        j                  |rS|j	                  dd       dk(  r>| j                   j                  j                  | j                  d|fg       t        |      S |j                  d      D ]2  }| j                   j                  j                  | j                  |       4 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LL--dii8T:J9KL4= JJt$ 	5DLL##DIIt4	5t}r   c                    | j                   j                  t        j                  | j                   j                  j	                  | j
                         | j                   j                  j                  | j
                  d       y N   )r   r   r
   r   leaver   getGroupConversationr   s    r   rM   zIRCGroup.leaveI   sX    <<&%%%!!$)),00A>r   N)r6   r7   r8   r=   rC   rF   rI   rM   r9   r   r   r;   r;   -   s!    S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y)IRCProtoNc                     t         j                  j                  | |||       i | _        i | _        i | _        i | _        y r   )r   AbstractClientMixin__init___namreplies	_ingroups_groups_topics)r   r   chatuilogonDeferreds       r   rS   zIRCProto.__init__Q   s9    ''00wVr   c                     |j                         }| j                  j                  | j                  j                  ||       |      S )N)
stayHidden)lowerr$   rN   getGroup)r   r   hides      r   rN   zIRCProto.getGroupConversationX   s?    zz|yy--IItT*t . 
 	
r   c                 :    | j                   j                  ||       S r   )r$   	getPersonr   r   s     r   r`   zIRCProto.getPerson^   s    yy""4..r   c                    	 d| _         | j                  j                  | _        | j                  j                  | _        d| _        t        j                  j                  |        | j                  j                  D ]  }| j                  |        d| j                  _        | j                  | j                  j                  |        | j                  j                          y # t         $ r dd l}|j%                          Y y 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 LL11DM LL11DM-DMMM((.<<00 (w'(%&DLL""".##,,T2II%%' 	"!	"s   C!C$ $DDc                 f    || _         d|z  | _        t        j                  j	                  | |       y )Nz%s (IRC))r   accountNamer   rh   setNick)r   nicks     r   ru   zIRCProto.setNickv   s*    	%,dD)r   c                 t    | j                   j                  | 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{   s3     yy--dii.@.@d.SUVWWr   c                      y r   r9   )r   kickeerr   rx   ry   s        r   
userKickedzIRCProto.userKicked   r>   r   c                 0    | j                  |||ddi       y )NdontAutoRespondrL   )privmsg)r   rd   rr   ry   s       r   noticedzIRCProto.noticed   s    Xw2CQ1GHr   c                 *   |i }|j                  dd      d   }|| j                  k(  ry |d   dk(  r(|dd  }| j                  |      j                  |||       y | j                  j                  | j                  |            j                  ||       y )N!rL   r   #r-   r   rN   showGroupMessager$   getConversationr`   showMessage)r   rd   rr   ry   metadatagroups         r   r   zIRCProto.privmsg   s    H>>#q)!,tyy 1:ABKE%%e,=='8 		!!$..":;GGX	
r   c                 *   |j                  dd      d   }|| j                  k(  ry ddi}|d   dk(  r(|dd  }| j                  |      j                  |||       y | j                  j                  | j                  |            j                  ||       y )Nr   rL   r   r*   r+   r   r   )r   rd   rr   r+   r3   r   s         r   actionzIRCProto.action   s    >>#q)!,tyy !1:ABKE%%e,==htT		!!$..":;GGtTr   c                    |d   dd j                         }|d   j                         }t        t        |            D ]#  }||   d   dv s||   dd ||<   ||   d   dv r% || j                  vrg | j                  |<   | j                  |   j                  |       |D ]!  }	 | j                  |   j                  |       # y# t        $ r |g| j                  |<   Y @w xY w)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   s     q	!"##%q	!E
# 	*B)A,*,!"IabMb	 )A,*,	* (((&(DU#&&u- 	3H3x(//6	3 ! 3,17x(3s   %CC"!C"c                     |d   dd  }| j                  |      j                  | j                  |j                                   | j                  |j                         = y rK   )rN   setGroupMembersrT   r\   r   r   r   r   s       r   irc_RPL_ENDOFNAMESzIRCProto.irc_RPL_ENDOFNAMES   sT    q	!"!!%(88U[[]+	
 U[[]+r   c                 4    |d   | j                   |d   dd  <   y )Nr   rL   )rW   )r   r   r   s      r   irc_RPL_TOPICzIRCProto.irc_RPL_TOPIC   s    &,QiVAYqr]#r   c                     |d   dd  }| j                  |      j                  | j                  |   |d          | j                  |= y )NrL   r   )rN   rF   rW   r   s       r   irc_333zIRCProto.irc_333   sE    q	!"!!%(11$,,u2EvayQLLr   c                     |j                  d      d   }|d   dd  }|d   }| j                  |      j                  ||       y Nr   r   rL   )r-   rN   rF   )r   r   r   re   r   rE   s         r   	irc_TOPICzIRCProto.irc_TOPIC   sH    <<$Q'q	!"q	!!%(11%Br   c                 4   |j                  d      d   }|d   dd  j                         }|| j                  k7  r@	 | j                  |   j	                  |       | j                  |      j                  |       y y # t
        $ r |g| j                  |<   Y =w xY w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 %%e,99(C % ! 3,17x(3s   A; ;BBc                    |j                  d      d   }|d   dd  j                         }|| j                  k7  rQ|| j                  |   v r?| j                  |   j	                  |       | j                  |      j                  |       y y y r   )r-   r\   re   rU   removerN   
memberLeftr   s        r   irc_PARTzIRCProto.irc_PART   s    <<$Q'q	!"##%t}}$x00x(//6))%0;;HE 1 %r   c                     |j                  d      d   }|| j                  v rD| j                  |   D ]"  }| j                  |      j                  |       $ g | j                  |<   y y Nr   r   )r-   rU   rN   r   r   s        r   irc_QUITzIRCProto.irc_QUIT   sg    <<$Q't~~%1 F))%0;;HEF')DNN8$ &r   c                    |j                  d      d   }|d   }|| j                  vry | j                  |   D ]#  }| j                  |      j                  ||       % | j                  |   | j                  |<   | j                  |= y r   )r-   rU   rN   memberChangedNick)r   r   r   fromNicktoNickr   s         r   irc_NICKzIRCProto.irc_NICK   s    <<$Q'4>>)^^H- 	QE%%e,>>xP	Q!%!9vNN8$r   c                      y r   r9   )r   r   commandr   s       r   irc_unknownzIRCProto.irc_unknown   r>   r   c                 H    | j                  |       | j                  |       y 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   sq    
/"**
XI
 	U3(,0 
CDF*%(r   rP   c                   .    e Zd ZdZeZeZ	 ddZd Z	d Z
y)
IRCAccountIRCc           	          t         j                  j                  | ||||||       |j                  d      D cg c]  }|j	                          c}| _        | j
                  dgk(  rg | _        y y c c}w )N, )r   AbstractAccountrS   r-   striprj   )	r   rt   	autoLoginrd   rf   hostportrj   rr   s	            r   rS   zIRCAccount.__init__   sk     	##,,+y(HdD	
 9As8KLWL==RD DM ! Ms   A1c                     t        j                         }t        j                  t        t
        | ||      }|j                  | j                  | j                        }|j                  |j                         |S r   )r   Deferredr   ClientCreatorr   rP   
connectTCPr   r   
addErrbackerrback)r   rX   rY   ccds        r   _startLogOnzIRCAccount._startLogOn  sV    (##GXtV]SMM$))TYY/	]**+r   c                      y 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 * < < * '** 8 Z?{(( ?  ?Dd({.. d(N Z  !,,  "r   