From 2cb0cf841c33135197a3b4fa9388350f3195f34e Mon Sep 17 00:00:00 2001 From: ChemaVX Date: Fri, 3 Jul 2026 15:17:21 +0000 Subject: [PATCH] feat(deps): python-telegram-bot 21.5 -> 22.8 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Salto mayor revisado contra el changelog oficial: - La 22.0 elimina lo deprecado en v20.x. De esa lista el bot solo usaba disable_web_page_preview (3 sitios), que ademas resulta seguir vivo como shim en 22.8 — se migra igualmente a link_preview_options, que es la API canonica desde Bot API 7.0. - No usamos quote=, proxy_url, ni *_timeout en run_polling (el resto de eliminaciones). Python >=3.10 (imagen 3.12) y httpx >=0.27,<0.29 (tenemos 0.28.1) OK. - Verificado aislado: import de src.bot.bot sin DeprecationWarnings, 8 tests en verde. Co-Authored-By: Claude Fable 5 --- requirements.txt | 2 +- src/bot/bot.py | 11 +++++++---- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/requirements.txt b/requirements.txt index 5f95c56..eefa827 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,5 @@ # Core -python-telegram-bot==21.5 +python-telegram-bot==22.8 httpx==0.28.1 aiohttp==3.14.1 diff --git a/src/bot/bot.py b/src/bot/bot.py index 696e210..7ce7535 100644 --- a/src/bot/bot.py +++ b/src/bot/bot.py @@ -10,7 +10,7 @@ from typing import Optional from zoneinfo import ZoneInfo import structlog -from telegram import Update, Message +from telegram import Update, Message, LinkPreviewOptions from telegram.ext import ( Application, CommandHandler, MessageHandler, filters, ContextTypes @@ -397,7 +397,7 @@ async def cmd_generate(update: Update, ctx: ContextTypes.DEFAULT_TYPE): await update.message.reply_text( generator.last_publish_notice, parse_mode=ParseMode.MARKDOWN, - disable_web_page_preview=True, + link_preview_options=LinkPreviewOptions(is_disabled=True), ) except Exception as e: logger.warning("Failed to send SEO summary message", error=str(e)) @@ -526,7 +526,10 @@ async def cmd_news(update: Update, ctx: ContextTypes.DEFAULT_TYPE): items = [item_from_row(r) for r in recent] for chunk in format_digest(items): - await update.message.reply_text(chunk, disable_web_page_preview=False) + # Previews activos a propósito (el digest gana con la tarjeta del link). + await update.message.reply_text( + chunk, link_preview_options=LinkPreviewOptions(is_disabled=False) + ) finally: await db_conn.close() @@ -969,7 +972,7 @@ async def _scheduler_loop(app: Application): for c in chunks: await app.bot.send_message( chat_id=news_chat_id, text=c, - disable_web_page_preview=False, + link_preview_options=LinkPreviewOptions(is_disabled=False), ) # Marca todos los pendientes (incluidos los "…y N más") await db.mark_news_notified([r["id"] for r in pending])