§
    ¿jÏ  ã                  ó’   — d Z ddlmZ ddlmZmZmZmZmZ ddl	m
Z
mZmZ 	 ddlmZmZ n# e$ r dZdZY nw xY w G d„ d¦  «        ZdS )	z¥
FreeExile Guild Roster Service: Guild Membership & Presence Integration.
Joins guild membership with real-time player presence for R3 Safe Teleportation targeting.
é    )Úannotations)ÚAnyÚDictÚListÚOptionalÚUnion)ÚGuildMemberPresenceDTOÚPresenceStatusÚRESTRICTED_PRIVATE_ZONES)ÚGuildMemberÚ	GuildRoleNc                  ó<   — e Zd ZdZddd„Zdd„Zdd„Zdd„Zdd„ZdS )ÚGuildRosterServicezPService providing lightweight guild membership roster joined with live presence.NÚsocial_serviceúOptional[Any]ÚreturnÚNonec                ó"   — i | _         || _        d S ©N)ÚguildsÚ_social_service)Úselfr   s     ú;C:\Projects\FreeExile\server\social\guild_roster_service.pyÚ__init__zGuildRosterService.__init__   s   € Ø,.ˆŒØ-ˆÔÐÐó    Úguild_idÚstrÚmemberú"Union[GuildMemberPresenceDTO, Any]c                ób   — | j                              |g ¦  «                             |¦  «         dS )z-Registers a member in the given guild roster.N)r   Ú
setdefaultÚappend©r   r   r   s      r   Úregister_memberz"GuildRosterService.register_member   s.   € àŒ×Ò˜x¨Ñ,Ô,×3Ò3°FÑ;Ô;Ð;Ð;Ð;r   r   c                ó2   — |                       ||¦  «         dS )zRAlias for register_member supporting server/trade/guild_stash_service.GuildMember.N)r$   r#   s      r   Úregister_guild_memberz(GuildRosterService.register_guild_member    s   € à×Ò˜X vÑ.Ô.Ð.Ð.Ð.r   úList[GuildMemberPresenceDTO]c                ó¤   — | j                              |¦  «        }|sg S g }|D ],}|                      |¦  «        }|                     |¦  «         Œ-|S )z§
        Retrieves guild members joined with real-time presence.
        Calculates teleport targetability: True if online and not in restricted private zone.
        )r   ÚgetÚ_resolve_member_presencer"   )r   r   ÚmembersÚrosterÚmÚdtos         r   Úget_guild_roster_with_presencez1GuildRosterService.get_guild_roster_with_presence$   se   € ð
 ”+—/’/ (Ñ+Ô+ˆØð 	ØˆIà/1ˆØð 	ð 	ˆAØ×/Ò/°Ñ2Ô2ˆCØ�MŠM˜#ÑÔÐÐØˆr   r-   r	   c           	     óÆ  — t          |t          ¦  «        rî| j        �åt          | j        d¦  «        rÐ| j        j                             |j        ¦  «        }|rª|j        t          j	        k    }|oWt          |j        ¦  «        oC|j        t          vo5|j                             d¦  «         o|j                             d¦  «         }t          |j        |j        p|j        |j        |j        |j        |j        |¬¦  «        S |S t#          |dd¦  «        }t#          |dt#          |d	|¦  «        ¦  «        }t#          |d
d¦  «        }d}t          |d¦  «        r&t%          |j        ¦  «        }	|	dk    rd}n |	dk    rd}nt          |t$          ¦  «        r|}d}
t          j	        }d}| j        �Kt          | j        d¦  «        r6| j        j                             |¦  «        }|r|j        }
|j        }|j        }|t          j	        k    }|oCt          |¦  «        o4|t          vo+|                     d¦  «         o|                     d¦  «         }t          ||||
|||¬¦  «        S )zIResolves presence metadata and teleport targetability for a guild member.NÚ_presence_cacheÚsecret_Úzone_secret)Ú	player_idÚcharacter_nameÚroleÚlevelÚpresence_statusÚzone_idÚis_teleport_targetabler4   Ú Úplayer_nameÚnamer6   u   Huynh Ä�á»‡ÚvalueÚGUILD_MASTERu   Ä�áº§u LÄ©nhÚOFFICERu   TrÆ°á»Ÿng LÃ£oé   )Ú
isinstancer	   r   Úhasattrr1   r)   r4   r8   r
   ÚOFFLINEÚboolr9   r   Ú
startswithr5   r6   r7   Úgetattrr   r>   )r   r-   ÚcachedÚ	is_onlineÚ
targetabler4   r<   Úraw_roleÚrole_strÚvalr7   Ústatusr9   s                r   r*   z+GuildRosterService._resolve_member_presence3   s²  € å�aÕ/Ñ0Ô0ð 	àÔ#Ð/µG¸DÔ<PÐRcÑ4dÔ4dÐ/ØÔ-Ô=×AÒAÀ!Ä+ÑNÔN�Øð Ø &Ô 6½.Ô:PÒ P�Ià!ð IÝ  ¤Ñ0Ô0ðIà"œNÕ2JÐJðIð !'¤× 9Ò 9¸)Ñ DÔ DÐDðIð !'¤× 9Ò 9¸-Ñ HÔ HÐHð õ 2Ø"#¤+Ø'-Ô'<Ð'PÀÔ@PØœVØ$œlØ(.Ô(>Ø &¤Ø/9ðñ ô ð ð ˆHõ ˜A˜{¨BÑ/Ô/ˆ	Ý˜a µ¸¸6À9Ñ0MÔ0MÑNÔNˆÝ˜1˜f mÑ4Ô4ˆà ˆÝ�8˜WÑ%Ô%ð 	 Ý�h”nÑ%Ô%ˆCØ�nÒ$Ð$Ø)��Ø˜	Ò!Ð!Ø+�øÝ˜¥#Ñ&Ô&ð 	 ØˆHàˆÝÔ'ˆØˆàÔÐ+µ¸Ô8LÐN_Ñ0`Ô0`Ð+ØÔ)Ô9×=Ò=¸iÑHÔHˆFØð )Øœ�ØÔ/�Ø œ.�à�nÔ4Ò4ˆ	àð 6Ý�W‘”ð6àÕ7Ð7ð6ð ×&Ò& yÑ1Ô1Ð1ð6ð ×&Ò& }Ñ5Ô5Ð5ð 	õ &ØØ&ØØØ"ØØ#-ð
ñ 
ô 
ð 	
r   r   )r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   r'   )r-   r   r   r	   )	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r$   r&   r/   r*   © r   r   r   r      s‰   € € € € € ØZÐZð.ð .ð .ð .ð .ð<ð <ð <ð <ð/ð /ð /ð /ðð ð ð ðE
ð E
ð E
ð E
ð E
ð E
r   r   )rR   Ú
__future__r   Útypingr   r   r   r   r   Úserver.social.social_typesr	   r
   r   Ú server.trade.guild_stash_servicer   r   ÚImportErrorr   rS   r   r   ú<module>rY      s  ððð ð
 #Ð "Ð "Ð "Ð "Ð "Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3ðð ð ð ð ð ð ð ð ð ðØGÐGÐGÐGÐGÐGÐGÐGÐGøØð ð ð Ø€KØ€I€I€Iðøøøð
c
ð c
ð c
ð c
ð c
ñ c
ô c
ð c
ð c
ð c
s   ¢+ «	7¶7