o
    n~b                     @   sp   d dl m Z  d dlmZ d dl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Zd
S )    )datetime)hexlify)Event)SteamID)EFriendRelationshipEPersonaStateEChatEntryType)EMsg)MsgProtoc                   @   s   e Zd ZdZdZdZe Zej	Z
dd Zdd Zd d	d
Zd ddZedd Zedd Zedd Zedd Zedd Zd!ddZdd Zdd Zdd ZdS )"	SteamUserz
    A data model for a Steam user. Holds user persona state, and related actions

    .. note::
        This is an internal object that can be obtained by :meth:`SteamClient.get_user`
    NFc                 C   s   t  | _|| _t|| _d S )N)r   _pstate_ready_steamr   steam_id)selfr   Zsteam r   </usr/local/lib/python3.10/dist-packages/steam/client/user.py__init__   s   zSteamUser.__init__c                 C   s   d| j jt| j| j| jf S )Nz<%s(%s, %s, %s)>)	__class____name__strr   relationshipstater   r   r   r   __repr__   s   zSteamUser.__repr__Tc                 C   s\   | j r| j rd| _ | j s| j| jg | j  d| _ |r,| jjdd d| _ d S d S )NFT   )timeout)_pstate_requestedr   is_setr   Zrequest_persona_stater   clearwait)r   r   r   r   r   refresh"   s   

zSteamUser.refreshc                 C   s0   | j  s|r|   | jdurt| j|S dS )zGet property from PersonaState

        `See full list of available fields_names <https://github.com/ValvePython/steam/blob/fa8a5127e9bb23185483930da0b6ae85e93055a7/protobufs/steammessages_clientserver_friends.proto#L125-L153>`_
        N)r   r   r    _pstategetattr)r   
field_nameZwait_pstater   r   r   get_ps/   s
   
zSteamUser.get_psc                 C      |  d}|rt|S dS )(:rtype: :class:`datetime`, :class:`None`
last_logonNr$   r   utcfromtimestampr   tsr   r   r   r'   <      
zSteamUser.last_logonc                 C   r%   )r&   last_logoffNr(   r*   r   r   r   r-   B   r,   zSteamUser.last_logoffc                 C   s
   |  dS )zoName of the steam user, or ``None`` if it's not available

        :rtype: :class:`str`, :class:`None`
        Zplayer_name)r$   r   r   r   r   nameH   s   
zSteamUser.namec                 C   s   |  dd}|rt|S tjS )zhPersonsa state (e.g. Online, Offline, Away, Busy, etc)

        :rtype: :class:`.EPersonaState`
        Zpersona_stateF)r$   r   ZOffline)r   r   r   r   r   r   P   s   zSteamUser.statec                 C   s,   |  d}i }|r|D ]}|j||j< q|S )z@Contains Rich Presence key-values

        :rtype: dict
        rich_presence)r$   valuekey)r   Zkvsdatakvr   r   r   r/   Y   s   
zSteamUser.rich_presence   c                 C   sP   |  d}|dkrt|d}nd}dddd}d	}||d
d ||| f S )zGet URL to avatar picture

        :param size: possible values are ``0``, ``1``, or ``2`` corresponding to small, medium, large
        :type size: :class:`int`
        :return: url to avatar
        :rtype: :class:`str`
        Zavatar_hashz                    asciiZ(fef49e7fa7e1997310d705b2a6158ff8dc1cdfeb Z_medium_full)r      r4   zRhttp://cdn.akamai.steamstatic.com/steamcommunity/public/images/avatars/%s/%s%s.jpgNr4   )r$   r   decode)r   sizeZ	hashbytesZahashsizesurlr   r   r   get_avatar_urlh   s   
zSteamUser.get_avatar_urlc                 C   sT   | j jdkr| j d| j|tjd dS | j ttj	| jtj|
dd dS )zqSend chat message to this steam user

        :param message: message to send
        :type message: str
        r4   zFriendMessages.SendMessage#1)steamidmessagechat_entry_typeutf8)r>   r@   r?   N)r   Z	chat_modeZsend_umr   r   ZChatMsgsendr
   r	   ZClientFriendMsgencode)r   r?   r   r   r   send_message   s   zSteamUser.send_messagec                 C      | j j|  dS )z
Block userN)r   friendsblockr   r   r   r   rG         zSteamUser.blockc                 C   rE   )zUnblock userN)r   rF   unblockr   r   r   r   rI      rH   zSteamUser.unblock)T)r4   )r   
__module____qualname____doc__r!   r   r   r   r   NONEr   r   r   r    r$   propertyr'   r-   r.   r   r/   r=   rD   rG   rI   r   r   r   r   r   	   s0    







r   N)r   binasciir   Zgevent.eventr   Zsteam.steamidr   Zsteam.enumsr   r   r   Zsteam.enums.emsgr	   Zsteam.core.msgr
   objectr   r   r   r   r   <module>   s    