Spaces:
Runtime error
Runtime error
# config.py | |
import os | |
import logging | |
from dotenv import load_dotenv | |
# Load .env file if exists (for local testing) | |
load_dotenv() | |
logger = logging.getLogger(__name__) | |
class Config: | |
# --- Essential Secrets (Read from Environment/HF Secrets) --- | |
BOT_TOKEN = os.getenv('BOT_TOKEN') | |
API_ID = os.getenv('API_ID') | |
API_HASH = os.getenv('API_HASH') | |
# --- Admin Configuration --- | |
# !!! REPLACE 123456789 WITH YOUR ACTUAL ADMIN TELEGRAM USER ID(S) !!! | |
ADMIN_IDS = [1559968105, 1131003976] # Example: [123456789, 987654321] | |
# --- Validate Secrets --- | |
if not BOT_TOKEN: | |
logger.critical("BOT_TOKEN missing!") | |
raise ValueError("BOT_TOKEN environment variable not set! Add it to Hugging Face Secrets.") | |
if not API_ID: | |
logger.critical("API_ID missing!") | |
raise ValueError("API_ID environment variable not set! Add it to Hugging Face Secrets.") | |
if not API_HASH: | |
logger.critical("API_HASH missing!") | |
raise ValueError("API_HASH environment variable not set! Add it to Hugging Face Secrets.") | |
try: | |
API_ID = int(API_ID) | |
except ValueError: | |
logger.critical("API_ID is not an integer!") | |
raise ValueError("API_ID environment variable must be an integer.") | |
if not ADMIN_IDS or not all(isinstance(admin_id, int) for admin_id in ADMIN_IDS): | |
logger.warning("ADMIN_IDS list is empty or contains non-integer values. Defaulting to empty. Check configuration.") | |
ADMIN_IDS = [] | |
else: | |
logger.info(f"Admin IDs loaded: {ADMIN_IDS}") | |
# --- File Paths & Directories --- | |
PREDEFINED_TEMPLATES_DIR = "templates" # Relative to /app in Docker | |
OUTPUT_DIR = "generated_images" # Relative to /app in Docker | |
FONT_PATH = "Arial" # Relies on system font installed via Dockerfile | |
SESSION_NAME = "bot_hydro_session" # Hydrogram session file name (will be in /app) | |
# --- Image Processing Settings (YOU NEED TO SET THESE ACCURATELY FOR YOUR TEMPLATE) --- | |
TEMPLATE_SIZE = (1200, 900) # The EXACT width and height of your template PNG files. | |
PLACEHOLDER_SIZE = (1200, 600) # The EXACT width and height of the transparent "window" | |
# in your template where the user's image will go. (Example) | |
PLACEHOLDER_POSITION = (0, 0) # The EXACT top-left (x, y) coordinates where the | |
# transparent "window" starts on your template. (Example) | |
# Auto Template Settings (if you use them, otherwise can be ignored) | |
AUTO_TEMPLATES_COUNT = 3 # Reduced for quicker testing; was 5 | |
AUTO_TEMPLATE_SIZE = (1200, 900) | |
AUTO_USER_IMAGE_SIZE = (600, 450) | |
# Text and General Image Settings | |
MIN_FONT_SIZE = 30 | |
MAX_FONT_SIZE = 60 | |
TEXT_STROKE_WIDTH = 2 | |
NOISE_INTENSITY = 0.03 | |
MAX_CAPTION_WIDTH = 35 | |
JPEG_QUALITY = 85 | |
# Example: Text placement for the caption (YOU MUST ADJUST THESE) | |
# These coordinates are relative to the top-left (0,0) of your TEMPLATE_SIZE canvas. | |
TEXT_AREA_Y_START = 700 # Example: Y-coordinate where your text background bar begins | |
TEXT_AREA_HEIGHT = 150 # Example: Height of your text background bar | |
# Horizontal centering for text is often done dynamically in processing.py | |