4.2 KiB
4.2 KiB
Correcciones Bot Telegram Control PC (20-sep-2026)
Problemas reportados por el usuario
- ✅ Apagado forzoso sin confirmación → El bot apagaba directamente sin esperar confirmación del asistente
- ✅ No comprobaba estado tras apagar → No verificaba automáticamente si el PC se apagó correctamente
- ✅ Encendido no respondía → Enviaba WoL pero no verificaba si el PC arrancó
- ✅ Login crea usuario nuevo → Problema de configuración de autologon (documentado en
FIX_PROBLEMA_AUTOLOGON_USUARIO_NUEVO.md)
Cambios implementados
1. Apagado con confirmación obligatoria
ANTES:
# Apagaba directamente al pulsar el botón
await apagar_pc() → requests.post(HA_WEBHOOK_APAGAR)
AHORA:
# Pide confirmación con botones SÍ/NO
await apagar_pc() → muestra mensaje de confirmación
await apagar_pc_confirmar() → ejecuta apagado SOLO tras confirmar
Flujo:
- Usuario pulsa "🔴 Apagar PC"
- Bot muestra mensaje: "⚠️ ¿Seguro que quieres apagar?"
- Botones: "✅ SÍ, apagar" | "❌ Cancelar"
- Solo si confirma → ejecuta webhook
2. Watchdog de estado tras apagar
ANTES:
# Enviaba comando y mostraba mensaje genérico
response = requests.post(HA_WEBHOOK_APAGAR)
await msg.edit_text("✅ PC apagado correctamente") # ASUME que funcionó
AHORA:
# Espera 30s y VERIFICA con ping
response = requests.post(HA_WEBHOOK_APAGAR)
await asyncio.sleep(30) # Espera a que se apague
# Ping de verificación
result = subprocess.run(["powershell", "-Command", f"Test-Connection -ComputerName {PC_IP} -Count 1 -Quiet"])
online = "True" in result.stdout
if online:
await msg.edit_text("⚠️ APAGADO FALLIDO - PC sigue online")
else:
await msg.edit_text("✅ PC APAGADO CONFIRMADO - IP sin respuesta")
3. Watchdog de encendido con reintentos
ANTES:
# Enviaba WoL y mostraba mensaje genérico
response = requests.post(HA_WEBHOOK_ENCENDER)
await msg.edit_text("✅ Proceso iniciado. Usa /estado para verificar.") # Usuario tenía que comprobar manualmente
AHORA:
# Espera 90s y verifica con 3 reintentos
response = requests.post(HA_WEBHOOK_ENCENDER)
await asyncio.sleep(90) # Espera inicial
# 3 intentos de ping con 15s entre cada uno
intentos = 0
max_intentos = 3
online = False
while intentos < max_intentos and not online:
result = subprocess.run([...ping...])
online = "True" in result.stdout
if not online:
intentos += 1
await asyncio.sleep(15)
if online:
await msg.edit_text("✅ PC ENCENDIDO CORRECTAMENTE - Responde en {tiempo}s")
else:
await msg.edit_text("❌ ENCENDIDO FALLIDO - Verifica regleta/WoL/BIOS")
4. Botón de cancelar
Añadido callback cancelar que vuelve al menú principal si el usuario cancela el apagado.
Tiempos de espera
| Operación | Tiempo espera | Verificaciones |
|---|---|---|
| Apagado | 30 segundos | 1 ping |
| Encendido | 90 + (hasta 45s) | 3 intentos de ping con 15s entre cada uno |
Archivos modificados
INFRAESTRUCTURA/scripts/telegram_bot_pc.py— Bot corregidoINFRAESTRUCTURA/docs/FIX_PROBLEMA_AUTOLOGON_USUARIO_NUEVO.md— Solución al problema de usuario nuevoINFRAESTRUCTURA/docs/TELEGRAM_BOT_PC_FIXES.md— Este documento
Cómo usar el bot corregido
# Detener el bot anterior si está corriendo
Get-Process python | Where-Object { $_.CommandLine -match "telegram_bot_pc" } | Stop-Process
# Arrancar bot corregido
python C:\Users\juanm\Documents\Github\INFRAESTRUCTURA\scripts\telegram_bot_pc.py
En Telegram:
/starto/menu→ Menú principal- "🔴 Apagar PC" → AHORA pide confirmación
- "✅ SÍ, apagar" → Ejecuta y verifica automáticamente en 30s
- "🟢 Encender PC" → Ejecuta y verifica automáticamente en ~90-135s
- "📊 Estado PC" → Ping manual (sin cambios)
Pendientes
- Crear tarea programada para arrancar el bot al iniciar Windows
- Añadir logging a archivo (
telegram_bot_pc.log) - Decidir sobre autologon (ver
FIX_PROBLEMA_AUTOLOGON_USUARIO_NUEVO.md) - Script de verificación de configuración:
check_autologon_status.ps1