06-sep: [menu] toda accion vuelve al menu de su categoria (menu_cat + reenviar)

This commit is contained in:
juanjo
2026-09-06 14:12:52 +02:00
parent 0166f2333a
commit 1ff1c43f3c
2 changed files with 80 additions and 21 deletions

View File

@@ -291,16 +291,17 @@ def _cerrar_menu(chat_id, message_id):
_log(f"cerrar menu error: {e}")
def _disp(chat_id, message_id, comando):
"""Ejecuta un comando del bot y cierra el menu (opcion elegida)."""
def _disp(chat_id, message_id, comando, categoria=None):
"""Ejecuta un comando, cierra el menu viejo y devuelve al menu."""
import pi_bot
pi_bot.procesar(comando, chat_id)
_cerrar_menu(chat_id, message_id)
_reenviar_menu(chat_id, categoria)
def _fin_accion(chat_id):
"""Tras una accion: deja ver el resultado, limpia toda la pantalla
y deja el mensaje para volver al menu."""
def _fin_accion(chat_id, categoria=None):
"""Tras una accion terminal: deja ver el resultado, limpia toda la
pantalla y devuelve al menu de la categoria."""
import time as _time
import pi_bot
_time.sleep(4)
@@ -308,7 +309,7 @@ def _fin_accion(chat_id):
pi_bot.limpiar_pantalla(chat_id)
except Exception:
pass
_enviar_nuevo(chat_id, "✅ Hecho. Pulsa /menu para volver al menú.", None)
_reenviar_menu(chat_id, categoria)
def _reabrir(chat_id, message_id, categoria, comando):
@@ -329,9 +330,7 @@ def _reabrir(chat_id, message_id, categoria, comando):
except Exception:
pass
_borrar(chat_id, message_id)
teclado = _teclado_categoria(chat_id, categoria)
if teclado is not None:
_enviar_nuevo(chat_id, _header(categoria), teclado)
_reenviar_menu(chat_id, categoria)
# ----------------------------------------------------------------- menu ----
@@ -359,6 +358,34 @@ def _header(categoria):
return nombres.get(categoria, "🧭 <b>Menú IDD</b>")
# Ultima categoria visitada por chat: a ella se vuelve tras cada accion.
menu_cat = {}
def _record_cat(chat_id, categoria):
menu_cat[chat_id] = categoria
def _reenviar_menu(chat_id, categoria=None):
"""Envia de nuevo el menu de la categoria (con su volver operativo)."""
cat = categoria or menu_cat.get(chat_id)
if not cat:
_enviar_nuevo(chat_id, "🧭 <b>Menú IDD</b>\nElige una categoría:",
teclado_principal())
return
teclado = _teclado_categoria(chat_id, cat)
if teclado is None:
_enviar_nuevo(chat_id, "🧭 <b>Menú IDD</b>\nElige una categoría:",
teclado_principal())
return
_enviar_nuevo(chat_id, _header(cat), teclado)
def volver_al_menu(chat_id, categoria=None):
"""API para pi_bot: tras un texto libre del menu, devuelve al menu."""
_reenviar_menu(chat_id, categoria)
def _teclado_categoria(chat_id, categoria):
teclados = {
"videoclub": lambda: teclado_videoclub(chat_id),
@@ -376,6 +403,7 @@ def _teclado_categoria(chat_id, categoria):
def _abrir_categoria(chat_id, message_id, categoria):
_record_cat(chat_id, categoria)
teclado = _teclado_categoria(chat_id, categoria)
if teclado is None:
return False
@@ -400,11 +428,14 @@ def procesar_callback(data, chat_id, message_id):
# sub:torrents / sub:bajar / sub:router / sub:parental:<acc>
sub = partes[1]
if sub in ("router",):
_record_cat(chat_id, "router")
_enviar_edit(chat_id, message_id, _header("router"), teclado_router())
return
if sub in ("torrents", "bajar"):
_record_cat(chat_id, "videoclub")
return _mostrar_resultados(chat_id, message_id, sub)
if len(partes) == 2 and sub in ("desactivar", "activar", "pausa"):
_record_cat(chat_id, "parental")
_enviar_edit(chat_id, message_id,
f"¿Sobre qué dispositivo? ({sub})",
teclado_nombres(sub))
@@ -419,6 +450,13 @@ def procesar_callback(data, chat_id, message_id):
# pide un dato por teclado: lo captura el siguiente mensaje
accion = partes[1]
_guardar_pendiente(chat_id, accion)
CAT_TXT = {
"busca": "videoclub", "pelicula": "videoclub", "serie": "videoclub",
"tv": "tv", "alarma": "tv", "youtube": "tv",
"descargar": "nas",
"desactivar": "parental", "activar": "parental",
}
_record_cat(chat_id, CAT_TXT.get(accion, "sistema"))
preguntas = {
"busca": "🔎 ¿Qué busco? Escribe el nombre.",
"pelicula": "🎬 ¿Qué película busco?",
@@ -447,8 +485,10 @@ def procesar_callback(data, chat_id, message_id):
_cerrar_menu(chat_id, message_id)
return
minutos = partes[1]
_disp(chat_id, message_id,
f"parental pausa {nombre} {minutos}")
import pi_bot
pi_bot.procesar(f"parental pausa {nombre} {minutos}", chat_id)
_cerrar_menu(chat_id, message_id)
_fin_accion(chat_id, "parental")
return
if ruta == "acc":
@@ -481,13 +521,17 @@ def _mostrar_resultados(chat_id, message_id, tipo):
def _ejecutar_parental(chat_id, message_id, accion, nombre):
if accion == "pausa":
_record_cat(chat_id, "parental")
_set_pausa_nombre(chat_id, nombre)
_enviar_edit(chat_id, message_id,
f"⏸️ Pausa para <b>{nombre}</b>. ¿Cuántos minutos?",
teclado_minutos_pausa(nombre))
return
comando = f"parental {'desactivar' if accion == 'desactivar' else 'activar'} {nombre}"
_disp(chat_id, message_id, comando)
import pi_bot
pi_bot.procesar(comando, chat_id)
_cerrar_menu(chat_id, message_id)
_fin_accion(chat_id, "parental")
def _ejecutar_accion(chat_id, message_id, partes):
@@ -512,23 +556,32 @@ def _ejecutar_accion(chat_id, message_id, partes):
if accion == "parental_listar":
_reabrir(chat_id, message_id, "parental", "parental listar")
return
CAT_ACC = {
"ayuda": None, "genero": "videoclub", "novedades": "videoclub",
"descargas": "nas", "estado": "sistema", "temperatura": "sistema",
"panorama": "sistema", "limpieza": "sistema", "limpiar": "sistema",
"aimesh": "sistema", "qos": "sistema", "limite": "sistema",
"seguridad": "sistema",
}
if accion in directos:
_disp(chat_id, message_id, directos[accion])
_disp(chat_id, message_id, directos[accion], CAT_ACC.get(accion))
return
if accion == "termo":
if sub == "estado":
_reabrir(chat_id, message_id, "termo", "termo estado")
elif sub in ("on", "off"):
_disp(chat_id, message_id, f"termo {sub}")
_fin_accion(chat_id)
pi_bot.procesar(f"termo {sub}", chat_id)
_cerrar_menu(chat_id, message_id)
_fin_accion(chat_id, "termo")
return
if accion == "aspiradora":
if sub in ("estado", "start", "stop", "home", "pause", "locate"):
if sub == "estado":
_reabrir(chat_id, message_id, "aspi", "aspiradora estado")
else:
_disp(chat_id, message_id, f"aspiradora {sub}")
_fin_accion(chat_id)
pi_bot.procesar(f"aspiradora {sub}", chat_id)
_cerrar_menu(chat_id, message_id)
_fin_accion(chat_id, "aspi")
return
if accion == "tablets":
if sub in ("bloquear", "desbloquear"):
@@ -536,7 +589,7 @@ def _ejecutar_accion(chat_id, message_id, partes):
pi_bot.procesar(f"parental {verbo} Inés", chat_id)
pi_bot.procesar(f"parental {verbo} Carolina", chat_id)
_cerrar_menu(chat_id, message_id)
_fin_accion(chat_id)
_fin_accion(chat_id, "parental")
return
if accion == "router":
mapeo = {
@@ -548,12 +601,12 @@ def _ejecutar_accion(chat_id, message_id, partes):
"reiniciar": "router reiniciar",
"reservar": "router reservar",
}
_disp(chat_id, message_id, mapeo.get(sub, "router ayuda"))
_disp(chat_id, message_id, mapeo.get(sub, "router ayuda"), "router")
return
if accion in ("torrents", "bajar"):
numero = int(sub) if sub.isdigit() else 0
if numero:
_disp(chat_id, message_id, f"{accion} {numero}")
_disp(chat_id, message_id, f"{accion} {numero}", "videoclub")
return
@@ -623,6 +676,7 @@ def resolver_pausa_minutos(chat_id, texto):
return True
import pi_bot
pi_bot.procesar(f"parental pausa {nombre} {minutos}", chat_id)
_reenviar_menu(chat_id, "parental")
return True