06-sep: [parental] Bloquear dispositivo: inventario vivo con toggle por numero + alias TV/Xbox
This commit is contained in:
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user