""" Конфигурация доступа к Telegram Bot API через internal_relay (retransbot). Все исходящие вызовы Bot API должны идти на RELAY_URL, а не на api.telegram.org. """ import os from typing import Tuple from dotenv import load_dotenv def get_relay_url() -> str: """Базовый URL internal_relay без завершающего слэша.""" load_dotenv() relay = (os.getenv("RELAY_URL") or "").strip().rstrip("/") if not relay: raise RuntimeError( "Требуется переменная окружения RELAY_URL " "(базовый URL internal_relay, например http://127.0.0.1:8081)" ) # Допускаем host:port без схемы — httpx требует http:// или https:// if "://" not in relay: relay = f"http://{relay}" return relay def configure_telebot_api() -> str: """ Настраивает pyTelegramBotAPI (telebot.apihelper) на работу через relay. Вызывать до создания TeleBot. """ from telebot import apihelper relay = get_relay_url() apihelper.API_URL = f"{relay}/bot{{0}}/{{1}}" apihelper.FILE_URL = f"{relay}/file/bot{{0}}/{{1}}" return relay def get_ptb_base_urls() -> Tuple[str, str]: """ base_url и base_file_url для python-telegram-bot.Bot. Формат как в Bot API: .../bot и .../file/bot (библиотека сама дописывает token/method). """ relay = get_relay_url() return f"{relay}/bot", f"{relay}/file/bot" def bot_api_method_url(token: str, method: str) -> str: """Полный URL метода Bot API через relay (для сырых httpx/requests вызовов).""" return f"{get_relay_url()}/bot{token}/{method}" # Публикация в два шага (send → edit ссылок): пауза и повторы при гонке с Telegram EDIT_LINKS_INITIAL_DELAY_SEC = 3 EDIT_LINKS_MAX_ATTEMPTS = 5 EDIT_LINKS_RETRY_INTERVAL_SEC = 2 def published_text_has_links(text: str) -> bool: """В caption/text после edit должны появиться HTML-ссылки.""" return bool(text) and "href=" in text