03-sep: [videoclub] Fix formateo para Telegram (troceado en mensajes + formatear_novedades)

This commit is contained in:
juanjo
2026-09-03 20:30:49 +02:00
parent b1296a0a07
commit 451e5ce3c7
3 changed files with 48 additions and 41 deletions

Binary file not shown.

View File

@@ -228,8 +228,22 @@ def buscar_series(termino, items=None):
return grupos return grupos
def trocear_texto(lineas, max_len=3500):
"""Convierte lista de lineas en mensajes Telegram <= max_len sin partir lineas."""
mensajes, actual, long = [], [], 0
for linea in lineas:
if actual and long + len(linea) + 1 > max_len:
mensajes.append("\n".join(actual))
actual, long = [], 0
actual.append(linea)
long += len(linea) + 1
if actual:
mensajes.append("\n".join(actual))
return mensajes
def formatear_peliculas(resultados): def formatear_peliculas(resultados):
"""Formatea resultados de peliculas como lista numerada.""" """Formatea resultados de peliculas como lista de mensajes Telegram numerados."""
if not resultados: if not resultados:
return ["No se encontraron peliculas con ese termino."] return ["No se encontraron peliculas con ese termino."]
lineas = [f"🎬 <b>Resultados ({len(resultados)}):</b>", ""] lineas = [f"🎬 <b>Resultados ({len(resultados)}):</b>", ""]
@@ -244,11 +258,11 @@ def formatear_peliculas(resultados):
lineas.append(f" <code>descargar {enlace}</code>") lineas.append(f" <code>descargar {enlace}</code>")
lineas.append("") lineas.append("")
lineas.append("Responde con el <b>numero</b> para descargar.") lineas.append("Responde con el <b>numero</b> para descargar.")
return [lineas] return trocear_texto(lineas)
def formatear_series(grupos): def formatear_series(grupos):
"""Formatea resultados de series como lista numerada por temporadas.""" """Formatea resultados de series como lista de mensajes Telegram numerados."""
if not grupos: if not grupos:
return ["No se encontraron series con ese termino."] return ["No se encontraron series con ese termino."]
lineas = [] lineas = []
@@ -280,7 +294,7 @@ def formatear_series(grupos):
lineas.append("") lineas.append("")
lineas.append("Responde con el <b>numero</b> de episodio para descargar.") lineas.append("Responde con el <b>numero</b> de episodio para descargar.")
return [lineas] return trocear_texto(lineas)
def enlace_realdebrid(rd_id): def enlace_realdebrid(rd_id):
@@ -296,7 +310,7 @@ def enlace_realdebrid(rd_id):
return links[0] if links else None return links[0] if links else None
def generar_novedades(items=None): def generar_novedades(items=None, limite=20):
"""Devuelve listado de novedades recientes.""" """Devuelve listado de novedades recientes."""
if items is None: if items is None:
items = fetch_catalogo() items = fetch_catalogo()
@@ -304,7 +318,23 @@ def generar_novedades(items=None):
buenos = [it for it in normales if it["buena_calidad"]] buenos = [it for it in normales if it["buena_calidad"]]
buenos.sort(key=lambda x: (int(x["year"] or 0), x["clean"] or ""), buenos.sort(key=lambda x: (int(x["year"] or 0), x["clean"] or ""),
reverse=True) reverse=True)
return buenos[:20] return buenos[:limite]
def formatear_novedades(items):
"""Formatea novedades como lista de mensajes Telegram numerados."""
if not items:
return ["No hay novedades recientes."]
lineas = [f"🎬 <b>Ultimas novedades ({len(items)}):</b>", ""]
for i, it in enumerate(items, 1):
y = f" ({it['year']})" if it["year"] else ""
tipo = "📺" if it["tipo"] == "serie" else "🎬"
idioma = "cast." if it.get("castellano") else "ing."
enlace = it.get("enlace") or ""
lineas.append(f"{tipo} <b>{i}.</b> {it['clean']}{y} — {idioma}")
if enlace:
lineas.append(f" <code>descargar {enlace}</code>")
return trocear_texto(lineas)
if __name__ == "__main__": if __name__ == "__main__":
@@ -328,16 +358,18 @@ if __name__ == "__main__":
if cmd == "pelicula": if cmd == "pelicula":
res = buscar_peliculas(arg) res = buscar_peliculas(arg)
for line in formatear_peliculas(res): for m in formatear_peliculas(res):
print(line) print(m)
print("---")
elif cmd == "serie": elif cmd == "serie":
res = buscar_series(arg) res = buscar_series(arg)
for line in formatear_series(res): for m in formatear_series(res):
print(line) print(m)
print("---")
elif cmd == "novedades": elif cmd == "novedades":
res = generar_novedades() res = generar_novedades()
for i, it in enumerate(res, 1): for m in formatear_novedades(res):
y = f" ({it['year']})" if it["year"] else "" print(m)
print(f"{i}. {it['clean']}{y}") print("---")
else: else:
print(f"Comando desconocido: {cmd}") print(f"Comando desconocido: {cmd}")

View File

@@ -362,38 +362,13 @@ def procesar_novedades(chat_id):
enviar("🎬 Consultando ultimas novedades...", chat_id) enviar("🎬 Consultando ultimas novedades...", chat_id)
try: try:
items = vcb.generar_novedades() items = vcb.generar_novedades()
mensajes = vcb.formatear_novedades(items)
except Exception as e: except Exception as e:
log(f"novedades error: {e}") log(f"novedades error: {e}")
enviar(f"❌ Error consultando el catálogo: {e}", chat_id) enviar(f"❌ Error consultando el catálogo: {e}", chat_id)
return return
if not items: for m in mensajes:
enviar("No hay novedades recientes.", chat_id) enviar(m, chat_id)
return
lineas = [f"🎬 <b>Ultimas novedades ({len(items)}):</b>", ""]
for i, it in enumerate(items, 1):
y = f" ({it['year']})" if it["year"] else ""
tipo = "📺" if it["tipo"] == "serie" else "🎬"
idioma = "cast." if it.get("castellano") else ""
enlace = it.get("enlace") or ""
lineas.append(f"{tipo} <b>{i}.</b> {it['clean']}{y} {idioma}")
if enlace:
lineas.append(f" <code>descargar {enlace}</code>")
texto = "\n".join(lineas)
# Trocear si es muy largo
CHUNK = 3500
partes = []
actual = []
long = 0
for linea in lineas:
if actual and long + len(linea) + 1 > CHUNK:
partes.append("\n".join(actual))
actual, long = [], 0
actual.append(linea)
long += len(linea) + 1
if actual:
partes.append("\n".join(actual))
for parte in partes:
enviar(parte, chat_id)
def monitor_temperatura(): def monitor_temperatura():