diff --git a/.env.example b/.env.example index a05bad8..44b6d27 100644 --- a/.env.example +++ b/.env.example @@ -1,5 +1,5 @@ # Telegram Bot Token (from @BotFather) -TELEGRAM_BOT_TOKEN=8653489932:AAG_Ins2_z3sNHX8ZlGI4mhyzmUhWAWCZlg +TELEGRAM_BOT_TOKEN=8653489932:AAEqODkhcWRkfA0aZmMW2PBUvTspmFgXg-I # Direct PostgreSQL connection POSTGRES_HOST=192.168.178.3 diff --git a/worker/src/main.py b/worker/src/main.py index feece5f..c20ed73 100644 --- a/worker/src/main.py +++ b/worker/src/main.py @@ -7,12 +7,14 @@ import sys from contextlib import suppress from datetime import datetime, timedelta, timezone from typing import Any +from urllib.parse import quote import aiohttp.web as web import asyncpg from dotenv import load_dotenv from telegram import Update from telegram.ext import Application, ExtBot +from telegram.request import HTTPXRequest from db import close_pool, get_pool from health import create_health_app, record_scheduler_run, set_start_time, set_telegram_polling @@ -24,6 +26,25 @@ logger = logging.getLogger(__name__) load_dotenv() +def _get_proxy_url() -> str | None: + raw = (os.getenv("HTTPS_PROXY") or os.getenv("https_proxy") or "").strip() + if not raw: + return None + + if "://" in raw: + return raw + + parts = raw.split(":", 3) + if len(parts) != 4: + logger.warning( + "Ignoring invalid HTTPS_PROXY value (expected host:port:user:pass or full URL)" + ) + return None + + host, port, username, password = parts + return f"http://{quote(username, safe='')}:{quote(password, safe='')}@{host}:{port}" + + def _ad_passes_filters(fields: dict, kw_row: dict) -> bool: """Check if an ad passes the keyword's price and postcode filters.""" price = fields.get("price") @@ -396,7 +417,33 @@ async def main() -> None: except Exception: logger.exception("Failed to start Web UI (optional)") - app = Application.builder().token(os.getenv("TELEGRAM_BOT_TOKEN")).build() + proxy_url = _get_proxy_url() + bot_request = HTTPXRequest( + connection_pool_size=10, + proxy_url=proxy_url, + read_timeout=30.0, + write_timeout=30.0, + connect_timeout=30.0, + pool_timeout=10.0, + media_write_timeout=60.0, + ) + updates_request = HTTPXRequest( + connection_pool_size=10, + proxy_url=proxy_url, + read_timeout=30.0, + write_timeout=30.0, + connect_timeout=30.0, + pool_timeout=10.0, + media_write_timeout=60.0, + ) + + app = ( + Application.builder() + .token(os.getenv("TELEGRAM_BOT_TOKEN")) + .request(bot_request) + .get_updates_request(updates_request) + .build() + ) scheduler = None poll_task = None bot_started = False