from fastapi import FastAPI, Request from telegram import Update from telegram.ext import ( ApplicationBuilder, CommandHandler, MessageHandler, ContextTypes, filters ) import asyncio import os # ==================================================== # 🔐 TOKEN DE TELEGRAM # ==================================================== TOKEN = "8280672304:AAHaHAaxNtBNothIRSFmDzzq_TLDWRpV8bU" # ==================================================== # 🧩 CONFIGURACIÓN DE MODO # Usa "polling" para desarrollo o "webhook" para producción # ==================================================== USE_WEBHOOK = False # Cambia a True cuando despliegues en servidor WEBHOOK_URL = "https://tu-dominio.com/webhook" # tu dominio con HTTPS # ==================================================== # 🤖 HANDLERS DE COMANDOS # ==================================================== async def start(update: Update, context: ContextTypes.DEFAULT_TYPE): """Comando /start""" await update.message.reply_text("¡Hola! Soy tu bot 🤖\nUsa /help para ver mis comandos.") async def help_command(update: Update, context: ContextTypes.DEFAULT_TYPE): """Comando /help""" help_text = ( "📜 Comandos disponibles:\n" "/start - Inicia el bot\n" "/help - Muestra esta ayuda\n" "/info - Información sobre el bot\n" "/echo - Te repito lo que escribas" ) await update.message.reply_text(help_text) async def info_command(update: Update, context: ContextTypes.DEFAULT_TYPE): """Comando /info""" await update.message.reply_text("Soy un bot creado con Python y FastAPI 🚀") async def echo_command(update: Update, context: ContextTypes.DEFAULT_TYPE): """Comando /echo""" text = " ".join(context.args) if not text: await update.message.reply_text("Por favor, escribe algo luego de /echo 🗣️") else: await update.message.reply_text(f"Echo: {text}") async def echo(update: Update, context: ContextTypes.DEFAULT_TYPE): """Respuesta automática a cualquier texto""" text = update.message.text await update.message.reply_text(f"Recibí tu mensaje: {text}") # ==================================================== # ⚙️ CONFIGURACIÓN DEL BOT # ==================================================== def build_app(): app = ApplicationBuilder().token(TOKEN).build() # Comandos app.add_handler(CommandHandler("start", start)) app.add_handler(CommandHandler("help", help_command)) app.add_handler(CommandHandler("info", info_command)) app.add_handler(CommandHandler("echo", echo_command)) # Mensajes de texto genéricos app.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, echo)) return app # ==================================================== # 🧩 MODO POLLING (DESARROLLO) # ==================================================== def run_polling(): app = build_app() print("🤖 Bot ejecutándose con polling...") app.run_polling() # ==================================================== # 🌐 MODO WEBHOOK (PRODUCCIÓN) # ==================================================== fastapi_app = FastAPI() telegram_app = build_app() @fastapi_app.post("/webhook") async def webhook(request: Request): """Recibe mensajes directamente desde Telegram vía Webhook""" data = await request.json() update = Update.de_json(data, telegram_app.bot) await telegram_app.process_update(update) return {"ok": True} async def setup_webhook(): """Configura el webhook con Telegram""" await telegram_app.bot.set_webhook(WEBHOOK_URL) print(f"Webhook configurado en: {WEBHOOK_URL}") # ==================================================== # 🏁 MAIN # ==================================================== if __name__ == "__main__": if USE_WEBHOOK: import uvicorn asyncio.run(setup_webhook()) uvicorn.run(fastapi_app, host="0.0.0.0", port=int(os.environ.get("PORT", 8000))) else: run_polling()