03-sep: [videoclub] Fix formateo para Telegram (troceado en mensajes + formatear_novedades)
This commit is contained in:
Binary file not shown.
@@ -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}")
|
||||||
|
|||||||
@@ -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():
|
||||||
|
|||||||
Reference in New Issue
Block a user