ubot1 / plugins /functions /help_uploadbot.py
sahanind's picture
Upload 96 files
e7ef6c8 verified
import logging
import os
import time
import requests
from plugins.functions.display_progress import humanbytes
logging.basicConfig(
level=logging.DEBUG, format="%(asctime)s - %(name)s - %(levelname)s - %(message)s"
)
logger = logging.getLogger(__name__)
def DetectFileSize(url):
"""
Detect the file size of a remote file by sending a HEAD request.
Parameters:
- url (str): URL of the remote file.
Returns:
int: Size of the file in bytes.
"""
r = requests.head(url, allow_redirects=True, timeout=60)
return int(r.headers.get("content-length", 0))
def DownLoadFile(url, file_name, chunk_size, client, ud_type, message_id, chat_id):
"""
Download a file from a given URL and display the download progress.
Parameters:
- url (str): URL of the file to be downloaded.
- file_name (str): Path to save the downloaded file.
- chunk_size (int): Size of each download chunk.
- client: Pyrogram client (optional).
- ud_type (str): Type of the download (e.g., "File", "Video").
- message_id: ID of the message to update the download progress.
- chat_id: ID of the chat to update the download progress.
Returns:
str: Path to the downloaded file.
"""
if os.path.exists(file_name):
os.remove(file_name)
if not url:
return file_name
r = requests.get(url, allow_redirects=True, stream=True)
total_size = int(r.headers.get("content-length", 0))
downloaded_size = 0
with open(file_name, "wb") as fd:
for chunk in r.iter_content(chunk_size=chunk_size):
if chunk:
fd.write(chunk)
downloaded_size += chunk_size
if client is not None and ((total_size // downloaded_size) % 5) == 0:
time.sleep(0.3)
try:
client.edit_message_text(
chat_id,
message_id,
text=f"{ud_type}: {humanbytes(downloaded_size)} of {humanbytes(total_size)}",
)
except Exception as e:
logger.info(f"Error: {e}")
return
return file_name