diff --git a/davtelepot/__init__.py b/davtelepot/__init__.py index 81b18ba..503b400 100644 --- a/davtelepot/__init__.py +++ b/davtelepot/__init__.py @@ -14,7 +14,7 @@ __author__ = "Davide Testa" __email__ = "davide@davte.it" __credits__ = ["Marco Origlia", "Nick Lee @Nickoala"] __license__ = "GNU General Public License v3.0" -__version__ = "2.3.12" +__version__ = "2.3.13" __maintainer__ = "Davide Testa" __contact__ = "t.me/davte" diff --git a/davtelepot/bot.py b/davtelepot/bot.py index 5205101..d836f49 100644 --- a/davtelepot/bot.py +++ b/davtelepot/bot.py @@ -50,8 +50,8 @@ from .api import TelegramBot, TelegramError from .database import ObjectWithDatabase from .languages import MultiLanguageObject from .utilities import ( - escape_html_chars, extract, get_secure_key, make_inline_query_answer, - make_lines_of_buttons, remove_html_tags + async_get, escape_html_chars, extract, get_secure_key, + make_inline_query_answer, make_lines_of_buttons, remove_html_tags ) # Do not log aiohttp `INFO` and `DEBUG` levels @@ -1693,6 +1693,36 @@ class Bot(TelegramBot, ObjectWithDatabase, MultiLanguageObject): ) return sent_update + async def download_file(self, file_id, + file_name=None, mime_type=None, path=None): + """Given a telegram `file_id`, download the related file. + + Telegram may not preserve the original file name and MIME type: the + file's MIME type and name (if available) should be stored when the + File object is received. + """ + file = await self.getFile(file_id=file_id) + if file is None or isinstance(file, Exception): + logging.error(f"{file}") + return + file_bytes = await async_get( + url=( + f"https://api.telegram.org/file/" + f"bot{self.token}/" + f"{file['file_path']}" + ), + mode='raw' + ) + path = path or self.path + if file_name is None: + file_name = get_secure_key(length=10) + try: + with open(f"{path}/{file_name}", 'wb') as local_file: + local_file.write(file_bytes) + except Exception as e: + logging.error(f"File download failed due to {e}") + return + async def answer_inline_query(self, inline_query_id=None, results=[],