
    ՟fT              	          d Z dZddl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 erddlmZmZ 	 dd	ed
e
dee   defdZdeeef   dedefdZddeeef   ded
e
defdZded   dee   fdZ	 ddedee   dedefdZy)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OptionalUnion)MarkdownVersion)MessageTypeMessageUpdatetextversionentity_typereturnc                     t        |      dk(  rd}n*t        |      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.
       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       K/var/www/cvtools/html/venv/lib/python3.12/site-packages/telegram/helpers.pyr   r   -   ss    ( 7|q	W	/) L99 L1LBCC66Bryy./r2GT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     $G9Bvd|nDAAr#   c                 P    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   ^   sI     gY'G!|4&7)1%%tW56b	CCr#   entityc                     ddl m}m} t        | |      r| }n>t        | |      r| j                  sy| j                  }nt        dt        |        d      t        D ]  }||   s	|c S  y)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   ss     )&'"	FF	#''**I$v,WXYZZ#  <   r#   bot_usernamepayloadgroupc                     | t        |       dk  rt        d      d|  }|s|S t        |      dkD  rt        d      t        j                  d|      st        d      |rdnd	}| d
| d| S )a   
    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 64 characters,
            contains invalid characters, or if the :paramref:`bot_username` is less than 4
            characters.
       z&You must provide a valid bot_username.zhttps://t.me/@   z7The deep-linking payload must not exceed 64 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   match)r4   r5   r6   base_urlkeys        r"   r   r      s    D s<0A5ABB|n-H
7|bRSS88'1+
 	

  ,WCZqQwi((r#   )r   N)r   )NF)__doc____all__r   htmlr	   typingr
   r   r   telegram._utils.typesr   telegram.constantsr   r-   r   r   strr   r   r   r   r   boolr    r#   r"   <module>rK      s  & 
  1 1 1 *( KO C
 C' C:B3- C CFB%S/ B B BDeCHo DS D? D[^ D&5)<#= (3- D EJ4)4) (4)=A4)4)r#   