
    i              	           d Z dZddlZddlmZ ddlmZ ddlmZ ddl	m
Z
mZ erddlmZmZ 	 dd
edededz  defdZdeez  dedefdZddeez  dededefdZdddedz  fdZ	 ddededz  dedefdZdS )zThis module contains convenience helper functions.

.. versionchanged:: 20.0
   Previously, the contents of this module were available through the (no longer existing)
   module ``telegram.utils.helpers``.
)create_deep_linked_urleffective_message_typeescape_markdownmention_htmlmention_markdown    Nescape)TYPE_CHECKING)MarkdownVersion)MessageLimitMessageTypeMessageUpdate   textversionentity_typereturnc                     t          |          dk    rd}n3t          |          dk    r|dv rd}n|dv rd}nd}nt          d	          t          j        d
t          j        |           dd|           S )a  Helper function to escape telegram markup symbols.

    .. versionchanged:: 20.3
        Custom emoji entity escaping is now supported.

    Args:
        text (:obj:`str`): The text.
        version (:obj:`int` | :obj:`str`): Use to specify the version of telegrams Markdown.
            Either ``1`` or ``2``. Defaults to ``1``.
        entity_type (:obj:`str`, optional): For the entity types
            :tg-const:`telegram.MessageEntity.PRE`, :tg-const:`telegram.MessageEntity.CODE` and
            the link part of :tg-const:`telegram.MessageEntity.TEXT_LINK` and
            :tg-const:`telegram.MessageEntity.CUSTOM_EMOJI`, only certain characters need to be
            escaped in :tg-const:`telegram.constants.ParseMode.MARKDOWN_V2`. See the `official API
            documentation <https://core.telegram.org/bots/api#formatting-options>`_ for details.
            Only valid in combination with ``version=2``, will be ignored else.
    r   z_*`[   )precodez\`)	text_linkcustom_emojiz\)z\_*[]()~`>#+-=|{}.!z'Markdown version must be either 1 or 2!z([z])z\\\1)int
ValueErrorresubr	   )r   r   r   escape_charss       P/Users/shanyulin/my-agent/.venv/lib/python3.11/site-packages/telegram/helpers.pyr   r   -   s    ( 7||q	W		/)) LL999 LL1LLBCCC62ry..222GTBBB    user_idnamec                 .    d|  dt          |           dS )a  
    Helper function to create a user mention as HTML tag.

    Args:
        user_id (:obj:`int`): The user's id which you want to mention.
        name (:obj:`str`): The name the mention is showing.

    Returns:
        :obj:`str`: The inline mention for the user as HTML.
    z<a href="tg://user?id=z">z</a>r   )r#   r$   s     r!   r   r   P   s$     BGAAvd||AAAAr"   c                 Z    d|  }|dk    r	d| d| dS dt          ||           d| dS )a  
    Helper function to create a user mention in Markdown syntax.

    Args:
        user_id (:obj:`int`): The user's id which you want to mention.
        name (:obj:`str`): The name the mention is showing.
        version (:obj:`int` | :obj:`str`): Use to specify the version of Telegram's Markdown.
            Either ``1`` or ``2``. Defaults to ``1``.

    Returns:
        :obj:`str`: The inline mention for the user as Markdown.
    ztg://user?id=r   [z]())r   )r   )r#   r$   r   tg_links       r!   r   r   ^   sY     (g''G!||%4%%7%%%%CtW555CCCCCCr"   entityzMessage | Updatec                     ddl m}m} t          | |          r| }nAt          | |          r| j        sdS | j        }n t          dt          |            d          t          D ]}||         r|c S dS )a  
    Extracts the type of message as a string identifier from a :class:`telegram.Message` or a
    :class:`telegram.Update`.

    Args:
        entity (:class:`telegram.Update` | :class:`telegram.Message`): The ``update`` or
            ``message`` to extract from.

    Returns:
        :obj:`str` | :obj:`None`: One of :class:`telegram.constants.MessageType` if the entity
        contains a message that matches one of those types. :obj:`None` otherwise.

    r   r   Nz/The entity is neither Message nor Update (got: r(   )telegramr   r   
isinstanceeffective_message	TypeErrortyper   )r*   r   r   messagemessage_types        r!   r   r   q   s           
 &'"" [	FF	#	# [' 	4*Y$v,,YYYZZZ#    <  	 	  4r"   Fbot_usernamepayloadgroupc                 8   | t          |           dk    rt          d          d|  }|s|S t          |          t          j        k    rt          dt          j         d          t	          j        d|          st          d          |rd	nd
}| d| d| S )ab  
    Creates a deep-linked URL for this :paramref:`~create_deep_linked_url.bot_username` with the
    specified :paramref:`~create_deep_linked_url.payload`. See
    https://core.telegram.org/bots/features#deep-linking to learn more.

    The :paramref:`~create_deep_linked_url.payload` may consist of the following characters:
    ``A-Z, a-z, 0-9, _, -``

    Note:
        Works well in conjunction with
        ``CommandHandler("start", callback, filters=filters.Regex('payload'))``

    Examples:
        * ``create_deep_linked_url(bot.get_me().username, "some-params")``
        * :any:`Deep Linking <examples.deeplinking>`

    Args:
        bot_username (:obj:`str`): The username to link to.
        payload (:obj:`str`, optional): Parameters to encode in the created URL.
        group (:obj:`bool`, optional): If :obj:`True` the user is prompted to select a group to
            add the bot to. If :obj:`False`, opens a one-on-one conversation with the bot.
            Defaults to :obj:`False`.

    Returns:
        :obj:`str`: An URL to start the bot with specific parameters.

    Raises:
        :exc:`ValueError`: If the length of the :paramref:`payload` exceeds         :tg-const:`telegram.constants.MessageLimit.DEEP_LINK_LENGTH` characters,
            contains invalid characters, or if the :paramref:`bot_username` is less than 4
            characters.
    N   z&You must provide a valid bot_username.zhttps://t.me/z)The deep-linking payload must not exceed z characters.z^[A-Za-z0-9_-]+$zVOnly the following characters are allowed for deep-linked URLs: A-Z, a-z, 0-9, _ and -
startgroupstart?=)lenr   r   DEEP_LINK_LENGTHr   match)r3   r4   r5   base_urlkeys        r!   r   r      s    F s<00A55ABBB-|--H 
7||l333c8Uccc
 
 	
 8'11 
+
 
 	

  
,,,WC((((w(((r"   )r   N)r   )NF)__doc____all__r   htmlr	   typingr
   telegram._utils.typesr   telegram.constantsr   r   r,   r   r   strr   r   r   r   r   boolr    r"   r!   <module>rJ      s  &  
			                   1 1 1 1 1 1 8 8 8 8 8 8 8 8 )(((((((( HL C  C
 C' C:=* C C  C  C  CFB#) B3 B3 B B B BD DcCi Ds D_ DUX D D D D&!#5 !#* ! ! ! !J BG7) 7)7) #d
7):>7)7) 7) 7) 7) 7) 7)r"   