06-sep: [parental] Bloquear dispositivo: inventario vivo con toggle por numero + alias TV/Xbox

This commit is contained in:
juanjo
2026-09-06 15:06:20 +02:00
parent 2801d2a412
commit df1f7f0d93
2 changed files with 142 additions and 0 deletions

View File

@@ -185,6 +185,7 @@ def teclado_parental():
_btn("🔓 Desbloquear tablets", PREFIJO + "acc:tablets:desbloquear"),
],
[_btn("📋 Listar estado", PREFIJO + "acc:parental_listar")],
[_btn("📺 Bloquear dispositivo…", PREFIJO + "acc:dispositivos")],
[
_btn("🔒 Desactivar…", PREFIJO + "sub:desactivar"),
_btn("🔓 Activar…", PREFIJO + "sub:activar"),
@@ -258,6 +259,39 @@ def teclado_minutos_pausa(nombre):
])
# Snapshot de la lista de dispositivos por chat (para toggle por numero).
menu_dispositivos = {}
def teclado_dispositivos(lista):
filas = []
for i, d in enumerate(lista, start=1):
marca = "🔒" if d["bloqueado"] else "🔓"
extra = f" {d['ip']}" if d.get("ip") else ""
filas.append([_btn(f"{i}. {marca} {d['tipo']} {d['nombre'][:28]}{extra}",
PREFIJO + f"acc:blqdev:{i}")])
filas.append([_btn("⬅️ Control parental", PREFIJO + "cat:parental")])
return _mk(filas)
def _mostrar_dispositivos(chat_id, message_id):
import pi_bot
try:
from asus_api_control import listar_dispositivos
lista = listar_dispositivos()
except Exception as e:
_enviar_nuevo(chat_id, f"❌ Error listando dispositivos: {e}", None)
return
if not lista:
_enviar_nuevo(chat_id, "No hay dispositivos en red.", None)
return
menu_dispositivos[chat_id] = lista
_enviar_edit(chat_id, message_id,
"📺 <b>Bloquear dispositivo</b>\nPulsa el número para "
"bloquear/desbloquear:",
teclado_dispositivos(lista))
def teclado_resultados(lista, prefijo):
filas = []
for i, item in enumerate(lista[:12], start=1):
@@ -612,6 +646,29 @@ def _ejecutar_accion(chat_id, message_id, partes):
_cerrar_menu(chat_id, message_id)
_fin_accion(chat_id, "aspi")
return
if accion == "dispositivos":
_record_cat(chat_id, "parental")
_mostrar_dispositivos(chat_id, message_id)
return
if accion == "blqdev":
_record_cat(chat_id, "parental")
lista = menu_dispositivos.get(chat_id) or []
numero = int(sub) if sub.isdigit() else 0
if 1 <= numero <= len(lista):
d = lista[numero - 1]
try:
from asus_api_control import bloquear_mac, listar_dispositivos
bloquear_mac(d["mac"], not d["bloqueado"], d["nombre"])
lista = listar_dispositivos()
menu_dispositivos[chat_id] = lista
except Exception as e:
_enviar_nuevo(chat_id, f"❌ Error: {e}", None)
return
_enviar_edit(chat_id, message_id,
"📺 <b>Bloquear dispositivo</b>\nPulsa el número para "
"bloquear/desbloquear:",
teclado_dispositivos(lista))
return
if accion == "tablets":
if sub in ("bloquear", "desbloquear"):
verbo = "desactivar" if sub == "bloquear" else "activar"