async def download_tg(client, message): user_id = message.from_user.id LOGGER.info(user_id) mess_age = await message.reply_text("...", quote=True) if not os.path.isdir(DOWNLOAD_LOCATION): os.makedirs(DOWNLOAD_LOCATION) if message.reply_to_message is not None: start_t = datetime.now() download_location = str(Path("./").resolve()) + "/" c_time = time.time() prog = Progress(user_id, client, mess_age) try: the_real_download_location = await client.download_media( message=message.reply_to_message, file_name=download_location, progress=prog.progress_for_pyrogram, progress_args=("trying to download", c_time), ) except Exception as g_e: await mess_age.edit(str(g_e)) LOGGER.error(g_e) return end_t = datetime.now() ms = (end_t - start_t).seconds LOGGER.info(the_real_download_location) await asyncio.sleep(5) if the_real_download_location: await mess_age.edit_text( f"Downloaded to <code>{the_real_download_location}</code> in <u>{ms}</u> seconds" ) else: await mess_age.edit_text( "Γ°ΕΈΛβ Download Cancelled or some error happened") return return the_real_download_location, mess_age
async def down_load_media_f(client, message): user_command = message.command[0] user_id = message.from_user.id LOGGER.info(user_id) mess_age = await message.reply_text( "Is it really a Telegram Media π€!\nJust to make sure π€·ββοΈ \nIf yes, then wait a few minutes", quote=True) if not os.path.isdir(DOWNLOAD_LOCATION): os.makedirs(DOWNLOAD_LOCATION) if message.reply_to_message is not None: start_t = datetime.now() download_location = str(Path().resolve()) + "/" c_time = time.time() prog = Progress(user_id, client, mess_age) try: the_real_download_location = await client.download_media( message=message.reply_to_message, file_name=download_location, progress=prog.progress_for_pyrogram, progress_args=("trying to download", c_time), ) except Exception as g_e: await mess_age.edit(str(g_e)) LOGGER.error(g_e) return end_t = datetime.now() ms = (end_t - start_t).seconds LOGGER.info(the_real_download_location) await asyncio.sleep(10) if the_real_download_location: await mess_age.edit_text( f"Downloaded to <code>{the_real_download_location}</code> in <u>{ms}</u> seconds" ) else: await mess_age.edit_text( "π Download Cancelled or some error happened") return the_real_download_location_g = the_real_download_location if user_command == TELEGRAM_LEECH_UNZIP_COMMAND.lower(): try: check_ifi_file = get_base_name(the_real_download_location) file_up = await unzip_me(the_real_download_location) if os.path.exists(check_ifi_file): the_real_download_location_g = file_up except Exception as ge: LOGGER.info(ge) LOGGER.info( f"Unable to extract {os.path.basename(the_real_download_location)}, Uploading the same file" ) await upload_to_gdrive(the_real_download_location_g, mess_age, message, user_id) else: await mess_age.edit_text( "Reply to a Telegram Media, to upload to the Cloud Drive.")
async def download_tg(client, message): user_id = message.from_user.id LOGGER.info(user_id) mess_age = await message.reply_text("**DownloadinG...**", quote=True) if not os.path.isdir(DOWNLOAD_LOCATION): os.makedirs(DOWNLOAD_LOCATION) rep_mess = message.reply_to_message if rep_mess is not None: file = [rep_mess.document, rep_mess.video, rep_mess.audio] file_name = [fi for fi in file if fi is not None][0].file_name start_t = datetime.now() download_location = str(Path("./").resolve()) + "/" c_time = time.time() prog = Progress(user_id, client, mess_age) try: the_real_download_location = await client.download_media( message=message.reply_to_message, file_name=download_location, progress=prog.progress_for_pyrogram, progress_args=(f"**Γ’β¬Β’ Downloading :** `{file_name}`", c_time) ) except Exception as g_e: await mess_age.edit(str(g_e)) LOGGER.error(g_e) return end_t = datetime.now() ms = (end_t - start_t).seconds LOGGER.info(the_real_download_location) await asyncio.sleep(2) if the_real_download_location: await mess_age.edit_text( f"Downloaded to <code>{the_real_download_location}</code> in <u>{ms}</u> seconds" ) else: await mess_age.edit_text("Γ°ΕΈΛβ Download Cancelled or some error happened") return None, mess_age return the_real_download_location, mess_age
async def upload_single_file( message, local_file_name, caption_str, from_user, client, edit_media, yt_thumb ): await asyncio.sleep(EDIT_SLEEP_TIME_OUT) local_file_name = str(Path(local_file_name).resolve()) sent_message = None start_time = time.time() # thumbnail_location = os.path.join( DOWNLOAD_LOCATION, "thumbnails", str(from_user) + ".jpg" ) # LOGGER.info(thumbnail_location) if UPLOAD_AS_DOC.upper() == "TRUE": # todo: this code will be removed in future thumb = None thumb_image_path = None if os.path.exists(thumbnail_location): thumb_image_path = await copy_file( thumbnail_location, os.path.dirname( os.path.abspath(local_file_name)) ) thumb = thumb_image_path message_for_progress_display = message if not edit_media: message_for_progress_display = await message.reply_text( "starting upload of {}".format( os.path.basename(local_file_name)) ) prog = Progress(from_user, client, message_for_progress_display) sent_message = await message.reply_document( document=local_file_name, thumb=thumb, caption=caption_str, parse_mode="html", disable_notification=True, progress=prog.progress_for_pyrogram, progress_args=( f"{os.path.basename(local_file_name)}", start_time, ), ) if edit_media: await message_for_progress_display.delete() if message.message_id != message_for_progress_display.message_id: try: await message_for_progress_display.delete() except FloodWait as gf: time.sleep(gf.x) except Exception as rr: LOGGER.warning(str(rr)) os.remove(local_file_name) if thumb is not None: os.remove(thumb) else: try: message_for_progress_display = message if not edit_media: message_for_progress_display = await message.reply_text( "starting upload of {}".format( os.path.basename(local_file_name)) ) prog = Progress(from_user, client, message_for_progress_display) if local_file_name.upper().endswith(("MKV", "MP4", "WEBM", "M4V", "3GP")): duration = 0 try: metadata = extractMetadata(createParser(local_file_name)) if metadata.has("duration"): duration = metadata.get("duration").seconds except Exception as g_e: LOGGER.info(g_e) width = 0 height = 0 thumb_image_path = None if os.path.exists(thumbnail_location): thumb_image_path = await copy_file( thumbnail_location, os.path.dirname(os.path.abspath(local_file_name)), ) else: if not yt_thumb: thumb_image_path = await take_screen_shot( local_file_name, os.path.dirname(os.path.abspath(local_file_name)), (duration / 2), ) else: req = requests.get(yt_thumb) thumb_image_path = os.path.join( os.path.dirname(os.path.abspath(local_file_name)), str(time.time()) + ".jpg", ) with open(thumb_image_path, "wb") as thum: thum.write(req.content) img = Image.open(thumb_image_path).convert("RGB") img.save(thumb_image_path, format="jpeg") # get the correct width, height, and duration for videos greater than 10MB if os.path.exists(thumb_image_path): metadata = extractMetadata( createParser(thumb_image_path)) if metadata.has("width"): width = metadata.get("width") if metadata.has("height"): height = metadata.get("height") # ref: https://t.me/PyrogramChat/44663 # https://stackoverflow.com/a/21669827/4723940 Image.open(thumb_image_path).convert("RGB").save( thumb_image_path ) img = Image.open(thumb_image_path) # https://stackoverflow.com/a/37631799/4723940 img.resize((320, height)) img.save(thumb_image_path, "JPEG") # https://pillow.readthedocs.io/en/3.1.x/reference/Image.html#create-thumbnails # thumb = None if thumb_image_path is not None and os.path.isfile(thumb_image_path): thumb = thumb_image_path # send video if edit_media and message.photo: await asyncio.sleep(EDIT_SLEEP_TIME_OUT) sent_message = await message.edit_media( media=InputMediaVideo( media=local_file_name, thumb=thumb, caption=caption_str, parse_mode="html", width=width, height=height, duration=duration, supports_streaming=True, ) # quote=True, ) else: sent_message = await message.reply_video( video=local_file_name, caption=caption_str, parse_mode="html", duration=duration, width=width, height=height, thumb=thumb, supports_streaming=True, disable_notification=True, progress=prog.progress_for_pyrogram, progress_args=( f"{os.path.basename(local_file_name)}", start_time, ), ) if thumb is not None: os.remove(thumb) elif local_file_name.upper().endswith(("MP3", "M4A", "M4B", "FLAC", "WAV")): metadata = extractMetadata(createParser(local_file_name)) duration = 0 title = "" artist = "" if metadata.has("duration"): duration = metadata.get("duration").seconds if metadata.has("title"): title = metadata.get("title") if metadata.has("artist"): artist = metadata.get("artist") thumb_image_path = None if os.path.isfile(thumbnail_location): thumb_image_path = await copy_file( thumbnail_location, os.path.dirname(os.path.abspath(local_file_name)), ) thumb = None if thumb_image_path is not None and os.path.isfile(thumb_image_path): thumb = thumb_image_path # send audio if edit_media and message.photo: await asyncio.sleep(EDIT_SLEEP_TIME_OUT) sent_message = await message.edit_media( media=InputMediaAudio( media=local_file_name, thumb=thumb, caption=caption_str, parse_mode="html", duration=duration, performer=artist, title=title, ) ) else: sent_message = await message.reply_audio( audio=local_file_name, caption=caption_str, parse_mode="html", duration=duration, performer=artist, title=title, thumb=thumb, disable_notification=True, progress=prog.progress_for_pyrogram, progress_args=( f"{os.path.basename(local_file_name)}", start_time, ), ) if thumb is not None: os.remove(thumb) else: thumb_image_path = None if os.path.isfile(thumbnail_location): thumb_image_path = await copy_file( thumbnail_location, os.path.dirname(os.path.abspath(local_file_name)), ) # if a file, don't upload "thumb" # this "diff" is a major derp -_- πππ thumb = None if thumb_image_path is not None and os.path.isfile(thumb_image_path): thumb = thumb_image_path # # send document if edit_media and message.photo: sent_message = await message.edit_media( media=InputMediaDocument( media=local_file_name, thumb=thumb, caption=caption_str, parse_mode="html", ) ) else: sent_message = await message.reply_document( document=local_file_name, thumb=thumb, caption=caption_str, parse_mode="html", disable_notification=True, progress=prog.progress_for_pyrogram, progress_args=( f"{os.path.basename(local_file_name)}", start_time, ), ) if thumb is not None: os.remove(thumb) except MessageNotModified as oY: LOGGER.info(oY) except FloodWait as g: LOGGER.info(g) time.sleep(g.x) except Exception as e: LOGGER.info(e) await message_for_progress_display.edit_text("**FAILED**\n" + str(e)) else: if message.message_id != message_for_progress_display.message_id: try: if sent_message is not None: await message_for_progress_display.delete() except FloodWait as gf: time.sleep(gf.x) except Exception as rr: LOGGER.warning(str(rr)) await asyncio.sleep(5) os.remove(local_file_name) return sent_message