06-sep: [videoclub] flujo unificado torrents/bajar en novedades+pelicula+serie, sin URLs, /limpiar borra todo el chat (IDD+OpenCode), parental CAROLINA con fallback MAC en vivo

This commit is contained in:
juanjo
2026-09-06 12:21:19 +02:00
parent c82737cb13
commit bdc6cf8f48
7 changed files with 591 additions and 26 deletions

View File

@@ -252,20 +252,29 @@ def formatear_peliculas(resultados):
calidad = "4K" if "4k" in (it.get("name") or "").lower() or \
"2160p" in (it.get("name") or "").lower() else "HD"
idioma = "cast." if it.get("castellano") else "ing."
enlace = it.get("enlace") or ""
lineas.append(f"<b>{i}.</b> {it['clean']}{y} — {calidad}, {idioma}")
if enlace:
lineas.append(f" <code>descargar {enlace}</code>")
lineas.append("")
lineas.append("Responde con el <b>numero</b> para descargar.")
lineas.append("Responde <b>/torrents NUMERO</b> para ver opciones y descargar.")
return trocear_texto(lineas)
def aplanar_series(grupos):
"""Devuelve lista plana de episodios en el mismo orden de visualizacion
(grupos ordenados, episodios ordenados). La usa el bot para que el numero
elegido con /torrents coincida con lo mostrado."""
planos = []
for base in sorted(grupos, key=lambda x: x.lower()):
for it in grupos[base]:
planos.append(it)
return planos
def formatear_series(grupos):
"""Formatea resultados de series como lista de mensajes Telegram numerados."""
if not grupos:
return ["No se encontraron series con ese termino."]
lineas = []
num_global = 1
for base in sorted(grupos, key=lambda x: x.lower()):
eps = grupos[base]
temp_max = max(parsear_episodio(e["name"])[0] for e in eps)
@@ -273,7 +282,6 @@ def formatear_series(grupos):
lineas.append("")
temp_actual = 0
num_global = 1
for it in eps:
temp, cap = parsear_episodio(it["name"])
if temp != temp_actual:
@@ -282,18 +290,15 @@ def formatear_series(grupos):
lineas.append(f"<b>Temporada {temp}:</b>")
resto = _limpiar_titulo_ep(it["name"][SERIE_EP_RE.search(it["name"]).end():]) \
if SERIE_EP_RE.search(it["name"]) else it["clean"]
enlace = it.get("enlace") or ""
if temp > 0:
etiqueta = f"S{temp:02d}E{cap:02d}"
else:
etiqueta = it["clean"]
lineas.append(f" <b>{num_global}.</b> {etiqueta} — {resto}")
if enlace:
lineas.append(f" <code>descargar {enlace}</code>")
num_global += 1
lineas.append("")
lineas.append("Responde con el <b>numero</b> de episodio para descargar.")
lineas.append("Responde <b>/torrents NUMERO</b> de episodio para ver opciones y descargar.")
return trocear_texto(lineas)
@@ -330,10 +335,9 @@ def formatear_novedades(items):
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>")
lineas.append("")
lineas.append("Responde <b>/torrents NUMERO</b> para ver opciones y descargar.")
return trocear_texto(lineas)