o
    Xzj«$  ã                   @   sX   d dl Z d dlZd dlZddlmZmZ ddlmZ ejr#ddl	m
Z
 G dd„ dƒZdS )	é    Né   )ÚhelpersÚutils)Útypesé   )ÚTelegramClientc                   @   sP   e Zd Zeddd„ƒZejdddefdd„ƒZddd„Zdd	d
„Zddd„Z	dS )ÚMessageParseMethodsÚselfr   c                 C   s   | j S )a½  
        This property is the default parse mode used when sending messages.
        Defaults to `telethon.extensions.markdown`. It will always
        be either `None` or an object with ``parse`` and ``unparse``
        methods.

        When setting a different value it should be one of:

        * Object with ``parse`` and ``unparse`` methods.
        * A ``callable`` to act as the parse method.
        * A `str` indicating the ``parse_mode``. For Markdown ``'md'``
          or ``'markdown'`` may be used. For HTML, ``'htm'`` or ``'html'``
          may be used.

        The ``parse`` method should be a function accepting a single
        parameter, the text to parse, and returning a tuple consisting
        of ``(parsed message str, [MessageEntity instances])``.

        The ``unparse`` method should be the inverse of ``parse`` such
        that ``assert text == unparse(*parse(text))``.

        See :tl:`MessageEntity` for allowed message entities.

        Example
            .. code-block:: python

                # Disabling default formatting
                client.parse_mode = None

                # Enabling HTML as the default format
                client.parse_mode = 'html'
        )Ú_parse_mode)r	   © r   úW/var/www/kodo/tsheker/venv/lib/python3.10/site-packages/telethon/client/messageparse.pyÚ
parse_mode   s   "zMessageParseMethods.parse_modeÚmodec                 C   s   t  |¡| _d S ©N)r   Úsanitize_parse_moder
   )r	   r   r   r   r   r   4   s   c              	   Ã   sL   �zt  || j|| j|  |¡I dH ¡||< W dS  ttfy%   Y dS w )z{
        Helper method to replace ``entities[i]`` to mention ``user``,
        or do nothing if it can't be found.
        NTF)r   ÚInputMessageEntityMentionNameÚoffsetÚlengthÚget_input_entityÚ
ValueErrorÚ	TypeError)r	   ÚentitiesÚiÚuserr   r   r   Ú_replace_with_mention<   s   €þÿz)MessageParseMethods._replace_with_mentionc           
      Ã   s  �|dkr	| j }nt |¡}|s|g fS |}| |¡\}}|r'|s'|s'tdƒ‚ttt|ƒƒƒD ]T}|| }|js<||= q/t	|t
jƒrjt d|j¡}|ri| d¡rWt| d¡ƒn|j}|  |||¡I dH }	|	si||= q/t	|t
jt
jfƒrƒ|  |||j¡I dH }	|	sƒ||= q/||fS )zY
        Returns a (parsed message, entities) tuple depending on ``parse_mode``.
        r   zFailed to parse messagez^@|\+|tg://user\?id=(\d+)r   N)r
   r   r   Úparser   ÚreversedÚrangeÚlenr   Ú
isinstancer   ÚMessageEntityTextUrlÚreÚmatchÚurlÚgroupÚintr   ÚMessageEntityMentionNamer   Úuser_id)
r	   Úmessager   Úoriginal_messageÚmsg_entitiesr   ÚeÚmr   Ú
is_mentionr   r   r   Ú_parse_message_textJ   s<   €
€ÿ€z'MessageParseMethods._parse_message_textc           
         sê  t |tjƒr|jg}i }nt |tjtjfƒr'|j}dd„ t |j	|j
¡D ƒ}ndS i ‰i ‰ |D ]Ö}t |tjƒr>|jˆ|j< q/t |tjtjfƒrf|j | ||¡ t|dƒsYt |¡ra|jˆ |jj< q/|j  S t |tjƒr˜t |j¡tjjkr˜|j | ||¡ t|dƒr‹|jˆ |jj< q/|j|jjkr—|j  S q/t |tjƒrÀt |j¡t |jj¡krÀ|j|jjkr¿|j | ||¡ |j  S q/t |tjƒrÖ|j | ||¡ |jˆ |jj< q/t |tjƒ�r|j j!j|j"k�rtj#|jt $|j¡tj%|j!|j&d�d�}| | ||¡ |  S q/|du �rˆ S t |t't(fƒ�r|nt)|ddƒ}|du �r.| j*t+  ,d||¡ dS t |¡�sKˆ  -ˆ -|¡¡}	|	�sI| j*t+  ,d||¡ |	S z‡ ‡fd	d
„|D ƒW S  t.�yj   | j*t+  ,d||¡ Y nw ‡ ‡fdd
„|D ƒS )a&  
        Extracts the response message known a request and Update result.
        The request may also be the ID of the message to match.

        If ``request is None`` this method returns ``{id: message}``.

        If ``request.random_id`` is a list, this method returns a list too.
        c                 S   s   i | ]}t  |¡|“qS r   )r   Úget_peer_id)Ú.0Úxr   r   r   Ú
<dictcomp>   s    ÿz=MessageParseMethods._get_response_message.<locals>.<dictcomp>NÚ	random_id)ÚpollÚresults)ÚidÚpeer_idÚmediaz;No random_id in %s to map to, returning None message for %sz)Request %s had missing message mapping %sc                    s   g | ]}ˆ ˆ|  ‘qS r   r   ©r0   Úrnd©Úid_to_messageÚrandom_to_idr   r   Ú
<listcomp>Õ   s    z=MessageParseMethods._get_response_message.<locals>.<listcomp>z*Request %s had missing message mappings %sc                    s&   g | ]}|ˆv rˆ   ˆ| ¡nd ‘qS r   )Úgetr9   r;   r   r   r>   â   s    þÿý)/r   r   ÚUpdateShortÚupdateÚUpdatesÚUpdatesCombinedÚupdatesÚ	itertoolsÚchainÚusersÚchatsÚUpdateMessageIDr6   r3   ÚUpdateNewChannelMessageÚUpdateNewMessager(   Ú_finish_initÚhasattrr   Úis_list_likeÚUpdateEditMessager   Ú_entity_typeÚpeerÚ_EntityTypeÚCHANNELÚUpdateEditChannelMessager/   r7   ÚUpdateNewScheduledMessageÚUpdateMessagePollr8   r4   Úpoll_idÚMessageÚget_peerÚMessageMediaPollr5   r%   ÚlistÚgetattrÚ_logÚ__name__Úwarningr?   ÚKeyError)
r	   ÚrequestÚresultÚ
input_chatrD   r   rA   r,   r3   Úmsgr   r;   r   Ú_get_response_messageq   sœ   	þÿ	


ÿ
ÿ
þ
þý€
 

ÿ
ÿ
	ÿ÷üz)MessageParseMethods._get_response_messageN)r	   r   )
r^   Ú
__module__Ú__qualname__Úpropertyr   ÚsetterÚstrr   r.   re   r   r   r   r   r      s    #

'r   )rE   r!   ÚtypingÚ r   r   Útlr   ÚTYPE_CHECKINGÚtelegramclientr   r   r   r   r   r   Ú<module>   s    