diff --git a/scripts/sounds/aviso_dalia.mp3 b/scripts/sounds/aviso_dalia.mp3 index 0825ce3..1eaee70 100644 Binary files a/scripts/sounds/aviso_dalia.mp3 and b/scripts/sounds/aviso_dalia.mp3 differ diff --git a/videoclub/videoclub_buscador.py b/videoclub/videoclub_buscador.py index a308691..a088dd2 100644 --- a/videoclub/videoclub_buscador.py +++ b/videoclub/videoclub_buscador.py @@ -228,8 +228,22 @@ def buscar_series(termino, items=None): 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): - """Formatea resultados de peliculas como lista numerada.""" + """Formatea resultados de peliculas como lista de mensajes Telegram numerados.""" if not resultados: return ["No se encontraron peliculas con ese termino."] lineas = [f"๐ŸŽฌ Resultados ({len(resultados)}):", ""] @@ -244,11 +258,11 @@ def formatear_peliculas(resultados): lineas.append(f" descargar {enlace}") lineas.append("") lineas.append("Responde con el numero para descargar.") - return [lineas] + return trocear_texto(lineas) 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: return ["No se encontraron series con ese termino."] lineas = [] @@ -280,7 +294,7 @@ def formatear_series(grupos): lineas.append("") lineas.append("Responde con el numero de episodio para descargar.") - return [lineas] + return trocear_texto(lineas) def enlace_realdebrid(rd_id): @@ -296,7 +310,7 @@ def enlace_realdebrid(rd_id): return links[0] if links else None -def generar_novedades(items=None): +def generar_novedades(items=None, limite=20): """Devuelve listado de novedades recientes.""" if items is None: items = fetch_catalogo() @@ -304,7 +318,23 @@ def generar_novedades(items=None): buenos = [it for it in normales if it["buena_calidad"]] buenos.sort(key=lambda x: (int(x["year"] or 0), x["clean"] or ""), 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"๐ŸŽฌ Ultimas novedades ({len(items)}):", ""] + 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} {i}. {it['clean']}{y} โ€” {idioma}") + if enlace: + lineas.append(f" descargar {enlace}") + return trocear_texto(lineas) if __name__ == "__main__": @@ -328,16 +358,18 @@ if __name__ == "__main__": if cmd == "pelicula": res = buscar_peliculas(arg) - for line in formatear_peliculas(res): - print(line) + for m in formatear_peliculas(res): + print(m) + print("---") elif cmd == "serie": res = buscar_series(arg) - for line in formatear_series(res): - print(line) + for m in formatear_series(res): + print(m) + print("---") elif cmd == "novedades": res = generar_novedades() - for i, it in enumerate(res, 1): - y = f" ({it['year']})" if it["year"] else "" - print(f"{i}. {it['clean']}{y}") + for m in formatear_novedades(res): + print(m) + print("---") else: print(f"Comando desconocido: {cmd}") diff --git a/vigilancia/pi_bot.py b/vigilancia/pi_bot.py index b77b67d..5795ff6 100644 --- a/vigilancia/pi_bot.py +++ b/vigilancia/pi_bot.py @@ -362,38 +362,13 @@ def procesar_novedades(chat_id): enviar("๐ŸŽฌ Consultando ultimas novedades...", chat_id) try: items = vcb.generar_novedades() + mensajes = vcb.formatear_novedades(items) except Exception as e: log(f"novedades error: {e}") enviar(f"โŒ Error consultando el catรกlogo: {e}", chat_id) return - if not items: - enviar("No hay novedades recientes.", chat_id) - return - lineas = [f"๐ŸŽฌ Ultimas novedades ({len(items)}):", ""] - 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} {i}. {it['clean']}{y} {idioma}") - if enlace: - lineas.append(f" descargar {enlace}") - 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) + for m in mensajes: + enviar(m, chat_id) def monitor_temperatura():