o
    ¯bŸ!  ã                   @   sl   d dl mZmZ G dd„ deƒZG dd„ deƒZG dd„ deƒZG dd	„ d	eƒZG d
d„ deƒZg d¢ZdS )é    )Ú	AttributeÚ	Interfacec                   @   s    e Zd ZdZedƒZdd„ ZdS )ÚIProtocolPluginz?Interface for plugins providing an interface to a Words servicezHA single word describing what kind of interface this is (eg, irc or web)c                 C   ó   dS )ab  Retrieve a C{twisted.internet.interfaces.IServerFactory} provider

        @param realm: An object providing C{twisted.cred.portal.IRealm} and
        L{IChatService}, with which service information should be looked up.

        @param portal: An object providing C{twisted.cred.portal.IPortal},
        through which logins should be performed.
        N© )ÚrealmÚportalr   r   ú6/usr/lib/python3/dist-packages/twisted/words/iwords.pyÚ
getFactory   ó    zIProtocolPlugin.getFactoryN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Únamer
   r   r   r   r	   r      s    ÿr   c                   @   sF   e Zd ZedƒZdd„ Zddd„Zdd„ Zd	d
„ Zdd„ Z	dd„ Z
dS )ÚIGroupz$A short string, unique among groups.c                 C   r   )zLInclude the given user in this group.

        @type user: L{IUser}
        Nr   )Úuserr   r   r	   Úadd   r   z
IGroup.addNc                 C   r   )znRemove the given user from this group.

        @type user: L{IUser}
        @type reason: C{unicode}
        Nr   )r   Úreasonr   r   r	   Úremove#   r   zIGroup.removec                   C   r   )zãReturn the number of participants in this group.

        @rtype: L{twisted.internet.defer.Deferred}
        @return: A Deferred which fires with an C{int} representing the
        number of participants in this group.
        Nr   r   r   r   r	   Úsize*   r   zIGroup.sizec                 C   r   )aY  
        Broadcast the given message from the given sender to other
        users in group.

        The message is not re-transmitted to the sender.

        @param sender: L{IUser}

        @type recipient: L{IGroup}
        @param recipient: This is probably a wart.  Maybe it will be removed
        in the future.  For now, it should be the group object the message
        is being delivered to.

        @param message: C{dict}

        @rtype: L{twisted.internet.defer.Deferred}
        @return: A Deferred which fires with None when delivery has been
        attempted for all users.
        Nr   ©ÚsenderÚ	recipientÚmessager   r   r	   Úreceive2   r   zIGroup.receivec                 C   r   )zUChange the metadata associated with this group.

        @type meta: C{dict}
        Nr   )Úmetar   r   r	   ÚsetMetadataG   r   zIGroup.setMetadatac                   C   r   )z.Return an iterator of all users in this group.Nr   r   r   r   r	   Ú	iterusersM   r   zIGroup.iterusers©N)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r	   r      s    
r   c                   @   s:   e Zd ZdZedƒZdd„ Zdd„ Zdd„ Zdd
d„Z	d	S )ÚIChatClientz<Interface through which IChatService interacts with clients.z[A short string, unique among users.  This will be set by the L{IChatService} at login time.c                 C   r   )a^  
        Callback notifying this user of the given message sent by the
        given user.

        This will be invoked whenever another user sends a message to a
        group this user is participating in, or whenever another user sends
        a message directly to this user.  In the former case, C{recipient}
        will be the group to which the message was sent; in the latter, it
        will be the same object as the user who is receiving the message.

        @type sender: L{IUser}
        @type recipient: L{IUser} or L{IGroup}
        @type message: C{dict}

        @rtype: L{twisted.internet.defer.Deferred}
        @return: A Deferred which fires when the message has been delivered,
        or which fails in some way.  If the Deferred fails and the message
        was directed at a group, this user will be removed from that group.
        Nr   r   r   r   r	   r   X   r   zIChatClient.receivec                 C   r   )zÙ
        Callback notifying this user that the metadata for the given
        group has changed.

        @type group: L{IGroup}
        @type meta: C{dict}

        @rtype: L{twisted.internet.defer.Deferred}
        Nr   )Úgroupr   r   r   r	   ÚgroupMetaUpdatem   r   zIChatClient.groupMetaUpdatec                 C   r   )z×
        Callback notifying this user that the given user has joined
        the given group.

        @type group: L{IGroup}
        @type user: L{IUser}

        @rtype: L{twisted.internet.defer.Deferred}
        Nr   )r!   r   r   r   r	   Ú
userJoinedx   r   zIChatClient.userJoinedNc                 C   r   )a  
        Callback notifying this user that the given user has left the
        given group for the given reason.

        @type group: L{IGroup}
        @type user: L{IUser}
        @type reason: C{unicode}

        @rtype: L{twisted.internet.defer.Deferred}
        Nr   )r!   r   r   r   r   r	   ÚuserLeftƒ   r   zIChatClient.userLeftr   )
r   r   r   r   r   r   r   r"   r#   r$   r   r   r   r	   r    Q   s    ÿr    c                   @   s`   e Zd ZdZedƒZedƒZedƒZedƒZedƒZ	dd„ Z
d	d
„ Zdd„ Zdd„ Zdd„ ZdS )ÚIUserz;Interface through which clients interact with IChatService.z_A reference to the Realm to which this user belongs.  Set if and only if the user is logged in.z`A reference to the mind which logged in to this user.  Set if and only if the user is logged in.z#A short string, unique among users.zRA POSIX timestamp indicating the time of the last message received from this user.zBA POSIX timestamp indicating this user's most recent sign on time.c                 C   r   )zÌInvoked by the associated L{IChatService} when login occurs.

        @param realm: The L{IChatService} through which login is occurring.
        @param mind: The mind object used for cred login.
        Nr   )r   Úmindr   r   r	   ÚloggedIn¢   r   zIUser.loggedInc                 C   r   )z‘Send the given message to the given user or group.

        @type recipient: Either L{IUser} or L{IGroup}
        @type message: C{dict}
        Nr   )r   r   r   r   r	   Úsend©   r   z
IUser.sendc                 C   r   )z|Attempt to join the given group.

        @type group: L{IGroup}
        @rtype: L{twisted.internet.defer.Deferred}
        Nr   ©r!   r   r   r	   Újoin°   r   z
IUser.joinc                 C   r   )z‰Discontinue participation in the given group.

        @type group: L{IGroup}
        @rtype: L{twisted.internet.defer.Deferred}
        Nr   r)   r   r   r	   Úleave·   r   zIUser.leavec                   C   r   )zZ
        Return an iterator of all groups of which this user is a
        member.
        Nr   r   r   r   r	   Ú
itergroups¾   r   zIUser.itergroupsN)r   r   r   r   r   r   r&   r   ÚlastMessageÚsignOnr'   r(   r*   r+   r,   r   r   r   r	   r%   �   s(    ÿÿÿÿr%   c                   @   sT   e Zd ZedƒZedƒZedƒZdd„ Zdd„ Zdd	„ Z	d
d„ Z
dd„ Zdd„ ZdS )ÚIChatServicez=A short string identifying this chat service (eg, a hostname)zxA boolean indicating whether L{getGroup} should implicitly create groups which are requested but which do not yet exist.zvA boolean indicating whether L{getUser} should implicitly create users which are requested but which do not yet exist.c                   C   r   )zµReturn all groups available on this service.

        @rtype: C{twisted.internet.defer.Deferred}
        @return: A Deferred which fires with a list of C{IGroup} providers.
        Nr   r   r   r   r	   r,   Ò   r   zIChatService.itergroupsc                 C   r   )a’  Retrieve the group by the given name.

        @type name: C{str}

        @rtype: L{twisted.internet.defer.Deferred}
        @return: A Deferred which fires with the group with the given
        name if one exists (or if one is created due to the setting of
        L{IChatService.createGroupOnRequest}, or which fails with
        L{twisted.words.ewords.NoSuchGroup} if no such group exists.
        Nr   ©r   r   r   r	   ÚgetGroupÙ   r   zIChatService.getGroupc                 C   r   )a2  Create a new group with the given name.

        @type name: C{str}

        @rtype: L{twisted.internet.defer.Deferred}
        @return: A Deferred which fires with the created group, or
        with fails with L{twisted.words.ewords.DuplicateGroup} if a
        group by that name exists already.
        Nr   r0   r   r   r	   ÚcreateGroupå   r   zIChatService.createGroupc                 C   r   )aE  Retrieve a group by name.

        Unlike C{getGroup}, this will never implicitly create a group.

        @type name: C{str}

        @rtype: L{twisted.internet.defer.Deferred}
        @return: A Deferred which fires with the group by the given
        name, or which fails with L{twisted.words.ewords.NoSuchGroup}.
        Nr   r0   r   r   r	   ÚlookupGroupð   r   zIChatService.lookupGroupc                 C   r   )a�  Retrieve the user by the given name.

        @type name: C{str}

        @rtype: L{twisted.internet.defer.Deferred}
        @return: A Deferred which fires with the user with the given
        name if one exists (or if one is created due to the setting of
        L{IChatService.createUserOnRequest}, or which fails with
        L{twisted.words.ewords.NoSuchUser} if no such user exists.
        Nr   r0   r   r   r	   ÚgetUserü   r   zIChatService.getUserc                 C   r   )a.  Create a new user with the given name.

        @type name: C{str}

        @rtype: L{twisted.internet.defer.Deferred}
        @return: A Deferred which fires with the created user, or
        with fails with L{twisted.words.ewords.DuplicateUser} if a
        user by that name exists already.
        Nr   r0   r   r   r	   Ú
createUser  r   zIChatService.createUserN)r   r   r   r   r   ÚcreateGroupOnRequestÚcreateUserOnRequestr,   r1   r2   r3   r4   r5   r   r   r   r	   r/   Å   s    ÿÿr/   )r   r    r%   r/   N)	Úzope.interfacer   r   r   r   r    r%   r/   Ú__all__r   r   r   r	   Ú<module>   s   7?5O