# Copy to .env for local runs. On Heroku set these as Config Vars instead. # Placeholder values only - never commit real secrets. # ---------------------------------------------------------------- Telegram # user = your own account (full history, needs login); bot = bot admin of the channel TELEGRAM_MODE=user # From https://my.telegram.org -> API development tools (needed in both modes) TELEGRAM_API_ID=1234567 TELEGRAM_API_HASH=your_api_hash_here # From @BotFather: admin command interface (required in bot mode, recommended in user mode) TELEGRAM_BOT_TOKEN=123456789:replace-with-your-bot-token # User mode on Heroku: output of `python main.py login --session-string`. # Locally you can leave it empty and use `python main.py login` (session file). TELEGRAM_SESSION_STRING= # Numeric Telegram user IDs allowed to use the commands (comma-separated) ADMIN_USER_IDS=111111111 # Chats that receive progress/notifications (default: ADMIN_USER_IDS) NOTIFY_CHAT_IDS= # @username, https://t.me/... link, or -100... numeric ID SOURCE_CHANNEL_ID=@your_channel # existing | new | both PROCESS_MODE=both START_MESSAGE_ID=1 # Optional ISO date: only messages on/after this date (e.g. 2024-01-31) START_DATE= INCLUDE_DOCUMENT_VIDEOS=true # Optional comma-separated filters (case-insensitive) FILTER_TOPICS= FILTER_BATCHES= # Bot mode history probing (bots cannot list history) BOT_SCAN_MAX_EMPTY=200 BOT_SCAN_END_ID= # Telegram flood waits shorter than this (seconds) are slept through automatically FLOOD_SLEEP_THRESHOLD=60 SESSION_DIR=data/sessions # ---------------------------------------------------------------- Google Drive # oauth (personal Drive) | service_account (Shared Drive) GOOGLE_AUTH_MODE=oauth # drive.file (least privilege; bot only sees folders it created) | drive (full access) GOOGLE_DRIVE_SCOPE=drive.file # Local OAuth files (used by `python main.py drive-auth`) GOOGLE_CLIENT_SECRETS_FILE=credentials/client_secret.json GOOGLE_TOKEN_FILE=credentials/token.json # Heroku / file-less alternatives (raw JSON or base64 JSON): GOOGLE_OAUTH_TOKEN_JSON= GOOGLE_SERVICE_ACCOUNT_JSON= GOOGLE_SERVICE_ACCOUNT_FILE= # Folder that will contain the topic folders (empty = top level of My Drive) GOOGLE_DRIVE_ROOT_FOLDER_ID= DRIVE_SHARED_DRIVE_ID= # none (private, default) | anyone_with_link DRIVE_SHARE_MODE=none # Multiple of 256KB; one chunk is held in memory at a time UPLOAD_CHUNK_SIZE=16MB # ---------------------------------------------------------------- Organisation & naming BATCH_SUBFOLDERS_ENABLED=false FALLBACK_TOPIC_FOLDER=Uncategorized FALLBACK_BATCH_FOLDER=Unknown Batch # suffix_number | suffix_message_id | skip | fail (never overwrites) DUPLICATE_POLICY=suffix_number # Reuse an existing same-name file in the folder when size and MD5 match REUSE_IDENTICAL_FILES=true # skip | upload : the same Telegram media posted again under a new message ID DUPLICATE_MEDIA_POLICY=skip # fallback (Telegram file name / telegram_) | fail MISSING_TITLE_POLICY=fallback # keep | append : when the Title extension disagrees with the real container EXTENSION_MISMATCH_POLICY=keep # Replace characters Windows cannot store (<>:"|?*) STRICT_FILENAMES=false # Optional persistent sequence number prefix, e.g. "001 - Class 01.mp4" SEQUENCE_PREFIX_ENABLED=false SEQUENCE_PREFIX_FORMAT="{seq:03d} - " # ---------------------------------------------------------------- Storage # PostgreSQL (required on Heroku; Heroku Postgres sets it automatically) DATABASE_URL= # SQLite file used when DATABASE_URL is empty (local development) DATABASE_PATH=data/bot.db # Only set to true if you accept losing all progress on every Heroku restart ALLOW_EPHEMERAL_DATABASE=false DATA_DIR=data DOWNLOAD_DIR=downloads LOG_DIR=logs # 0 = unlimited MAX_TEMP_STORAGE=0 MIN_FREE_DISK_SPACE=1GB KEEP_LOCAL_FILES=false # Keep the local file of a video that FAILED (default: delete it; it can be downloaded again) KEEP_FAILED_DOWNLOADS=false # Seconds between sweeps that delete abandoned temp files (0 = only at startup / when disk is low) TEMP_CLEANUP_INTERVAL=3600 COMPUTE_SHA256=true # ---------------------------------------------------------------- Processing MAX_RETRIES=4 RETRY_DELAY=30 RETRY_MAX_DELAY=1800 # Retries of a single HTTP request inside one attempt HTTP_RETRIES=5 PROCESSING_DELAY=2 # true = halt the whole queue when any video fails permanently STRICT_STOP=false # true = start processing at every boot (otherwise /run; then remembered across restarts) AUTO_START=false # Seconds to wait for another worker to release the queue lock (default 0 locally, 90 on Heroku) INSTANCE_LOCK_WAIT= PROGRESS_INTERVAL=10 # ---------------------------------------------------------------- /upload tasks # Minutes before an unfinished /upload setup (waiting for links or /confirm) expires UPLOAD_SETUP_TIMEOUT=30 # Largest allowed range (end - start + 1) for one task UPLOAD_MAX_RANGE=5000 # true = links must point to SOURCE_CHANNEL_ID; false = any channel the Telegram account/bot can access UPLOAD_RESTRICT_TO_SOURCE_CHANNEL=true LOG_LEVEL=info