feat: implement proxy URL handling for Telegram bot requests
CI / lint-and-test (push) Has been cancelled

This commit is contained in:
2026-07-12 21:42:59 +02:00
parent ec3cea94c9
commit 17f19e1708
2 changed files with 49 additions and 2 deletions
+1 -1
View File
@@ -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
+48 -1
View File
@@ -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