
    YiI                         S r SSKrSSKrSSKJr  SSKJrJrJrJ	r	  SSK
Jr  SSKJr  SSKJr  SSKJr  SS	KJr  SS
KJr  \(       a  SSK
Jr  \S   r " S S\5      rg)zHThis module contains an object that represents a Telegram MessageEntity.    N)Sequence)TYPE_CHECKINGFinalOptionalUnion)	constants)TelegramObject)User)enum)TextEncoding)JSONDict)BotMessageEntityc                   *  ^  \ rS rSr% SrSr    S0SS.S\S\S\S	\\   S
\\	   S\\   S\\   S\\
   4U 4S jjjjr\ S1S\\
   S\S   S\S    4U 4S jjj5       r\S\S\S\4S j5       r\S\\\4   S\S\4S j5       r\S\\\\4   \\\\4   4   S\\\4   4S j5       r\" \R0                  5      r\\\      \S'    \R0                  R8                  r\\   \S'    \R0                  R:                  r\\   \S'    \R0                  R<                  r\\   \S'    \R0                  R>                  r\\   \S'    \R0                  R@                  r \\   \S '    \R0                  RB                  r!\\   \S!'    \R0                  RD                  r"\\   \S"'    \R0                  RF                  r#\\   \S#'    \R0                  RH                  r$\\   \S$'    \R0                  RJ                  r%\\   \S%'    \R0                  RL                  r&\\   \S&'    \R0                  RN                  r'\\   \S''    \R0                  RP                  r(\\   \S('    \R0                  RR                  r)\\   \S)'    \R0                  RT                  r*\\   \S*'    \R0                  RV                  r+\\   \S+'    \R0                  RX                  r,\\   \S,'    \R0                  RZ                  r-\\   \S-'    \R0                  R\                  r.\\   \S.'   S/r/U =r0$ )2r   '   a  
This object represents one special entity in a text message. For example, hashtags,
usernames, URLs, etc.

Objects of this class are comparable in terms of equality. Two objects of this class are
considered equal, if their :attr:`type`, :attr:`offset` and :attr:`length` are equal.

Args:
    type (:obj:`str`): Type of the entity. Can be :attr:`MENTION` (``@username``),
        :attr:`HASHTAG` (``#hashtag`` or ``#hashtag@chatusername``), :attr:`CASHTAG` (``$USD``
        or ``USD@chatusername``), :attr:`BOT_COMMAND` (``/start@jobs_bot``), :attr:`URL`
        (``https://telegram.org``), :attr:`EMAIL` (``do-not-reply@telegram.org``),
        :attr:`PHONE_NUMBER` (``+1-212-555-0123``),
        :attr:`BOLD` (**bold text**), :attr:`ITALIC` (*italic text*), :attr:`UNDERLINE`
        (underlined text), :attr:`STRIKETHROUGH`, :attr:`SPOILER` (spoiler message),
        :attr:`BLOCKQUOTE` (block quotation), :attr:`CODE` (monowidth string), :attr:`PRE`
        (monowidth block), :attr:`TEXT_LINK` (for clickable text URLs), :attr:`TEXT_MENTION`
        (for users without usernames), :attr:`CUSTOM_EMOJI` (for inline custom emoji stickers).

        .. versionadded:: 20.0
            Added inline custom emoji

        .. versionadded:: 20.8
            Added block quotation
    offset (:obj:`int`): Offset in UTF-16 code units to the start of the entity.
    length (:obj:`int`): Length of the entity in UTF-16 code units.
    url (:obj:`str`, optional): For :attr:`TEXT_LINK` only, url that will be opened after
        user taps on the text.
    user (:class:`telegram.User`, optional): For :attr:`TEXT_MENTION` only, the mentioned
         user.
    language (:obj:`str`, optional): For :attr:`PRE` only, the programming language of
        the entity text.
    custom_emoji_id (:obj:`str`, optional): For :attr:`CUSTOM_EMOJI` only, unique identifier
        of the custom emoji. Use :meth:`telegram.Bot.get_custom_emoji_stickers` to get full
        information about the sticker.

        .. versionadded:: 20.0
Attributes:
    type (:obj:`str`): Type of the entity.  Can be :attr:`MENTION` (``@username``),
        :attr:`HASHTAG` (``#hashtag`` or ``#hashtag@chatusername``), :attr:`CASHTAG` (``$USD``
        or ``USD@chatusername``), :attr:`BOT_COMMAND` (``/start@jobs_bot``), :attr:`URL`
        (``https://telegram.org``), :attr:`EMAIL` (``do-not-reply@telegram.org``),
        :attr:`PHONE_NUMBER` (``+1-212-555-0123``),
        :attr:`BOLD` (**bold text**), :attr:`ITALIC` (*italic text*), :attr:`UNDERLINE`
        (underlined text), :attr:`STRIKETHROUGH`, :attr:`SPOILER` (spoiler message),
        :attr:`BLOCKQUOTE` (block quotation), :attr:`CODE` (monowidth string), :attr:`PRE`
        (monowidth block), :attr:`TEXT_LINK` (for clickable text URLs), :attr:`TEXT_MENTION`
        (for users without usernames), :attr:`CUSTOM_EMOJI` (for inline custom emoji stickers).

        .. versionadded:: 20.0
            Added inline custom emoji

        .. versionadded:: 20.8
            Added block quotation
    offset (:obj:`int`): Offset in UTF-16 code units to the start of the entity.
    length (:obj:`int`): Length of the entity in UTF-16 code units.
    url (:obj:`str`): Optional. For :attr:`TEXT_LINK` only, url that will be opened after
        user taps on the text.
    user (:class:`telegram.User`): Optional. For :attr:`TEXT_MENTION` only, the mentioned
         user.
    language (:obj:`str`): Optional. For :attr:`PRE` only, the programming language of
        the entity text.
    custom_emoji_id (:obj:`str`): Optional. For :attr:`CUSTOM_EMOJI` only, unique identifier
        of the custom emoji. Use :meth:`telegram.Bot.get_custom_emoji_stickers` to get full
        information about the sticker.

        .. versionadded:: 20.0

)custom_emoji_idlanguagelengthoffsettypeurluserN
api_kwargsr   r   r   r   r   r   r   r   c                ,  > [         T	U ]  US9  [        R                  " [        R
                  X5      U l        X l        X0l        X@l	        XPl
        X`l        Xpl        U R                  U R                  U R                  4U l        U R                  5         g )Nr   )super__init__r   
get_memberr   MessageEntityTyper   r   r   r   r   r   r   	_id_attrs_freeze)
selfr   r   r   r   r   r   r   r   	__class__s
            B/app/.venv/lib/python3.13/site-packages/telegram/_messageentity.pyr   MessageEntity.__init__p   so     	J/)D)DdQ	!!"%$(	'/.=))T[[$++>    databotr   returnc                    > U R                  U5      nU(       d  g[        R                  " UR                  S5      U5      US'   [        TU ]	  XS9$ )z,See :meth:`telegram.TelegramObject.de_json`.Nr   )r'   r(   )_parse_datar
   de_jsongetr   )clsr'   r(   r#   s      r$   r,   MessageEntity.de_json   sG    
 t$||DHHV$4c:VwD22r&   textentitiesc                 .   [        [        R                  " S U 5       6 5      nSn0 n[        U5       HJ  u  pVUS:  a  X%S-
     OSnXU nU[	        UR                  [        R                  5      5      S-  -  nX4U'   ML     / n	U H{  n
XJR                     nXJR                  U
R                  -      U-
  n[        R                  " U
5      nUR                  5          Xl        Xl	        SSS5        U	R                  U5        M}     U	$ ! , (       d  f       N%= f)u  Utility functionality for converting the offset and length of entities from
Unicode (:obj:`str`) to UTF-16 (``utf-16-le`` encoded :obj:`bytes`).

Tip:
    Only the offsets and lengths calulated in UTF-16 is acceptable by the Telegram Bot API.
    If they are calculated using the Unicode string (:obj:`str` object), errors may occur
    when the text contains characters that are not in the Basic Multilingual Plane (BMP).
    For more information, see `Unicode <https://en.wikipedia.org/wiki/Unicode>`_ and
    `Plane (Unicode) <https://en.wikipedia.org/wiki/Plane_(Unicode)>`_.

.. versionadded:: 21.4

Examples:
    Below is a snippet of code that demonstrates how to use this function to convert
    entities from Unicode to UTF-16 space. The ``unicode_entities`` are calculated in
    Unicode and the `utf_16_entities` are calculated in UTF-16.

    .. code-block:: python

        text = "𠌕 bold 𝄢 italic underlined: 𝛙𝌢𑁍"
        unicode_entities = [
            MessageEntity(offset=2, length=4, type=MessageEntity.BOLD),
            MessageEntity(offset=9, length=6, type=MessageEntity.ITALIC),
            MessageEntity(offset=28, length=3, type=MessageEntity.UNDERLINE),
        ]
        utf_16_entities = MessageEntity.adjust_message_entities_to_utf_16(
            text, unicode_entities
        )
        await bot.send_message(
            chat_id=123,
            text=text,
            entities=utf_16_entities,
        )
        # utf_16_entities[0]: offset=3, length=4
        # utf_16_entities[1]: offset=11, length=6
        # utf_16_entities[2]: offset=30, length=6

Args:
    text (:obj:`str`): The text that the entities belong to
    entities (Sequence[:class:`telegram.MessageEntity`]): Sequence of entities
        with offset and length calculated in Unicode

Returns:
    Sequence[:class:`telegram.MessageEntity`]: Sequence of entities
    with offset and length calculated in UTF-16 encoding
c              3   j   #    U  H)  oR                   UR                   UR                  -   4v   M+     g 7fN)r   r   ).0xs     r$   	<genexpr>BMessageEntity.adjust_message_entities_to_utf_16.<locals>.<genexpr>   s'     ,_V^QRhh1888K-LV^s   13r         N)sorted	itertoolschain	enumeratelenencoder   	UTF_16_LEr   r   copy	_unfrozenappend)r0   r1   	positionsaccumulated_lengthposition_translationipositionlast_position
text_sliceoutentitytranslated_positionstranslated_length
new_entitys                 r$   !adjust_message_entities_to_utf_16/MessageEntity.adjust_message_entities_to_utf_16   s   b 9??,_V^,_`a	 02$Y/KA01AI!e,1MH5J#j&7&78N8N&O"PTU"UU-?*	 0 F#7#F $]]V]]%BCFZZ  6*J%%'$8!$5! ( JJz"  
	 ('s   D
D	byc                 P   [        U [        5      (       a  U O[        U R                  S5      5      S-  n/ nU HX  n[        R                  " U5      nUR                  5          U=R                  U-  sl        SSS5        UR                  U5        MZ     U$ ! , (       d  f       N%= f)u^  Utility functionality for shifting the offset of entities by a given amount.

Examples:
    Shifting by an integer amount:

    .. code-block:: python

        text = "Hello, world!"
        entities = [
            MessageEntity(offset=0, length=5, type=MessageEntity.BOLD),
            MessageEntity(offset=7, length=5, type=MessageEntity.ITALIC),
        ]
        shifted_entities = MessageEntity.shift_entities(1, entities)
        await bot.send_message(
            chat_id=123,
            text="!" + text,
            entities=shifted_entities,
        )

    Shifting using a string:

    .. code-block:: python

        text = "Hello, world!"
        prefix = "𝄢"
        entities = [
            MessageEntity(offset=0, length=5, type=MessageEntity.BOLD),
            MessageEntity(offset=7, length=5, type=MessageEntity.ITALIC),
        ]
        shifted_entities = MessageEntity.shift_entities(prefix, entities)
        await bot.send_message(
            chat_id=123,
            text=prefix + text,
            entities=shifted_entities,
        )

Tip:
    The :paramref:`entities` are *not* modified in place. The function returns a sequence
    of new objects.

.. versionadded:: 21.5

Args:
    by (:obj:`str` | :obj:`int`): Either the amount to shift the offset by or
        a string whose length will be used as the amount to shift the offset by. In this
        case, UTF-16 encoding will be used to calculate the length.
    entities (Sequence[:class:`telegram.MessageEntity`]): Sequence of entities

Returns:
    Sequence[:class:`telegram.MessageEntity`]: Sequence of entities with the offset shifted
z	utf-16-ler:   N)
isinstanceintr?   r@   rB   rC   r   rD   )rS   r1   effective_shiftrL   rM   rP   s         r$   shift_entitiesMessageEntity.shift_entities   s    j !+2s 3 3"RYY{=S9TXY9YF6*J%%'!!_4! (JJz"	 
 
 ('s   "B
B%	argsc                     Sn/ nU HX  nUS   US   pe[        U5      S:  a  US   SL a  U R                  XV5      nUR                  U R                  X&5      5        X%-  nMZ     X#4$ )u	  Utility functionality for concatenating two text along with their formatting entities.

Tip:
    This function is useful for prefixing an already formatted text with a new text and its
    formatting entities. In particular, it automatically correctly handles UTF-16 encoding.

Examples:
    This example shows a callback function that can be used to add a prefix and suffix to
    the message in a :class:`~telegram.ext.CallbackQueryHandler`:

    .. code-block:: python

        async def prefix_message(update: Update, context: ContextTypes.DEFAULT_TYPE):
            prefix = "𠌕 bold 𝄢 italic underlined: 𝛙𝌢𑁍 | "
            prefix_entities = [
                MessageEntity(offset=2, length=4, type=MessageEntity.BOLD),
                MessageEntity(offset=9, length=6, type=MessageEntity.ITALIC),
                MessageEntity(offset=28, length=3, type=MessageEntity.UNDERLINE),
            ]
            suffix = " | 𠌕 bold 𝄢 italic underlined: 𝛙𝌢𑁍"
            suffix_entities = [
                MessageEntity(offset=5, length=4, type=MessageEntity.BOLD),
                MessageEntity(offset=12, length=6, type=MessageEntity.ITALIC),
                MessageEntity(offset=31, length=3, type=MessageEntity.UNDERLINE),
            ]

            message = update.effective_message
            first = (prefix, prefix_entities, True)
            second = (message.text, message.entities)
            third = (suffix, suffix_entities, True)

            new_text, new_entities = MessageEntity.concatenate(first, second, third)
            await update.callback_query.edit_message_text(
                text=new_text,
                entities=new_entities,
            )

Hint:
    The entities are *not* modified in place. The function returns a
    new sequence of objects.

.. versionadded:: 21.5

Args:
    *args (tuple[:obj:`str`, Sequence[:class:`telegram.MessageEntity`]] |                 tuple[:obj:`str`, Sequence[:class:`telegram.MessageEntity`], :obj:`bool`]):
        Arbitrary number of tuples containing the text and its entities to concatenate.
        If the last element of the tuple is a :obj:`bool`, it is used to determine whether
        to adjust the entities to UTF-16 via
        :meth:`adjust_message_entities_to_utf_16`. UTF-16 adjustment is disabled by
        default.

Returns:
    tuple[:obj:`str`, Sequence[:class:`telegram.MessageEntity`]]: The concatenated text
    and its entities
 r   r9   r:   T)r?   rQ   extendrX   )r.   rZ   output_textoutput_entitiesargr0   r1   s          r$   concatenateMessageEntity.concatenate!  sy    z /1C VSV(3x!|A$@@P""3#5#5k#LMK  ++r&   	ALL_TYPES
BLOCKQUOTEBOLDBOT_COMMANDCASHTAGCODECUSTOM_EMOJIEMAILEXPANDABLE_BLOCKQUOTEHASHTAGITALICMENTIONPHONE_NUMBERPRESPOILERSTRIKETHROUGH	TEXT_LINKTEXT_MENTION	UNDERLINEURL)r    r   r   r   r   r   r   r   )NNNNr4   )1__name__
__module____qualname____firstlineno____doc__	__slots__strrV   r   r
   r   r   classmethodr,   staticmethod_SEMrQ   r   rX   tupleboolra   listr   r   rc   r   __annotations__rd   re   rf   rg   rh   ri   rj   rk   rl   rm   rn   ro   rp   rq   rr   rs   rt   ru   rv   __static_attributes____classcell__)r#   s   @r$   r   r   '   s   DL [I "#"&)- *.  	
 c] tn 3- "# X& 6 >B3H%3,4UO3	/	"3 3 F Ft F F FP <5c? <d <t < <| G,U39%uS$_'==>G, 
sDy	G, G,R #'y'B'B"CIuT#YCI&88CCJc
C !2277D%*7<'99EEKsEC#55==GU3Z=? 2277D%*7<(::GGL%*G "3399E5:9=(1(C(C(Y(Y5:Y $55==GU3Z=?"44;;FE#J;>#55==GU3Z=?(::GGL%*GD1155Cs5;#55==GU3Z= !* ; ; I IM5:IE%77AAIuSzAA(::GGL%*GD%77AAIuSzAA1155Cs5;r&   )r{   rB   r<   collections.abcr   typingr   r   r   r   telegramr   telegram._telegramobjectr	   telegram._userr
   telegram._utilsr   telegram._utils.stringsr   telegram._utils.typesr   r   r   r    r&   r$   <module>r      sJ   & O   $ 8 8  3    0 * w<N w<r&   