#!/usr/bin/env python3 """ Telegram Trade Bot - SECURE Command-based Only responds to YOUR commands in YOUR chat """ import os import requests from telegram import Update from telegram.ext import Application, CommandHandler, ContextTypes # Configuration TELEGRAM_BOT_TOKEN = os.getenv('TELEGRAM_BOT_TOKEN') N8N_WEBHOOK_URL = os.getenv('N8N_WEBHOOK_URL') ALLOWED_CHAT_ID = int(os.getenv('TELEGRAM_CHAT_ID', '579304651')) async def trade_command(update: Update, context: ContextTypes.DEFAULT_TYPE): """Handle trade commands like /buySOL, /sellBTC, etc.""" # Only process from YOUR chat if update.message.chat_id != ALLOWED_CHAT_ID: await update.message.reply_text("āŒ Unauthorized") return # Extract command (remove the /) command = update.message.text[1:].lower() # e.g., "buysol" # Parse action and symbol if command.startswith('buy'): action = 'buy' symbol = command[3:] # e.g., "sol" elif command.startswith('sell'): action = 'sell' symbol = command[4:] # e.g., "btc" else: await update.message.reply_text("ā“ Unknown command") return message = f"{action} {symbol}" print(f"šŸ“Ø Command: {message}", flush=True) # Forward to n8n webhook - send as plain text body like TradingView does try: print(f"šŸ“¤ Sending: {message}", flush=True) response = requests.post( N8N_WEBHOOK_URL, data=message, # Plain text, not JSON headers={'Content-Type': 'text/plain'}, timeout=10 ) print(f"šŸ“„ Response status: {response.status_code}", flush=True) print(f"šŸ“„ Response body: {response.text[:200]}", flush=True) if response.ok: print(f"āœ… Sent: {message}", flush=True) await update.message.reply_text( f"šŸ¤– {action.upper()} {symbol.upper()}\n" f"āœ… Trade command sent!" ) else: print(f"āŒ Error: {response.status_code}", flush=True) await update.message.reply_text(f"āŒ Error: {response.status_code}") except Exception as e: print(f"āŒ Error: {e}", flush=True) await update.message.reply_text(f"āŒ Error: {str(e)}") def main(): """Start the bot""" print(f"šŸš€ Telegram Trade Bot Starting...", flush=True) print(f"šŸ“± Allowed Chat ID: {ALLOWED_CHAT_ID}", flush=True) print(f"šŸ”— Webhook: {N8N_WEBHOOK_URL}", flush=True) print(f"\nāœ… Commands:", flush=True) print(f" /buySOL, /sellSOL", flush=True) print(f" /buyBTC, /sellBTC", flush=True) print(f" /buyETH, /sellETH", flush=True) # Create application application = Application.builder().token(TELEGRAM_BOT_TOKEN).build() # Add command handlers application.add_handler(CommandHandler("buySOL", trade_command)) application.add_handler(CommandHandler("sellSOL", trade_command)) application.add_handler(CommandHandler("buyBTC", trade_command)) application.add_handler(CommandHandler("sellBTC", trade_command)) application.add_handler(CommandHandler("buyETH", trade_command)) application.add_handler(CommandHandler("sellETH", trade_command)) # Start polling print("\nšŸ¤– Bot ready! Send commands to your Telegram.\n", flush=True) application.run_polling(allowed_updates=Update.ALL_TYPES) if __name__ == '__main__': main()