
    Yf%                     t   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
ej                  Z eej                   G d dej                              Z G d dej        ej                  ZeddZ eej                   G 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                   6    e Zd ZdZd Zd Zd Zd Zd Zd Z	dS )	TwistedWordsPersonzHI a facade for a person you can talk to through a twisted.words service.c                 `    t           j                            | ||           t          | _        d S N)r	   AbstractPerson__init__r   status)selfnamewordsAccounts      L/var/www/html/env/lib/python3.11/site-packages/twisted/words/im/pbsupport.pyr   zTwistedWordsPerson.__init__   s(    "++D$EEE    c                 B    | j         t          k    p| j         t          k    S r   )r   r   r   r   s    r   isOnlinezTwistedWordsPerson.isOnline   s    v%?4;$+>?r   c                     | j         S r   )r   r   s    r   	getStatuszTwistedWordsPerson.getStatus   s
    {r   c                     |rK| j         j        j                            | j        ||          }|                    | j        d|z              |S | j         j        j                            d| j        |          S )zReturn a deferred...* directMessage)accountclientperspectiver!   r   
addErrbackmetadataFailed
callRemoter   textmetadatads       r   sendMessagezTwistedWordsPerson.sendMessage!   st     	#/==dixXXALL,dTk:::H<&2==D  r   c                 z    t          d|d|           | j        j        j                            | j        |          S )Nresult:text:)printr"   r#   r$   r!   r   r   resultr)   s      r   r&   z!TwistedWordsPerson.metadataFailed,   s6    i$///|".<<TYMMMr   c                 l    || _         | j                                                            |            d S r   )r   chatgetContactsListsetContactStatus)r   r   s     r   	setStatuszTwistedWordsPerson.setStatus0   s1    	!!##44T:::::r   N)
__name__
__module____qualname____doc__r   r   r   r,   r&   r7    r   r   r   r      sz        RR  @ @ @  	 	 	N N N; ; ; ; ;r   r   c                   :    e Zd Zd Zd	dZd Zd Zd Zd Zd Z	dS )
TwistedWordsGroupc                 V    t           j                            | ||           d| _        d S Nr   )r	   AbstractGroupr   joined)r   r   wordsClients      r   r   zTwistedWordsGroup.__init__7   s(    !**4{CCCr   Nc                     |rL| j         j        j                            d| j        ||          }|                    | j        d|z              |S | j         j        j                            d| j        |          S )zReturn a deferred.groupMessager    )r"   r#   r$   r'   r   r%   r&   r(   s       r   sendGroupMessagez"TwistedWordsGroup.sendGroupMessage;   s      		#/::	4 A LL,dTk:::H<&2==	4  r   c                 v    | j         j        j                            d|| j        j        d| j                   d S )NsetGroupMetadata)topictopic_authorr"   r#   r$   r'   r   )r   r)   s     r   setTopiczTwistedWordsGroup.setTopicI   sD    '22DK,<==I	
 	
 	
 	
 	
r   c                 |    t          d|d|           | j        j        j                            d| j        |          S )Nr.   r/   rE   )r0   r"   r#   r$   r'   r   r1   s      r   r&   z TwistedWordsGroup.metadataFailedP   s?    i$///|".99DIt
 
 	
r   c                     d| _         d S )N   rB   r   s    r   joiningzTwistedWordsGroup.joiningV       r   c                     d| _         d S r@   rP   r   s    r   leavingzTwistedWordsGroup.leavingY   rR   r   c                 V    | j         j        j                            d| j                  S N
leaveGrouprK   r   s    r   leavezTwistedWordsGroup.leave\   s"    |".99,	RRRr   r   )
r8   r9   r:   r   rF   rL   r&   rQ   rT   rX   r<   r   r   r>   r>   5   s             
 
 

 
 
    S S S S Sr   r>   c                       e Zd ZdZddZd Zd Zd Zd Zd Z	d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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                     d                     |j        ||          | _        || _        t          d||           || _        || _        || _        d S )Nz
{} ({}:{})zHELLO I AM A PB SERVICE)formataccountNamer   r0   r4   r"   _logonDeferred)r   acctserviceNameperspectiveNamechatuir^   s         r   r   zTwistedWordsClient.__init__e   s^    '..
 

 $	'oFFF	,r   c                 8    | j                             ||           S r   )r4   	getPersonr   r   s     r   rd   zTwistedWordsClient.getPersonq   s    y""4...r   c                 8    | j                             ||           S r   )r4   getGroupre   s     r   rg   zTwistedWordsClient.getGroupt   s    y!!$---r   c                 \    | j                             |                     |                    S r   )r4   getGroupConversationrg   re   s     r   ri   z'TwistedWordsClient.getGroupConversationw   s$    y--dmmD.A.ABBBr   c                 <    | j                             d|           d S )N
addContact)r$   r'   re   s     r   rk   zTwistedWordsClient.addContactz   s!    ##L$77777r   c                 x    t          d||           |                     |                              |           d S )Nzreceived group members:)r0   ri   setGroupMembers)r   namesgroups      r   remote_receiveGroupMembersz-TwistedWordsClient.remote_receiveGroupMembers}   s=    '666!!%((88?????r   c                     t          d||||           |                     |                              |||           d S )Nzreceived a group message)r0   ri   showGroupMessage)r   senderro   messager*   s        r   remote_receiveGroupMessagez-TwistedWordsClient.remote_receiveGroupMessage   sE    (&%(KKK!!%((99&'8TTTTTr   c                 x    t          d||           |                     |                              |           d S )Nzmember joined)r0   ri   memberJoinedr   memberro   s      r   remote_memberJoinedz&TwistedWordsClient.remote_memberJoined   s<    ovu---!!%((55f=====r   c                 t    t          d           |                     |                              |           d S )Nzmember left)r0   ri   
memberLeftrx   s      r   remote_memberLeftz$TwistedWordsClient.remote_memberLeft   s8    m!!%((33F;;;;;r   c                 b    | j                             ||                               |           d S r   r4   rd   r7   )r   r   r   s      r   remote_notifyStatusChangedz-TwistedWordsClient.remote_notifyStatusChanged   s.    	D$''11&99999r   c                     | j                             | j                             ||                                         ||           d S r   )r4   getConversationrd   showMessage)r   r   rt   r*   s       r   remote_receiveDirectMessagez.TwistedWordsClient.remote_receiveDirectMessage   sK    	!!$)"5"5dD"A"ABBNNX	
 	
 	
 	
 	
r   c                 r    |D ]3\  }}| j                             ||                               |           4d S r   r   )r   clistr   r   s       r   remote_receiveContactListz,TwistedWordsClient.remote_receiveContactList   sH    ! 	> 	>LD&Id++55f====	> 	>r   c                     d|v rE|                      |                              |d         |                    dd                      d S d S )NrI   rJ   )ri   rL   get)r   dict_	groupNames      r   remote_setGroupMetadataz*TwistedWordsClient.remote_setGroupMetadata   s\    e%%i0099g		.$ ? ?     r   c                     |                      |                                           | j                            d|                              | j        |          S )N	joinGroup)rg   rQ   r$   r'   addCallback_cbGroupJoinedre   s     r   r   zTwistedWordsClient.joinGroup   sS    d##%%%**;==II
 
 	
r   c                     |                      |                                           | j                            d|                              | j        |          S rV   )rg   rT   r$   r'   r   _cbGroupLeftre   s     r   rW   zTwistedWordsClient.leaveGroup   sS    d##%%%**<>>JJt
 
 	
r   c                     | j                             |                     |                    }|                    dd           | j                            d|           d S )Nsysz
you joinedgetGroupMembers)r4   ri   rg   rr   r$   r'   r   r2   r   	groupConvs       r   r   z!TwistedWordsClient._cbGroupJoined   sY    I224==3F3FGG	""5,777##$5t<<<<<r   c                     t          d|           | j                            |                     |          d          }|                    dd           d S )NleftrO   r   zyou left)r0   r4   ri   rg   rr   r   s       r   r   zTwistedWordsClient._cbGroupLeft   sQ    fdI224==3F3FJJ	""5*55555r   c                     t          d|           | j        | j                            |            || _        | j                                         d S )NzConnected Words Client!)r0   r^   callbackr$   r4   r5   )r   r$   s     r   	connectedzTwistedWordsClient.connected   sU    '555*((...&	!!#####r   r   )r8   r9   r:   r;   r   rd   rg   ri   rk   rp   ru   rz   r}   r   r   r   r   r   rW   r   r   r   r<   r   r   rZ   rZ   `   sE        
- 
- 
- 
-/ / /. . .C C C8 8 8@ @ @U U U U> > >< < <: : :
 
 
 

> > >  
 
 

 
 
= = =
6 6 6
$ $ $ $ $r   rZ   N)twisted.wordsztwisted.realityc                   H    e Zd ZdZeZeZ	 d
dZd Z	d Z
d Zd Zd Zd	 ZdS )	PBAccountPBNc           	          t           j                            | ||||||           g | _        |sdd|fg}|D ].\  }}	}
| j                            t
          |         |	|
g           /dS )z_
        @param username: The name of your PB Identity.
        @type username: string
        r   N)r	   AbstractAccountr   servicesappendpbFrontEnds)r   r]   	autoLoginusernamepasswordhostportr   serviceTyper`   ra   s              r   r   zPBAccount.__init__   s     	#,,+y(HdD	
 	
 	
  	F(/8DEH9A 	 	5KoM  [);H   	 	r   c                       j         sZ j        sSd _                                        }|                     j                    fd}|                    |           |S t          j        d          )z
        @returns: this breaks with L{interfaces.IAccount}
        @returntype: DeferredList of L{interfaces.IClient}s
        rO   c                     | D ]F\  }}|r+                     |                               |           2t          j        |           Gd S r   )registerAccountClient	_cb_logOnr   err)resultssuccessr2   rb   r   s      r   registerManyz%PBAccount.logOn.<locals>.registerMany   s`    '. ( (OGV (44V<<<v....( (r   zConnection in progress)_isConnecting	_isOnline_startLogOnr%   _loginFailedr   r   ConnectionError)r   rb   r+   r   s   ``  r   logOnzPBAccount.logOn   s     " 	BT^ 	B!"D  ((ALL*+++( ( ( ( ( ( MM,'''H'(@AAAr   c                     d S r   r<   r   s    r   logOffzPBAccount.logOff   s    r   c                     t          dd           t          j        | j        | j                  }|                    | j        | j        |f           |S )NzConnecting... endcallbackArgs)r0   r   getObjectAtr   r   addCallbacks_cbConnected_ebConnected)r   rb   r+   s      r   r   zPBAccount._startLogOn   sO    o3''''N49di00	t($*;6)TTTr   c                     t          d           t          dd           t          j        || j        | j                  }|                    | j        | j        |f           |S )Nz
Connected!zIdentifying...r   r   r   )r0   r   authIdentityr   r   r   _cbIdentr   )r   rootrb   r+   s       r   r   zPBAccount._cbConnected   s_    lC((((OD$-??	t}d&7viPPPr   c                    |s>t          d           |                     t          t          d                              S t          d           g }| j        D ]m\  }}}t          j                    }|                    |            || ||||          }|                    d|||          	                    |j
                   nt          j        |          S )Nzfalsely identified.zusername or password incorrectzIdentified!attach)r0   r   r   	Exceptionr   r   Deferredr   r'   r   r   DeferredList)	r   identrb   dlhandlerClasssnamepnamer+   handlers	            r   r   zPBAccount._cbIdent  s     	'((($$	"BCCDD   	m*.- 	 	&L%  AIIaLLL"l4vqAAGXueW==II!    !"%%%r   c                 $    t          d           |S )NzNot connected.)r0   )r   r   s     r   r   zPBAccount._ebConnected  s    r   r   )r8   r9   r:   gatewayTyper>   _groupFactoryr   _personFactoryr   r   r   r   r   r   r   r<   r   r   r   r      s        K%M'N PT   $B B B4      & & &"    r   r   )r;   zope.interfacer   twisted.internetr   r   twisted.pythonr   twisted.python.failurer   twisted.spreadr   twisted.words.imr	   r
   twisted.words.im.localsr   r   r   r   r   IGrouprA   r>   ReferenceableAbstractClientMixinrZ   r   IAccountr   r   r<   r   r   <module>r      s  
 
 ' & & & & & ) ) ) ) ) ) ) )       * * * * * *       4 4 4 4 4 4 4 4 9 9 9 9 9 9 9 9 9 9; ; ; ; ;3 ; ; ;B Z'S 'S 'S 'S 'S1 'S 'S  'STZ$ Z$ Z$ Z$ Z$);+J Z$ Z$ Z$z !3tLL Z !!U U U U U+ U U "!U U Ur   