diff --git a/scripts/telegram_bot_pc.py b/scripts/telegram_bot_pc.py
new file mode 100644
index 0000000..8f0f183
--- /dev/null
+++ b/scripts/telegram_bot_pc.py
@@ -0,0 +1,203 @@
+"""
+Bot de Telegram para controlar el PC remotamente.
+
+Comandos:
+- /apagar - Apaga PC completo (luces + regleta)
+- /encender - Enciende PC (regleta + WoL)
+- /estado - Verifica si el PC está encendido
+- /menu - Muestra menú con botones
+
+Uso:
+ python telegram_bot_pc.py
+"""
+import os
+import sys
+import requests
+import subprocess
+from dotenv import load_dotenv
+from telegram import Update, InlineKeyboardButton, InlineKeyboardMarkup
+from telegram.ext import Application, CommandHandler, CallbackQueryHandler, ContextTypes
+
+# Cargar .env
+dotenv_path = r"C:\Users\juanm\Documents\GitHub\biblioteca_negocio_prolongo\.env"
+load_dotenv(dotenv_path)
+
+# Configuración
+TELEGRAM_BOT_TOKEN = os.getenv("TELEGRAM_BOT_PC_TOKEN")
+TELEGRAM_USER_ID = os.getenv("TELEGRAM_USER_ID") # ID de Juanjo
+HA_WEBHOOK_APAGAR = "http://185.187.169.109:8123/api/webhook/apagar-pc-juanjo"
+HA_WEBHOOK_ENCENDER = "http://185.187.169.109:8123/api/webhook/encender-pc-juanjo"
+PC_IP = "192.168.1.239" # IP del PC sobremesa
+
+async def start(update: Update, context: ContextTypes.DEFAULT_TYPE):
+ """Comando /start"""
+ await menu(update, context)
+
+async def menu(update: Update, context: ContextTypes.DEFAULT_TYPE):
+ """Muestra el menú principal"""
+ keyboard = [
+ [
+ InlineKeyboardButton("🔴 Apagar PC", callback_data='apagar'),
+ InlineKeyboardButton("🟢 Encender PC", callback_data='encender')
+ ],
+ [
+ InlineKeyboardButton("📊 Estado PC", callback_data='estado')
+ ]
+ ]
+ reply_markup = InlineKeyboardMarkup(keyboard)
+
+ mensaje = (
+ "🖥️ Control Remoto PC\n\n"
+ "Elige una opción:"
+ )
+
+ if update.callback_query:
+ await update.callback_query.message.edit_text(
+ mensaje,
+ parse_mode='HTML',
+ reply_markup=reply_markup
+ )
+ else:
+ await update.message.reply_text(
+ mensaje,
+ parse_mode='HTML',
+ reply_markup=reply_markup
+ )
+
+async def apagar_pc(update: Update, context: ContextTypes.DEFAULT_TYPE):
+ """Apaga el PC"""
+ query = update.callback_query if update.callback_query else None
+
+ if query:
+ await query.answer("🔴 Apagando PC...")
+ msg = await query.message.reply_text("🔴 Apagando PC...")
+ else:
+ msg = await update.message.reply_text("🔴 Apagando PC...")
+
+ try:
+ response = requests.post(HA_WEBHOOK_APAGAR, timeout=10)
+ if response.status_code == 200:
+ mensaje = (
+ "✅ PC apagado correctamente\n\n"
+ "🔹 Luces apagadas: barras, cuartillo\n"
+ "🔹 Regleta: apagada\n"
+ "🔹 PC: sin corriente"
+ )
+ else:
+ mensaje = f"❌ Error al apagar: HTTP {response.status_code}"
+ except Exception as e:
+ mensaje = f"❌ Error: {e}"
+
+ await msg.edit_text(mensaje, parse_mode='HTML')
+
+async def encender_pc(update: Update, context: ContextTypes.DEFAULT_TYPE):
+ """Enciende el PC"""
+ query = update.callback_query if update.callback_query else None
+
+ if query:
+ await query.answer("🟢 Encendiendo PC...")
+ msg = await query.message.reply_text("🟢 Encendiendo PC...")
+ else:
+ msg = await update.message.reply_text("🟢 Encendiendo PC...")
+
+ try:
+ response = requests.post(HA_WEBHOOK_ENCENDER, timeout=10)
+ if response.status_code == 200:
+ mensaje = (
+ "✅ Proceso de encendido iniciado\n\n"
+ "🔹 Regleta: encendida\n"
+ "🔹 Esperando 60 segundos...\n"
+ "🔹 Wake-on-LAN enviado\n\n"
+ "⏳ El PC debería estar listo en ~2 minutos.\n"
+ "Usa /estado para verificar."
+ )
+ else:
+ mensaje = f"❌ Error al encender: HTTP {response.status_code}"
+ except Exception as e:
+ mensaje = f"❌ Error: {e}"
+
+ await msg.edit_text(mensaje, parse_mode='HTML')
+
+async def estado_pc(update: Update, context: ContextTypes.DEFAULT_TYPE):
+ """Verifica si el PC está encendido"""
+ query = update.callback_query if update.callback_query else None
+
+ if query:
+ await query.answer("📊 Verificando...")
+ msg = await query.message.reply_text("📊 Verificando estado...")
+ else:
+ msg = await update.message.reply_text("📊 Verificando estado...")
+
+ # Ping al PC usando PowerShell (más confiable en Windows)
+ try:
+ result = subprocess.run(
+ ["powershell", "-Command", f"Test-Connection -ComputerName {PC_IP} -Count 1 -Quiet"],
+ capture_output=True,
+ timeout=5,
+ text=True
+ )
+
+ online = "True" in result.stdout
+
+ if online:
+ mensaje = (
+ "✅ PC ENCENDIDO\n\n"
+ f"🔹 IP: {PC_IP}\n"
+ "🔹 Responde a ping\n"
+ "🔹 Estado: Online"
+ )
+ else:
+ mensaje = (
+ "🔴 PC APAGADO\n\n"
+ f"🔹 IP: {PC_IP}\n"
+ "🔹 No responde a ping\n"
+ "🔹 Estado: Offline"
+ )
+ except subprocess.TimeoutExpired:
+ mensaje = (
+ "⚠️ TIMEOUT\n\n"
+ f"🔹 IP: {PC_IP}\n"
+ "🔹 No responde (>5s)\n"
+ "🔹 Estado: Probablemente apagado"
+ )
+ except Exception as e:
+ mensaje = f"❌ Error al verificar estado: {e}"
+
+ await msg.edit_text(mensaje, parse_mode='HTML')
+
+async def button_handler(update: Update, context: ContextTypes.DEFAULT_TYPE):
+ """Maneja los botones del menú"""
+ query = update.callback_query
+
+ if query.data == 'apagar':
+ await apagar_pc(update, context)
+ elif query.data == 'encender':
+ await encender_pc(update, context)
+ elif query.data == 'estado':
+ await estado_pc(update, context)
+
+def main():
+ """Arranca el bot"""
+ if not TELEGRAM_BOT_TOKEN:
+ print("ERROR: Falta TELEGRAM_BOT_PC_TOKEN en .env")
+ return
+
+ print("Iniciando bot de Telegram para control de PC...")
+
+ app = Application.builder().token(TELEGRAM_BOT_TOKEN).build()
+
+ # Comandos
+ app.add_handler(CommandHandler("start", start))
+ app.add_handler(CommandHandler("menu", menu))
+ app.add_handler(CommandHandler("apagar", apagar_pc))
+ app.add_handler(CommandHandler("encender", encender_pc))
+ app.add_handler(CommandHandler("estado", estado_pc))
+
+ # Botones
+ app.add_handler(CallbackQueryHandler(button_handler))
+
+ print("Bot iniciado. Presiona Ctrl+C para detener.")
+ app.run_polling()
+
+if __name__ == "__main__":
+ main()