o
    >h$                     @   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	   OfflineErrorsendLinenameself r   {/var/www/vedio/testing/chatpythonscript.ninositsolution.com/env/lib/python3.10/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getContactsList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   r:   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'   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)r0   r1   r2   r5   r9   r;   r=   r@   r   r   r   r   r3   -   s    r3   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	_ingroups_groups_topics)r   r   chatuilogonDeferredr   r   r   rD   Q   s
   
zIRCProto.__init__r   c                 C   s"   |  }| jj| j|| |dS )N)
stayHidden)lowerr   rA   getGroup)r   r   hider   r   r   rA   X   s   zIRCProto.getGroupConversationc                 C   s   | j || S r   )r   	getPersonr   r   r   r   r   rO   ^   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   )performLoginr   usernamenicknamepasswordrealnamer   	IRCClientconnectionMadechannels	joinGroup	_isOnline_logonDeferredcallbackr   r    BaseException	traceback	print_exc)r   channelr^   r   r   r   rW   a   s    


zIRCProto.connectionMadec                 C   s"   || _ d| | _tj| | d S )Nz%s (IRC))r   accountNamer   rV   setNick)r   nickr   r   r   rb   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   rA   rM   )r   r`   kickermessager   r   r   
kickedFrom{   s    zIRCProto.kickedFromc                 C   r4   r   r   )r   kickeer`   rd   re   r   r   r   
userKicked   r   zIRCProto.userKickedc                 C   s   |  |||ddi d S )NdontAutoRespondr?   )privmsg)r   rR   r`   re   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   rA   showGroupMessager   getConversationrO   showMessage)r   rR   r`   re   metadatagroupr   r   r   rj      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 )Nrl   r?   r   r$   r%   rm   rn   )r   rR   r`   r%   r-   rs   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   )@+)	rL   r'   rangelenrE   extendrF   appendr]   )r   prefixparamsrs   usersuirS   r   r   r   irc_RPL_NAMREPLY   s"   

zIRCProto.irc_RPL_NAMREPLYc                 C   s:   |d dd  }|  || j|   | j| = d S r>   )rA   setGroupMembersrE   rL   r   r}   r~   rs   r   r   r   irc_RPL_ENDOFNAMES   s
   
zIRCProto.irc_RPL_ENDOFNAMESc                 C   s   |d | j |d dd  < d S )Nru   r?   )rH   )r   r}   r~   r   r   r   irc_RPL_TOPIC   s   zIRCProto.irc_RPL_TOPICc                 C   s8   |d dd  }|  || j| |d  | j|= d S )Nr?   ru   )rA   r;   rH   r   r   r   r   irc_333   s   zIRCProto.irc_333c                 C   s<   | dd }|d dd  }|d }| ||| d S Nrl   r   r?   )r'   rA   r;   )r   r}   r~   rS   rs   r:   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 r   )r'   rL   rS   rF   r|   r]   rA   memberJoinedr   r}   r~   rS   rs   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 r   )r'   rL   rS   rF   removerA   
memberLeftr   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 Nrl   r   )r'   rF   rA   r   r   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'   rF   rA   memberChangedNick)r   r}   r~   fromNicktoNickrs   r   r   r   irc_NICK   s   
zIRCProto.irc_NICKc                 C   r4   r   r   )r   r}   commandr~   r   r   r   irc_unknown   r   zIRCProto.irc_unknownc                 C   s   |  | | | d S r   )joinrA   rP   r   r   r   rY      s   
zIRCProto.joinGroupr   )r   )r0   r1   r2   rD   rA   rO   rW   rb   rf   rh   rk   rj   rt   r   r   r   r   r   r   r   r   r   r   rY   r   r   r   r   rB   P   s,    




rB   c                   @   s4   e Zd ZdZeZeZ	d
ddZdd Z	dd Z
d	S )
IRCAccount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).0r`   r   r   r   
<listcomp>  s    z'IRCAccount.__init__.<locals>.<listcomp>,r   )r   AbstractAccountrD   r'   rX   )r   ra   	autoLoginrR   rT   hostportrX   r   r   r   rD      s   
zIRCAccount.__init__c                 C   s:   t  }ttt| ||}|| j| j}|	|j
 |S r   )r   Deferredr   ClientCreatorr   rB   
connectTCPr   r   
addErrbackerrback)r   rI   rJ   ccdr   r   r   _startLogOn  s
   zIRCAccount._startLogOnc                 C   r4   r   r   r   r   r   r   logOff  s   zIRCAccount.logOffN)r   )r0   r1   r2   gatewayTyper3   _groupFactoryr   _personFactoryrD   r   r   r   r   r   r   r      s    

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AbstractGroupr3   rC   rV   rB   IAccountr   r   r   r   r   r   <module>   s   " (