o
    Óó·i$  ã                   @   sÀ   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	„ d	e
jƒZeejƒG d
d„ de
jƒƒZG dd„ de
jejƒZeejƒG dd„ de
jƒƒZdS )z%
IRC support for Instance Messenger.
é    )Úimplementer)ÚdeferÚprotocolÚreactor)Úsucceed)ÚbasesupportÚ
interfacesÚlocals©ÚONLINE)Úircc                   @   s6   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zdd
d„Zd	S )Ú	IRCPersonc                 C   s*   | j jd u r	tj‚| j j d| j ¡ d S )NzWHOIS %s©ÚaccountÚclientr	   ÚOfflineErrorZsendLineÚname©Úself© r   úaC:\Users\psant\Downloads\PAF backend\school\venv\Lib\site-packages\twisted/words/im/ircsupport.pyÚimperson_whois   s   zIRCPerson.imperson_whoisc                 C   ó   t S ©Nr
   r   r   r   r   ÚisOnline   ó   zIRCPerson.isOnlinec                 C   r   r   r
   r   r   r   r   Ú	getStatus   r   zIRCPerson.getStatusc                 C   s   || _ | j ¡  | ¡ d S r   )ÚstatusÚchatÚgetContactsListZsetContactStatus)r   r   r   r   r   Ú	setStatus   s   zIRCPerson.setStatusNc                 C   sj   | j jd u r	tj‚| d¡D ]"}|r'| dd ¡dkr'| j j | jd|fg¡ q| j j | j|¡ qt	|ƒS )NÚ
ÚstyleÚemoteÚACTION)
r   r   r	   r   ÚsplitÚgetÚctcpMakeQueryr   Úmsgr   ©r   ÚtextÚmetaÚliner   r   r   ÚsendMessage"   s   zIRCPerson.sendMessager   )Ú__name__Ú
__module__Ú__qualname__r   r   r   r    r-   r   r   r   r   r      s    r   c                   @   s8   e Zd Zdd„ Zdd„ Zdd„ Zi fdd„Zd	d
„ ZdS )ÚIRCGroupc                 C   ó   d S r   r   r   r   r   r   Úimgroup_testAction/   r   zIRCGroup.imgroup_testActionc                 C   s>   | j jd u r	tj‚d}| j j d| j› d|j› d|› �¡ d S )Nzfor great justice!zKICK #ú z :r   )r   ÚtargetÚreasonr   r   r   Úimtarget_kick2   s   (zIRCGroup.imtarget_kickc                 C   s(   | j jd u r	tj‚| j j | j|¡ d S r   )r   r   r	   r   Útopicr   )r   r8   r   r   r   ÚsetTopic9   s   zIRCGroup.setTopicc                 C   sp   | j jd u r	tj‚|r#| dd ¡dkr#| j j | jd|fg¡ t|ƒS | d¡D ]}| j j 	| j|¡ q(t|ƒS )Nr"   r#   r$   r!   )
r   r   r	   r   r&   r'   r   r   r%   Zsayr)   r   r   r   ÚsendGroupMessage>   s   zIRCGroup.sendGroupMessagec                 C   s8   | j jd u r	tj‚| j j | j¡ | j j | jd¡ d S ©Né   )r   r   r	   r   Úleaver   ÚgetGroupConversationr   r   r   r   r=   I   s   zIRCGroup.leaveN)r.   r/   r0   r3   r7   r9   r:   r=   r   r   r   r   r1   -   s    r1   c                   @   sº   e Zd Zd-dd„Zd.dd„Zdd„ Zd	d
„ Zdd„ Zdd„ Zdd„ Z	dd„ Z
d-dd„Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zd+d,„ ZdS )/ÚIRCProtoNc                 C   s.   t j | |||¡ i | _i | _i | _i | _d S r   )r   ÚAbstractClientMixinÚ__init__Ú_namrepliesÚ	_ingroupsZ_groupsÚ_topics)r   r   ÚchatuiÚlogonDeferredr   r   r   rA   Q   s
   
zIRCProto.__init__r   c                 C   s"   |  ¡ }| jj| j || ¡|d�S )N)Z
stayHidden)Úlowerr   r>   ÚgetGroup)r   r   Úhider   r   r   r>   X   s   ÿzIRCProto.getGroupConversationc                 C   s   | j  || ¡S r   )r   Ú	getPerson©r   r   r   r   r   rJ   ^   s   zIRCProto.getPersonc                 C   s˜   z9d| _ | jj| _| jj| _d| _tj | ¡ | jj	D ]}|  
|¡ qd| j_| jd ur2| j | ¡ | j ¡  W d S  tyK   dd l}| ¡  Y d S w )NTzTwisted-IM userr<   r   )ZperformLoginr   ÚusernameÚnicknameÚpasswordZrealnamer   Ú	IRCClientÚconnectionMadeÚchannelsÚ	joinGroupZ	_isOnlineZ_logonDeferredÚcallbackr   r   ÚBaseExceptionÚ	tracebackÚ	print_exc)r   ÚchannelrU   r   r   r   rP   a   s    


ýzIRCProto.connectionMadec                 C   s"   || _ d| | _tj | |¡ d S )Nz%s (IRC))r   ÚaccountNamer   rO   ÚsetNick)r   Znickr   r   r   rY   v   s   
zIRCProto.setNickc                 C   s    | j  | j  |dd… | ¡d¡S )z9
        Called when I am kicked from a channel.
        r<   N)r   r>   rH   )r   rW   ÚkickerÚmessager   r   r   Ú
kickedFrom{   s    zIRCProto.kickedFromc                 C   r2   r   r   )r   ZkickeerW   rZ   r[   r   r   r   Ú
userKicked�   r   zIRCProto.userKickedc                 C   s   |   |||ddi¡ d S )NZdontAutoRespondr<   )Úprivmsg)r   rL   rW   r[   r   r   r   Únoticed„   s   zIRCProto.noticedc                 C   sx   |d u ri }|  dd¡d }|| jkrd S |d dkr-|dd … }|  |¡ |||¡ d S | j |  |¡¡ ||¡ d S )Nú!r<   r   ú#©r%   r   r>   ZshowGroupMessager   ZgetConversationrJ   ZshowMessage)r   rL   rW   r[   ÚmetadataÚgroupr   r   r   r^   ‡   s   

ÿÿzIRCProto.privmsgc                 C   st   |  dd¡d }|| jkrd S ddi}|d dkr+|dd … }|  |¡ |||¡ d S | j |  |¡¡ ||¡ d S )Nr`   r<   r   r"   r#   ra   rb   )r   rL   rW   r#   r+   rd   r   r   r   Úaction—   s   
zIRCProto.actionc              	   C   sÊ   |d dd…   ¡ }|d  ¡ }tt|ƒƒD ]}|| d dv r2|| dd… ||< || d dv s q|| jvr=g | j|< | j|  |¡ |D ]}z
| j|  |¡ W qG tyb   |g| j|< Y qGw dS )zƒ
        RPL_NAMREPLY
        >> NAMES #bnl
        << :Arlington.VA.US.Undernet.Org 353 z3p = #bnl :pSwede Dan-- SkOyg AG
        é   r<   Né   r   )ú@ú+)	rG   r%   ÚrangeÚlenrB   ÚextendrC   ÚappendrT   )r   ÚprefixÚparamsrd   ZusersZuirM   r   r   r   Úirc_RPL_NAMREPLY¢   s"   ÿ€

ÿýzIRCProto.irc_RPL_NAMREPLYc                 C   s:   |d dd … }|   |¡ | j| ¡  ¡ | j| ¡ = d S r;   )r>   ZsetGroupMembersrB   rG   ©r   rn   ro   rd   r   r   r   Úirc_RPL_ENDOFNAMES¶   s
   
ÿzIRCProto.irc_RPL_ENDOFNAMESc                 C   s   |d | j |d dd … < d S )Nrf   r<   )rD   )r   rn   ro   r   r   r   Úirc_RPL_TOPIC½   s   zIRCProto.irc_RPL_TOPICc                 C   s8   |d dd … }|   |¡ | j| |d ¡ | j|= d S )Nr<   rf   )r>   r9   rD   rq   r   r   r   Úirc_333À   s   zIRCProto.irc_333c                 C   s<   |  d¡d }|d dd … }|d }|  |¡ ||¡ d S ©Nr`   r   r<   )r%   r>   r9   )r   rn   ro   rM   rd   r8   r   r   r   Ú	irc_TOPICÅ   s   zIRCProto.irc_TOPICc                 C   sx   |  d¡d }|d dd …  ¡ }|| jkr:z
| j|  |¡ W n ty/   |g| j|< Y nw |  |¡ |¡ d S d S ru   )r%   rG   rM   rC   rm   rT   r>   ZmemberJoined©r   rn   ro   rM   rd   r   r   r   Úirc_JOINË   s   
ÿûzIRCProto.irc_JOINc                 C   sf   |  d¡d }|d dd …  ¡ }|| jkr/|| j| v r1| j|  |¡ |  |¡ |¡ d S d S d S ru   )r%   rG   rM   rC   Úremover>   Ú
memberLeftrw   r   r   r   Úirc_PARTÕ   s   
ýzIRCProto.irc_PARTc                 C   sJ   |  d¡d }|| jv r#| j| D ]
}|  |¡ |¡ qg | j|< d S d S ©Nr`   r   )r%   rC   r>   rz   rw   r   r   r   Úirc_QUITÝ   s   
ýzIRCProto.irc_QUITc                 C   sb   |  d¡d }|d }|| jvrd S | j| D ]}|  |¡ ||¡ q| j| | j|< | j|= d S r|   )r%   rC   r>   ZmemberChangedNick)r   rn   ro   ZfromNickZtoNickrd   r   r   r   Úirc_NICKä   s   
zIRCProto.irc_NICKc                 C   r2   r   r   )r   rn   Úcommandro   r   r   r   Úirc_unknownî   r   zIRCProto.irc_unknownc                 C   s   |   |¡ |  |¡ d S r   )Újoinr>   rK   r   r   r   rR   ò   s   
zIRCProto.joinGroupr   )r   )r.   r/   r0   rA   r>   rJ   rP   rY   r\   r]   r_   r^   re   rp   rr   rs   rt   rv   rx   r{   r}   r~   r€   rR   r   r   r   r   r?   P   s,    




r?   c                   @   s4   e Zd ZdZeZeZ	d
dd„Zdd„ Z	dd„ Z
d	S )Ú
IRCAccountZIRCÚ c              	   C   sH   t j | ||||||¡ dd„ | d¡D ƒ| _| jdgkr"g | _d S d S )Nc                 S   s   g | ]}|  ¡ ‘qS r   )Ústrip)Ú.0rW   r   r   r   Ú
<listcomp>  s    z'IRCAccount.__init__.<locals>.<listcomp>ú,rƒ   )r   ÚAbstractAccountrA   r%   rQ   )r   rX   Z	autoLoginrL   rN   ÚhostÚportrQ   r   r   r   rA   þ   s   ÿ
ÿzIRCAccount.__init__c                 C   s:   t  ¡ }t tt| ||¡}| | j| j¡}| 	|j
¡ |S r   )r   ZDeferredr   ZClientCreatorr   r?   Z
connectTCPr‰   rŠ   Z
addErrbackZerrback)r   rE   rF   ÚccÚdr   r   r   Ú_startLogOn  s
   zIRCAccount._startLogOnc                 C   r2   r   r   r   r   r   r   ÚlogOff  s   zIRCAccount.logOffN)rƒ   )r.   r/   r0   ZgatewayTyper1   Z_groupFactoryr   Z_personFactoryrA   r�   rŽ   r   r   r   r   r‚   ÷   s    
ÿ
r‚   N)Ú__doc__Zzope.interfacer   Ztwisted.internetr   r   r   Ztwisted.internet.deferr   Ztwisted.words.imr   r   r	   Ztwisted.words.im.localsr   Ztwisted.words.protocolsr   ZAbstractPersonr   ZIGroupZAbstractGroupr1   r@   rO   r?   ZIAccountrˆ   r‚   r   r   r   r   Ú<module>   s   " (