o
    HEDi-                     @   s   d dl Z d dlZd dlmZ d dlmZ d dlZddlmZ ddl	m
Z
mZ ddlmZmZmZ e dZed	d
G dd dZedZdedefddZdedededefddZd ddZdd Zd ddZG dd deZdS )!    N)	dataclass)
HTTPStatus   )types)
exceptionsjson)Helper
HelperModeItemaiogramT)frozenc                   @   sd   e Zd ZU dZeed< eed< dededefddZded	edefd
dZededd fddZ	dS )TelegramAPIServerz'
    Base config for API Endpoints
    basefiletokenmethodreturnc                 C      | j j||dS )z
        Generate URL for API methods

        :param token: Bot token
        :param method: API method name (case insensitive)
        :return: URL
        r   r   )r   format)selfr   r    r   ^/var/www/www-root/data/www/ovozai.pdev.uz/venv/lib/python3.10/site-packages/aiogram/bot/api.pyapi_url      zTelegramAPIServer.api_urlpathc                 C   r   )z
        Generate URL for downloading files

        :param token: Bot token
        :param path: file path
        :return: URL
        )r   r   )r   r   )r   r   r   r   r   r   file_url#   r   zTelegramAPIServer.file_urlc                 C   s"   | d}| | d| ddS )N/z/bot{token}/{method}z/file/bot{token}/{path})r   r   )rstrip)clsr   r   r   r   	from_base-   s
   
zTelegramAPIServer.from_baseN)
__name__
__module____qualname____doc__str__annotations__r   r   classmethodr    r   r   r   r   r      s   
 

r   zhttps://api.telegram.orgr   r   c                 C   sr   t | tsdt|  d}t|tdd | D r"d}t|| d\}}}|r2| r2|s7tddS )	z<
    Validate BOT token

    :param token:
    :return:
    z3Token is invalid! It must be 'str' type instead of z type.c                 s   s    | ]}|  V  qd S )N)isspace).0xr   r   r   	<genexpr>E   s    zcheck_token.<locals>.<genexpr>z+Token is invalid! It can't contains spaces.:zToken is invalid!T)
isinstancer%   typer   ValidationErrorany	partitionisdigit)r   messageleftseprightr   r   r   check_token9   s   



r7   method_namecontent_typestatus_codebodyc                 C   s~  t d| || |dkrtd| d| dzt|}W n ty*   i }Y nw |dp1|}tj	di |di p=i }t
j|  krLt
jkrSn n|dS |jr\t|j|jret|j|t
jkrqtj| nC|t
jkr}tj| n7|t
jkrtj| n+|t
jt
jfv rtj| n|t
jkrtd	|t
jkrd
|v rt t|t| d| d)a@  
    Checks whether `result` is a valid API response.
    A result is considered invalid if:
    - The server returned an HTTP response code other than 200
    - The content of the result is invalid JSON.
    - The method call was unsuccessful (The JSON 'ok' field equals False)

    :param method_name: The name of the method called
    :param status_code: status code
    :param content_type: content type of result
    :param body: result body
    :return: The result parsed to a JSON dictionary
    :raises ApiException: if one of the above listed cases is applicable
    zResponse for %s: [%d] "%r"zapplication/jsonz#Invalid response with content type z: ""description
parametersresultzgFile too large for uploading. Check telegram api limits https://core.telegram.org/bots/api#senddocumentrestartz []Nr   )logdebugr   NetworkErrorr   loads
ValueErrorgetr   ResponseParametersr   OKIM_USEDretry_after
RetryAftermigrate_to_chat_idMigrateToChatBAD_REQUEST
BadRequestdetect	NOT_FOUNDNotFoundCONFLICTConflictErrorUNAUTHORIZED	FORBIDDENUnauthorizedREQUEST_ENTITY_TOO_LARGEINTERNAL_SERVER_ERRORRestartingTelegramTelegramAPIError)r8   r9   r:   r;   result_jsonr=   r>   r   r   r   check_resultP   s>   







r^   c              
      s   t d||| |j||d}t||}z7| j|fd|i|4 I d H }	t||	j|	j|	 I d H W  d   I d H  W S 1 I d H sEw   Y  W d S  t	j
yf }
 ztd|
jj d|
 d }
~
ww )Nz1Make request: "%s" with data: "%r" and files "%r"r   dataz aiohttp client throws an error: z: )rB   rC   r   compose_datapostr^   r9   statustextaiohttpClientErrorr   rD   	__class__r!   )sessionserverr   r   r_   fileskwargsurlreqresponseer   r   r   make_request   s   
 4ro   c                 C   sN   t | dd}|rt|tr!|d dkr#|d dkr%tj|S dS dS dS dS )zA
    Get file name from object

    :param obj:
    :return:
    nameNr   <>)getattrr-   r%   osr   basename)objrp   r   r   r   guess_filename   s   &rx   c                 C   s   t jjdd}| r|  D ]\}}||t| q|rX| D ]7\}}t|tr8t|dkr4|\}}nt	dt|t
jrF|j|j}}n	t|pK||}}|j|||d q |S )zQ
    Prepare request data

    :param params:
    :param files:
    :return:
    F)quote_fieldsr   z5Tuple must have exactly 2 elements: filename, fileobj)filename)rd   formdataFormDataitems	add_fieldr%   r-   tuplelenrF   r   	InputFilerz   r   rx   )paramsri   r_   keyvaluefrz   fileobjr   r   r   r`      s   

r`   c                   @   s  e Zd ZdZejZe Ze Z	e Z
e Ze Ze Ze Ze Ze Ze Ze Ze Ze Ze Ze Ze Ze Ze Ze Ze Ze Ze Ze Ze Ze Z e Z!e Z"e Z#e Z$e Z%e Z&e Z'e Z(e Z)e Z*e Z+e Z,e Z-e Z.e Z/e Z0e Z1e Z2e Z3e Z4e Z5e Z6e Z7e Z8e Z9e Z:e Z;e Z<e Z=e Z>e Z?e Z@e ZAe ZBe ZCe ZDe ZEe ZFe ZGe ZHe ZIe ZJe ZKe ZLe ZMe ZNe ZOe ZPe ZQe ZRe ZSe ZTe ZUe ZVe ZWe ZXe ZYe ZZe Z[e Z\e Z]e Z^e Z_e Z`e Zae Zbe Zce Zde Zee Zfe Zge Zhe Zie Zje Zke Zle Zme ZndS )MethodszV
    Helper for Telegram API Methods listed on https://core.telegram.org/bots/api
    N)or!   r"   r#   r$   r	   lowerCamelCasemoder
   GET_UPDATESSET_WEBHOOKDELETE_WEBHOOKGET_WEBHOOK_INFOGET_MELOG_OUTCLOSESEND_MESSAGEFORWARD_MESSAGECOPY_MESSAGE
SEND_PHOTO
SEND_AUDIOSEND_DOCUMENT
SEND_VIDEOSEND_ANIMATION
SEND_VOICESEND_VIDEO_NOTESEND_MEDIA_GROUPSEND_LOCATIONEDIT_MESSAGE_LIVE_LOCATIONSTOP_MESSAGE_LIVE_LOCATION
SEND_VENUESEND_CONTACT	SEND_POLL	SEND_DICESEND_CHAT_ACTIONGET_USER_PROFILE_PHOTOSGET_FILEKICK_CHAT_MEMBERBAN_CHAT_MEMBERUNBAN_CHAT_MEMBERRESTRICT_CHAT_MEMBERPROMOTE_CHAT_MEMBER#SET_CHAT_ADMINISTRATOR_CUSTOM_TITLEBAN_CHAT_SENDER_CHATUNBAN_CHAT_SENDER_CHATSET_CHAT_PERMISSIONSEXPORT_CHAT_INVITE_LINKCREATE_CHAT_INVITE_LINKEDIT_CHAT_INVITE_LINKREVOKE_CHAT_INVITE_LINKAPPROVE_CHAT_JOIN_REQUESTDECLINE_CHAT_JOIN_REQUESTSET_CHAT_PHOTODELETE_CHAT_PHOTOSET_CHAT_TITLESET_CHAT_DESCRIPTIONPIN_CHAT_MESSAGEUNPIN_CHAT_MESSAGEUNPIN_ALL_CHAT_MESSAGES
LEAVE_CHATGET_CHATGET_CHAT_ADMINISTRATORSGET_CHAT_MEMBER_COUNTGET_CHAT_MEMBERS_COUNTGET_CHAT_MEMBERSET_CHAT_STICKER_SETDELETE_CHAT_STICKER_SETGET_FORUM_TOPIC_ICON_STICKERSCREATE_FORUM_TOPICEDIT_FORUM_TOPICCLOSE_FORUM_TOPICREOPEN_FORUM_TOPICDELETE_FORUM_TOPICUNPIN_ALL_FORUM_TOPIC_MESSAGESEDIT_GENERAL_FORUM_TOPICCLOSE_GENERAL_FORUM_TOPICREOPEN_GENERAL_FORUM_TOPICHIDE_GENERAL_FORUM_TOPICUNHIDE_GENERAL_FORUM_TOPICANSWER_CALLBACK_QUERYSET_MY_COMMANDSDELETE_MY_COMMANDSGET_MY_COMMANDSEDIT_MESSAGE_TEXTEDIT_MESSAGE_CAPTIONEDIT_MESSAGE_MEDIAEDIT_MESSAGE_REPLY_MARKUP	STOP_POLLDELETE_MESSAGESEND_STICKERGET_STICKER_SETUPLOAD_STICKER_FILEGET_CUSTOM_EMOJI_STICKERSCREATE_NEW_STICKER_SETADD_STICKER_TO_SETSET_STICKER_POSITION_IN_SETDELETE_STICKER_FROM_SETSET_STICKER_SET_THUMBANSWER_INLINE_QUERYANSWER_WEB_APP_QUERYSET_CHAT_MENU_BUTTONGET_CHAT_MENU_BUTTON#SET_MY_DEFAULT_ADMINISTRATOR_RIGHTS#GET_MY_DEFAULT_ADMINISTRATOR_RIGHTSSEND_INVOICECREATE_INVOICE_LINKANSWER_SHIPPING_QUERYANSWER_PRE_CHECKOUT_QUERYSET_PASSPORT_DATA_ERRORS	SEND_GAMESET_GAME_SCOREGET_GAME_HIGH_SCORESr   r   r   r   r      s    
r   )NN)loggingru   dataclassesr   httpr   rd    r   utilsr   r   utils.helperr   r	   r
   	getLoggerrB   r   r    TELEGRAM_PRODUCTIONr%   boolr7   intr^   ro   rx   r`   r   r   r   r   r   <module>   s$    

%
4
