Spaces:
Sleeping
Sleeping
| from utils.clients import get_client | |
| from pyrogram import Client | |
| from pyrogram.types import Message | |
| from pyrogram.errors import AuthKeyDuplicated | |
| from config import STORAGE_CHANNEL | |
| import os | |
| from pathlib import Path | |
| from utils.logger import Logger | |
| from urllib.parse import unquote_plus | |
| logger = Logger(__name__) | |
| PROGRESS_CACHE = {} | |
| STOP_TRANSMISSION = [] | |
| async def progress_callback(current, total, id, client: Client, file_path): | |
| global PROGRESS_CACHE, STOP_TRANSMISSION | |
| PROGRESS_CACHE[id] = ("running", current, total) | |
| if id in STOP_TRANSMISSION: | |
| logger.info(f"Stopping transmission {id}") | |
| client.stop_transmission() | |
| try: | |
| os.remove(file_path) | |
| except: | |
| pass | |
| async def start_file_uploader( | |
| file_path, id, directory_path, filename, file_size, delete=True | |
| ): | |
| global PROGRESS_CACHE | |
| from utils.directoryHandler import DRIVE_DATA | |
| logger.info(f"Uploading file {file_path} {id}") | |
| if file_size > 1.98 * 1024 * 1024 * 1024: | |
| # Use premium client for files larger than 2 GB | |
| client: Client = get_client(premium_required=True) | |
| else: | |
| client: Client = get_client() | |
| PROGRESS_CACHE[id] = ("running", 0, 0) | |
| try: | |
| message: Message = await client.send_document( | |
| STORAGE_CHANNEL, | |
| file_path, | |
| progress=progress_callback, | |
| progress_args=(id, client, file_path), | |
| disable_notification=True, | |
| ) | |
| except AuthKeyDuplicated as e: | |
| error_msg = ( | |
| "AUTH_KEY_DUPLICATED: The same bot token is being used in multiple places simultaneously. " | |
| "The session file has been invalidated by Telegram. " | |
| "Please ensure you're not running the same bot token locally and on Hugging Face Spaces at the same time. " | |
| "Delete the session file and restart the application." | |
| ) | |
| logger.error(error_msg) | |
| logger.error(f"Error details: {e}") | |
| # Try to delete the session file if possible | |
| try: | |
| session_cache_path = Path("./cache") | |
| session_file = session_cache_path / f"{client.name}.session" | |
| if session_file.exists(): | |
| session_file.unlink() | |
| logger.info(f"Deleted invalidated session file: {session_file}") | |
| except Exception as cleanup_error: | |
| logger.error(f"Failed to delete session file: {cleanup_error}") | |
| PROGRESS_CACHE[id] = ("failed", 0, 0) | |
| if delete: | |
| try: | |
| os.remove(file_path) | |
| except: | |
| pass | |
| return | |
| size = ( | |
| message.photo | |
| or message.document | |
| or message.video | |
| or message.audio | |
| or message.sticker | |
| ).file_size | |
| filename = unquote_plus(filename) | |
| DRIVE_DATA.new_file(directory_path, filename, message.id, size) | |
| PROGRESS_CACHE[id] = ("completed", size, size) | |
| logger.info(f"Uploaded file {file_path} {id}") | |
| if delete: | |
| try: | |
| os.remove(file_path) | |
| except Exception as e: | |
| pass | |