feat: implement proxy URL handling for Telegram bot requests
CI / lint-and-test (push) Has been cancelled
CI / lint-and-test (push) Has been cancelled
This commit is contained in:
+48
-1
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user