06-sep: [menu] toda accion vuelve al menu de su categoria (menu_cat + reenviar)
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user