o
    >h%                     @   s   d Z ddlmZ ddlmZmZ ddlmZ ddlm	Z	 ddl
mZ ddlmZmZ ddlmZmZ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ddZeejG dd dejZdS )z2
L{twisted.words} support for Instance Messenger.
    )implementer)defererror)log)Failure)pb)basesupport
interfaces)AWAYOFFLINEONLINEc                   @   s@   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dS )TwistedWordsPersonzHI a facade for a person you can talk to through a twisted.words service.c                 C   s   t j| || t| _d S N)r   AbstractPerson__init__r   status)selfnamewordsAccount r   z/var/www/vedio/testing/chatpythonscript.ninositsolution.com/env/lib/python3.10/site-packages/twisted/words/im/pbsupport.pyr         
zTwistedWordsPerson.__init__c                 C   s   | j tkp	| j tkS r   )r   r   r
   r   r   r   r   isOnline      zTwistedWordsPerson.isOnlinec                 C   s   | j S r   )r   r   r   r   r   	getStatus   s   zTwistedWordsPerson.getStatusc                 C   sF   |r| j jj| j||}|| jd|  |S | j jjd| j|S )zReturn a deferred...* directMessage)accountclientperspectiver   r   
addErrbackmetadataFailed
callRemoter   textmetadatadr   r   r   sendMessage!   s   
zTwistedWordsPerson.sendMessagec                 C   s"   t d|d| | jjj| j|S )Nresult:text:)printr   r   r    r   r   r   resultr%   r   r   r   r"   ,   s   z!TwistedWordsPerson.metadataFailedc                 C   s   || _ | j |  d S r   )r   chatgetContactsListsetContactStatus)r   r   r   r   r   	setStatus0   s   zTwistedWordsPerson.setStatusN)
__name__
__module____qualname____doc__r   r   r   r(   r"   r1   r   r   r   r   r      s    r   c                   @   sF   e Z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S )TwistedWordsGroupc                 C   s   t j| || d| _d S Nr   )r   AbstractGroupr   joined)r   r   wordsClientr   r   r   r   7   r   zTwistedWordsGroup.__init__Nc                 C   sH   |r| j jjd| j||}|| jd|  |S | j jjd| j|S )zReturn a deferred.groupMessager   )r   r   r    r#   r   r!   r"   r$   r   r   r   sendGroupMessage;   s   


z"TwistedWordsGroup.sendGroupMessagec                 C   s$   | j jjd|| jjd| j d S )NsetGroupMetadata)topictopic_authorr   r   r    r#   r   )r   r%   r   r   r   setTopicI   s
   
zTwistedWordsGroup.setTopicc                 C   s$   t d|d| | jjjd| j|S )Nr)   r*   r;   )r+   r   r   r    r#   r   r,   r   r   r   r"   P   s   
z TwistedWordsGroup.metadataFailedc                 C   
   d| _ d S )N   r9   r   r   r   r   joiningV      
zTwistedWordsGroup.joiningc                 C   rB   r7   rD   r   r   r   r   leavingY   rF   zTwistedWordsGroup.leavingc                 C   s   | j jjd| jS N
leaveGroupr@   r   r   r   r   leave\   r   zTwistedWordsGroup.leaver   )
r2   r3   r4   r   r<   rA   r"   rE   rG   rJ   r   r   r   r   r6   5   s    
r6   c                   @   s   e Zd ZdZd'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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 )(TwistedWordsClientzIn some cases, this acts as an Account, since it a source of text
    messages (multiple Words instances may be on a single PB connection)
    Nc                 C   s:   d |j||| _|| _td|| || _|| _|| _d S )Nz
{} ({}:{})zHELLO I AM A PB SERVICE)formataccountNamer   r+   r.   r   _logonDeferred)r   acctserviceNameperspectiveNamechatuirN   r   r   r   r   e   s   
zTwistedWordsClient.__init__c                 C      | j || S r   )r.   	getPersonr   r   r   r   r   rT   q      zTwistedWordsClient.getPersonc                 C   rS   r   )r.   getGrouprU   r   r   r   rW   t   rV   zTwistedWordsClient.getGroupc                 C   s   | j | |S r   )r.   getGroupConversationrW   rU   r   r   r   rX   w      z'TwistedWordsClient.getGroupConversationc                 C   s   | j d| d S )N
addContact)r    r#   rU   r   r   r   rZ   z   rY   zTwistedWordsClient.addContactc                 C       t d|| | || d S )Nzreceived group members:)r+   rX   setGroupMembers)r   namesgroupr   r   r   remote_receiveGroupMembers}      z-TwistedWordsClient.remote_receiveGroupMembersc                 C   s(   t d|||| | |||| d S )Nzreceived a group message)r+   rX   showGroupMessage)r   senderr^   messager&   r   r   r   remote_receiveGroupMessage   s   z-TwistedWordsClient.remote_receiveGroupMessagec                 C   r[   )Nzmember joined)r+   rX   memberJoinedr   memberr^   r   r   r   remote_memberJoined   r`   z&TwistedWordsClient.remote_memberJoinedc                 C   s   t d | || d S )Nzmember left)r+   rX   
memberLeftrf   r   r   r   remote_memberLeft   s   z$TwistedWordsClient.remote_memberLeftc                 C   s   | j || | d S r   r.   rT   r1   )r   r   r   r   r   r   remote_notifyStatusChanged   s   z-TwistedWordsClient.remote_notifyStatusChangedc                 C   s"   | j | j || || d S r   )r.   getConversationrT   showMessage)r   r   rc   r&   r   r   r   remote_receiveDirectMessage   s   z.TwistedWordsClient.remote_receiveDirectMessagec                 C   s&   |D ]\}}| j || | qd S r   rk   )r   clistr   r   r   r   r   remote_receiveContactList   s   z,TwistedWordsClient.remote_receiveContactListc                 C   s.   d|v r|  ||d |dd  d S d S )Nr>   r?   )rX   rA   get)r   dict_	groupNamer   r   r   remote_setGroupMetadata   s
   
z*TwistedWordsClient.remote_setGroupMetadatac                 C   &   |  |  | jd|| j|S )N	joinGroup)rW   rE   r    r#   addCallback_cbGroupJoinedrU   r   r   r   rw         zTwistedWordsClient.joinGroupc                 C   rv   rH   )rW   rG   r    r#   rx   _cbGroupLeftrU   r   r   r   rI      rz   zTwistedWordsClient.leaveGroupc                 C   s0   | j | |}|dd | jd| d S )Nsysz
you joinedgetGroupMembers)r.   rX   rW   ra   r    r#   r   r-   r   	groupConvr   r   r   ry      s   z!TwistedWordsClient._cbGroupJoinedc                 C   s.   t d| | j| |d}|dd d S )NleftrC   r|   zyou left)r+   r.   rX   rW   ra   r~   r   r   r   r{      s   
zTwistedWordsClient._cbGroupLeftc                 C   s4   t d| | jd ur| j|  || _| j  d S )NzConnected Words Client!)r+   rN   callbackr    r.   r/   )r   r    r   r   r   	connected   s
   

zTwistedWordsClient.connectedr   )r2   r3   r4   r5   r   rT   rW   rX   rZ   r_   rd   rh   rj   rl   ro   rq   ru   rw   rI   ry   r{   r   r   r   r   r   rK   `   s(    


rK   N)twisted.wordsztwisted.realityc                   @   sT   e Zd ZdZeZeZ	dddZdd Z	dd Z
d	d
 Zdd Zdd Zdd ZdS )	PBAccountPBNc              	   C   sX   t j| |||||| g | _|sdd|fg}|D ]\}}	}
| jt| |	|
g qdS )z_
        @param username: The name of your PB Identity.
        @type username: string
        r   N)r   AbstractAccountr   servicesappendpbFrontEnds)r   rM   	autoLoginusernamepasswordhostportr   serviceTyperP   rQ   r   r   r   r      s   zPBAccount.__init__c                    sN   j s"js"d_  }|j  fdd}|| |S td)z
        @returns: this breaks with L{interfaces.IAccount}
        @returntype: DeferredList of L{interfaces.IClient}s
        rC   c                    s6   | D ]\}}|r  | | qt| qd S r   )registerAccountClient	_cb_logOnr   err)resultssuccessr-   rR   r   r   r   registerMany   s   
z%PBAccount.logOn.<locals>.registerManyzConnection in progress)_isConnecting	_isOnline_startLogOnr!   _loginFailedrx   r   ConnectionError)r   rR   r'   r   r   r   r   logOn   s   


zPBAccount.logOnc                 C   s   d S r   r   r   r   r   r   logOff   s   zPBAccount.logOffc                 C   s6   t ddd t| j| j}|j| j| j|fd |S )NzConnecting... endcallbackArgs)r+   r   getObjectAtr   r   addCallbacks_cbConnected_ebConnected)r   rR   r'   r   r   r   r      s   zPBAccount._startLogOnc                 C   s@   t d t ddd t|| j| j}|j| j| j|fd |S )Nz
Connected!zIdentifying...r   r   r   )r+   r   authIdentityr   r   r   _cbIdentr   )r   rootrR   r'   r   r   r   r      s
   zPBAccount._cbConnectedc           	      C   s   |st d | ttdS t d g }| jD ]"\}}}t }|| || ||||}|d|||	|j
 qt|S )Nzfalsely identified.zusername or password incorrectzIdentified!attach)r+   r   r   	Exceptionr   r   Deferredr   r#   rx   r   DeferredList)	r   identrR   dlhandlerClasssnamepnamer'   handlerr   r   r   r     s   


zPBAccount._cbIdentc                 C   s   t d |S )NzNot connected.)r+   )r   r   r   r   r   r     s   zPBAccount._ebConnectedr   )r2   r3   r4   gatewayTyper6   _groupFactoryr   _personFactoryr   r   r   r   r   r   r   r   r   r   r   r      s    
r   )r5   zope.interfacer   twisted.internetr   r   twisted.pythonr   twisted.python.failurer   twisted.spreadr   twisted.words.imr   r	   twisted.words.im.localsr
   r   r   r   r   IGroupr8   r6   ReferenceableAbstractClientMixinrK   r   IAccountr   r   r   r   r   r   <module>   s   !*
]