a
    /3e                     @   s   d Z dZz4ddlZddlmZ ddlmZ ddlmZm	Z	 W n e
yR   dZY n0 ddlZddlmZ dd	lmZ G d
d dZdS )z
This file is used by AsyncTeleBot.run_webhooks() function.

Fastapi and starlette(0.20.2+) libraries are required to run this script.
T    N)JSONResponse)Request)ServerConfigF)Update)Optionalc                   @   s^   e Zd Zdeee ee ee ee ddddZdd Zd	d
 Z	e
edddZdd ZdS )AsyncWebhookListener	127.0.0.1  N)secret_tokenhostportssl_contexturl_pathreturnc                 C   sB   |    t | _|| _|| _|| _|| _|| _|| _	| 
  dS )a(  
        Aynchronous implementation of webhook listener
        for asynchronous version of telebot.
        Not supposed to be used manually by user.
        Use AsyncTeleBot.run_webhooks() instead.

        :param bot: AsyncTeleBot instance.
        :type bot: telebot.async_telebot.AsyncTeleBot

        :param secret_token: Telegram secret token
        :type secret_token: str

        :param host: Webhook host
        :type host: str

        :param port: Webhook port
        :type port: int

        :param ssl_context: SSL context
        :type ssl_context: tuple

        :param url_path: Webhook url path
        :type url_path: str

        :raises ImportError: If FastAPI or uvicorn is not installed.
        :raises ImportError: If Starlette version is too old.

        :return: None
        N)_check_dependenciesfastapiZFastAPIapp_secret_token_bot_port_host_ssl_context	_url_path_prepare_endpoint_urls)selfZbotr   r   r   r   r    r   K/home/pi/bot/my_env/lib/python3.9/site-packages/telebot/ext/aio/webhooks.py__init__   s    $
zAsyncWebhookListener.__init__c                 C   s*   t stddd l}|jdk r&tdd S )Nz?Fastapi or uvicorn is not installed. Please install it via pip.r   z0.20.2zLStarlette version is too old. Please upgrade it: `pip3 install starlette -U`)fastapi_installedImportError	starlette__version__)r   r!   r   r   r   r   K   s    
z(AsyncWebhookListener._check_dependenciesc                 C   s   | j j| j| jdgd d S )NPOST)Zendpointpathmethods)r   Zadd_api_routeprocess_updater   )r   r   r   r   r   U   s    z+AsyncWebhookListener._prepare_endpoint_urls)requestupdatec                    sl   |j d| jkr"tdddidS |j ddkr\|}t| jt	|g tdd	d
S tdddidS )z<
        Processes updates.

        :meta private:
        zX-Telegram-Bot-Api-Secret-Tokeni  error	Forbidden)status_codecontentzcontent-typezapplication/json    )r+   )
headersgetr   r   asyncioZcreate_taskr   Zprocess_new_updatesr   Zde_json)r   r'   r(   Zjson_stringr   r   r   r&   Y   s    z#AsyncWebhookListener.process_updatec                    sN   t | j| j| j| jd | jd d}t|}| I dH  | j I dH  dS )z
        Run app with the given parameters to init.
        Not supposed to be used manually by user.

        :return: None
        r      )r   r   r   Zssl_certfileZssl_keyfileN)	r   r   r   r   r   r   Zserver   Zclose_session)r   configserverr   r   r   run_appk   s    zAsyncWebhookListener.run_app)r	   r
   NN)__name__
__module____qualname__strr   inttupler   r   r   r   dictr&   r5   r   r   r   r   r      s        0
r   )__doc__r   r   Zfastapi.responsesr   Zfastapi.requestsr   Zuvicornr   r   r    r1   Ztelebot.typesr   typingr   r   r   r   r   r   <module>   s   
