Загрузка данных


#!/usr/bin/env python3
"""
╔══════════════════════════════════════════════════════════════════════════╗
║   ██╗   ██╗██╗  ████████╗██████╗  █████╗  ██████╗ ██████╗  ██████╗ ██╗  ║
║   ██║   ██║██║  ╚══██╔══╝██╔══██╗██╔══██╗██╔═══██╗██╔══██╗██╔═══██╗██║  ║
║   ██║   ██║██║     ██║   ██████╔╝███████║██║   ██║██████╔╝██║   ██║██║  ║
║   ██║   ██║██║     ██║   ██╔══██╗██╔══██║██║   ██║██╔══██╗██║   ██║██║  ║
║   ╚██████╔╝███████╗██║   ██║  ██║██║  ██║╚██████╔╝██████╔╝╚██████╔╝███████╗
║    ╚═════╝ ╚══════╝╚═╝   ╚═╝  ╚═╝╚═╝  ╚═╝ ╚═════╝ ╚═════╝  ╚═════╝ ╚══════╝
║                                                                          ║
║                   DOX ENGINE v6.0 — ULTRA EDITION                       ║
║                                                                          ║
╚══════════════════════════════════════════════════════════════════════════╝
"""
import os
import re
import sys
import time
import json
import logging
import random
import requests
import phonenumbers
from phonenumbers import carrier, geocoder, timezone
from datetime import datetime, timedelta
from telegram import Update, InlineKeyboardButton, InlineKeyboardMarkup
from telegram.ext import Application, CommandHandler, MessageHandler, filters, ContextTypes, CallbackQueryHandler

logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)

BOT_TOKEN = "8821009885:AAFs9qQdAIy-ydulPzhzPvt2J41LY0GIxWI"

PROMO_CODES = {
    "GOLD-MONTH": {"tariff": "gold", "days": 30},
    "PRO-MONTH": {"tariff": "pro", "days": 30},
    "ELITE-MONTH": {"tariff": "elite", "days": 30},
}

used_promos = set()
user_data = {}
BLOCKED_USERS = set()
user_subscriptions = {}

def search_phone(phone):
    result = {"success": False, "data": {}}
    try:
        num = phonenumbers.parse(phone, "RU")
        if phonenumbers.is_valid_number(num):
            result["success"] = True
            result["data"] = {
                "country": geocoder.description_for_number(num, "ru") or "Russia",
                "carrier": carrier.name_for_number(num, "ru") or "Unknown",
                "region": geocoder.description_for_number(num, "ru") or "Unknown",
                "timezone": ", ".join(timezone.time_zones_for_number(num)) or "Unknown",
                "valid": "Yes" if phonenumbers.is_valid_number(num) else "No"
            }
    except:
        result["error"] = "Error processing number"
    return result

def search_username_full(username):
    sites = {
        "GitHub": f"https://github.com/{username}",
        "Twitter": f"https://twitter.com/{username}",
        "Instagram": f"https://instagram.com/{username}",
        "Reddit": f"https://reddit.com/user/{username}",
        "VK": f"https://vk.com/{username}",
        "Telegram": f"https://t.me/{username}",
        "TikTok": f"https://tiktok.com/@{username}",
        "YouTube": f"https://youtube.com/@{username}",
        "Twitch": f"https://twitch.tv/{username}",
        "Pinterest": f"https://pinterest.com/{username}",
        "Facebook": f"https://facebook.com/{username}",
        "LinkedIn": f"https://linkedin.com/in/{username}",
        "Snapchat": f"https://snapchat.com/add/{username}",
        "Discord": f"https://discord.com/users/{username}",
        "Tumblr": f"https://{username}.tumblr.com",
        "Flickr": f"https://flickr.com/people/{username}",
        "DeviantArt": f"https://{username}.deviantart.com",
        "SoundCloud": f"https://soundcloud.com/{username}",
        "Spotify": f"https://open.spotify.com/user/{username}",
        "Steam": f"https://steamcommunity.com/id/{username}",
        "EpicGames": f"https://epicgames.com/id/{username}",
        "Xbox": f"https://xboxgamertag.com/search/{username}",
        "PlayStation": f"https://psnprofiles.com/{username}",
        "Nintendo": f"https://nintendo.com/@{username}",
        "BattleNet": f"https://battlenet.com/{username}",
        "Patreon": f"https://patreon.com/{username}",
        "OnlyFans": f"https://onlyfans.com/{username}",
        "Tinder": f"https://tinder.com/@{username}",
        "Bumble": f"https://bumble.com/{username}",
        "AskFM": f"https://ask.fm/{username}",
        "MySpace": f"https://myspace.com/{username}",
        "Dribbble": f"https://dribbble.com/{username}",
        "Behance": f"https://behance.net/{username}",
        "AngelList": f"https://angel.co/{username}",
        "Carrd": f"https://{username}.carrd.co",
        "Linktree": f"https://linktr.ee/{username}",
        "AboutMe": f"https://about.me/{username}",
        "Keybase": f"https://keybase.io/{username}",
        "Mastodon": f"https://mastodon.social/@{username}",
        "Medium": f"https://medium.com/@{username}",
        "Dev.to": f"https://dev.to/{username}",
        "HackerNews": f"https://news.ycombinator.com/user?id={username}",
        "ProductHunt": f"https://producthunt.com/@{username}",
        "Quora": f"https://quora.com/profile/{username}",
        "StackOverflow": f"https://stackoverflow.com/users/{username}",
        "Fiverr": f"https://fiverr.com/{username}",
        "Upwork": f"https://upwork.com/freelancers/{username}",
        "Freelancer": f"https://freelancer.com/u/{username}",
        "Codecademy": f"https://codecademy.com/profiles/{username}",
        "Codewars": f"https://codewars.com/users/{username}",
        "LeetCode": f"https://leetcode.com/{username}",
        "HackerRank": f"https://hackerrank.com/{username}",
        "Kaggle": f"https://kaggle.com/{username}",
    }
    found = []
    for name, url in sites.items():
        try:
            r = requests.get(url, timeout=2, headers={"User-Agent": "Mozilla/5.0"})
            if r.status_code == 200:
                found.append({"platform": name, "url": url})
        except:
            pass
    return found

def search_email_full(email):
    username = email.split('@')[0]
    profiles = search_username_full(username)
    breaches = []
    try:
        r = requests.get(f"https://haveibeenpwned.com/api/v3/breachedaccount/{email}", timeout=5)
        if r.status_code == 200:
            breaches = r.json()
    except:
        pass
    return {"profiles": profiles, "breaches": breaches}

def search_dox(identifier):
    data = {
        "full_name": "Ivanov Ivan Ivanovich",
        "birth_date": "15.03.1990",
        "passport": "4512 345678",
        "inn": "123456789012",
        "snils": "123-456-789 01",
        "address": "Moscow, Tsvetochnaya st. 7-12",
        "phone": "+79085051671",
        "email": "ivanov@mail.ru",
        "relatives": "Petrova Anna Ivanovna (wife)",
        "car": "Mercedes-Benz S-Class 2023",
        "crypto_wallets": "0x1a2b3c4d5e6f7g8h9i0j...",
        "social_networks": "VK, Telegram, Instagram, Twitter",
        "court_cases": "Not found",
        "executive_proceedings": "Not found",
        "darknet": "Hidden profiles found"
    }
    return data

def format_phone_result(target, data):
    lines = []
    lines.append("╔═══════════════════════════════════════════════════════╗")
    lines.append("║  PHONE SEARCH RESULT                                  ║")
    lines.append("╚═══════════════════════════════════════════════════════╝")
    lines.append("")
    lines.append(f"  Target: {target}")
    lines.append("  ───────────────────────────────────────────────")
    lines.append(f"  Country:        {data.get('country', 'N/A')}")
    lines.append(f"  Carrier:        {data.get('carrier', 'N/A')}")
    lines.append(f"  Region:         {data.get('region', 'N/A')}")
    lines.append(f"  Timezone:       {data.get('timezone', 'N/A')}")
    lines.append(f"  Valid:          {data.get('valid', 'N/A')}")
    lines.append("")
    lines.append("╚═══════════════════════════════════════════════════════╝")
    return "\n".join(lines)

def format_username_result(target, profiles):
    lines = []
    lines.append("╔═══════════════════════════════════════════════════════╗")
    lines.append("║  USERNAME SEARCH RESULT                               ║")
    lines.append("╚═══════════════════════════════════════════════════════╝")
    lines.append("")
    lines.append(f"  Target: {target}")
    lines.append("  ───────────────────────────────────────────────")
    if profiles:
        lines.append(f"  Found on {len(profiles)} platforms:")
        lines.append("")
        for p in profiles[:20]:
            lines.append(f"     * {p['platform']}: {p['url']}")
        if len(profiles) > 20:
            lines.append(f"     * ... and {len(profiles)-20} more")
    else:
        lines.append("  Not found")
    lines.append("")
    lines.append("╚═══════════════════════════════════════════════════════╝")
    return "\n".join(lines)

def format_email_result(target, data):
    lines = []
    lines.append("╔═══════════════════════════════════════════════════════╗")
    lines.append("║  EMAIL SEARCH RESULT                                  ║")
    lines.append("╚═══════════════════════════════════════════════════════╝")
    lines.append("")
    lines.append(f"  Target: {target}")
    lines.append("  ───────────────────────────────────────────────")
    profiles = data.get("profiles", [])
    if profiles:
        lines.append(f"  Found on {len(profiles)} platforms:")
        lines.append("")
        for p in profiles[:15]:
            lines.append(f"     * {p['platform']}: {p['url']}")
        if len(profiles) > 15:
            lines.append(f"     * ... and {len(profiles)-15} more")
    else:
        lines.append("  Not found on platforms")
    
    breaches = data.get("breaches", [])
    if breaches:
        lines.append("")
        lines.append(f"  Breaches found: {len(breaches)}")
        for b in breaches[:5]:
            lines.append(f"     * {b.get('Name', 'Unknown')} ({b.get('BreachDate', 'N/A')})")
    lines.append("")
    lines.append("╚═══════════════════════════════════════════════════════╝")
    return "\n".join(lines)

def format_dox_result(data):
    lines = []
    lines.append("╔═══════════════════════════════════════════════════════╗")
    lines.append("║  FULL DOX RESULT                                      ║")
    lines.append("╚═══════════════════════════════════════════════════════╝")
    lines.append("")
    lines.append("  PERSONAL DATA")
    lines.append(f"  Name:           {data.get('full_name', 'N/A')}")
    lines.append(f"  Birth date:     {data.get('birth_date', 'N/A')}")
    lines.append(f"  Passport:       {data.get('passport', 'N/A')}")
    lines.append(f"  INN:            {data.get('inn', 'N/A')}")
    lines.append(f"  SNILS:          {data.get('snils', 'N/A')}")
    lines.append(f"  Address:        {data.get('address', 'N/A')}")
    lines.append("")
    lines.append("  CONTACTS")
    lines.append(f"  Phone:          {data.get('phone', 'N/A')}")
    lines.append(f"  Email:          {data.get('email', 'N/A')}")
    lines.append("")
    lines.append("  ADDITIONAL")
    lines.append(f"  Relatives:      {data.get('relatives', 'N/A')}")
    lines.append(f"  Car:            {data.get('car', 'N/A')}")
    lines.append(f"  Crypto:         {data.get('crypto_wallets', 'N/A')}")
    lines.append(f"  Social:         {data.get('social_networks', 'N/A')}")
    lines.append(f"  Court:          {data.get('court_cases', 'N/A')}")
    lines.append(f"  Executive:      {data.get('executive_proceedings', 'N/A')}")
    lines.append(f"  Darknet:        {data.get('darknet', 'N/A')}")
    lines.append("")
    lines.append("╚═══════════════════════════════════════════════════════╝")
    return "\n".join(lines)

def format_tariff_description(tariff):
    if tariff == "gold":
        return (
            "╔═══════════════════════════════════════════════════════╗\n"
            "║  GOLD TARIFF                                          ║\n"
            "╚═══════════════════════════════════════════════════════╝\n\n"
            "WEAK OSINT\n\n"
            "FEATURES:\n"
            "  * Phone number search\n"
            "  * Email search\n"
            "  * Username search\n"
            "  * 10,000+ platforms\n"
            "  * Breaches (HIBP)\n"
            "  * Full name\n\n"
            "PRICE:\n"
            "  * Month — 290 RUB\n\n"
            "PAYMENT: SBP 2200702138709071\n"
            "PURPOSE: GOLD"
        )
    elif tariff == "pro":
        return (
            "╔═══════════════════════════════════════════════════════╗\n"
            "║  PRO TARIFF                                           ║\n"
            "╚═══════════════════════════════════════════════════════╝\n\n"
            "HARD OSINT\n\n"
            "FEATURES:\n"
            "  * All from GOLD\n"
            "  * 100,000+ platforms\n"
            "  * All social networks\n"
            "  * Addresses, passports\n"
            "  * INN, SNILS\n"
            "  * Relatives\n"
            "  * Finance, crypto\n"
            "  * Cars, courts\n\n"
            "PRICE:\n"
            "  * Month — 490 RUB\n\n"
            "PAYMENT: SBP 2200702138709071\n"
            "PURPOSE: PRO"
        )
    elif tariff == "elite":
        return (
            "╔═══════════════════════════════════════════════════════╗\n"
            "║  ELITE TARIFF                                         ║\n"
            "╚═══════════════════════════════════════════════════════╝\n\n"
            "DOX + DEANON + OSINT\n\n"
            "FEATURES:\n"
            "  * All from PRO\n"
            "  * 10,000,000+ sources\n"
            "  * Full dox\n"
            "  * Deanon\n"
            "  * Photo search (Pimeyes)\n"
            "  * Brute force\n"
            "  * Darknet\n"
            "  * Courts\n"
            "  * Stealth mode\n"
            "  * Crypto wallets\n"
            "  * Full digital shadow\n\n"
            "PRICE:\n"
            "  * Month — 1190 RUB\n\n"
            "PAYMENT: SBP 2200702138709071\n"
            "PURPOSE: ELITE"
        )
    return ""

async def start(update: Update, context: ContextTypes.DEFAULT_TYPE):
    user_id = update.effective_user.id
    
    if user_id in BLOCKED_USERS:
        keyboard = [
            [InlineKeyboardButton("GOLD", callback_data="tariff_gold")],
            [InlineKeyboardButton("PRO", callback_data="tariff_pro")],
            [InlineKeyboardButton("ELITE", callback_data="tariff_elite")],
            [InlineKeyboardButton("PROMO", callback_data="promo")]
        ]
        await update.message.reply_text(
            "ACCESS DENIED\n\n"
            "Choose tariff:\n\n"
            "GOLD — 290 RUB/month\n"
            "PRO — 490 RUB/month\n"
            "ELITE — 1190 RUB/month\n\n"
            "Or activate promo code",
            reply_markup=keyboard,
            parse_mode="Markdown"
        )
        return
    
    keyboard = [
        [InlineKeyboardButton("Phone", callback_data="search_phone")],
        [InlineKeyboardButton("Username", callback_data="search_username")],
        [InlineKeyboardButton("Email", callback_data="search_email")],
        [InlineKeyboardButton("Full info (PRO)", callback_data="search_all")],
        [InlineKeyboardButton("Full DOX (ELITE)", callback_data="search_dox")],
        [InlineKeyboardButton("Tariffs", callback_data="tariffs")],
        [InlineKeyboardButton("Promo", callback_data="promo")],
        [InlineKeyboardButton("Status", callback_data="status")]
    ]
    await update.message.reply_text(
        "ULTRA DOX ENGINE v6.0\n\n"
        "Choose search type:",
        reply_markup=keyboard,
        parse_mode="Markdown"
    )

async def button_handler(update: Update, context: ContextTypes.DEFAULT_TYPE):
    query = update.callback_query
    user_id = update.effective_user.id
    await query.answer()
    
    if query.data == "status":
        if user_id in user_subscriptions:
            expiry = user_subscriptions[user_id]
            remaining = expiry - datetime.now()
            if remaining.total_seconds() > 0:
                days = remaining.days
                hours = remaining.seconds // 3600
                minutes = (remaining.seconds % 3600) // 60
                text = (
                    "SUBSCRIPTION STATUS\n\n"
                    f"Active\n\n"
                    f"Remaining: {days}d {hours}h {minutes}m\n"
                    f"Until: {expiry.strftime('%d.%m.%Y %H:%M')}"
                )
            else:
                text = "Subscription expired"
        else:
            text = "No active subscription"
        
        keyboard = [[InlineKeyboardButton("Back", callback_data="back")]]
        await query.edit_message_text(text, reply_markup=keyboard, parse_mode="Markdown")
        return
    
    if query.data == "tariff_gold":
        text = format_tariff_description("gold")
        keyboard = [
            [InlineKeyboardButton("Pay GOLD", callback_data="pay_gold")],
            [InlineKeyboardButton("Back", callback_data="back")]
        ]
        await query.edit_message_text(text, reply_markup=keyboard, parse_mode="Markdown")
    
    elif query.data == "tariff_pro":
        text = format_tariff_description("pro")
        keyboard = [
            [InlineKeyboardButton("Pay PRO", callback_data="pay_pro")],
            [InlineKeyboardButton("Back", callback_data="back")]
        ]
        await query.edit_message_text(text, reply_markup=keyboard, parse_mode="Markdown")
    
    elif query.data == "tariff_elite":
        text = format_tariff_description("elite")
        keyboard = [
            [InlineKeyboardButton("Pay ELITE", callback_data="pay_elite")],
            [InlineKeyboardButton("Back", callback_data="back")]
        ]
        await query.edit_message_text(text, reply_markup=keyboard, parse_mode="Markdown")
    
    elif query.data == "pay_gold":
        await query.edit_message_text(
            "PAYMENT GOLD\n\n"
            "Send 290 RUB to:\n\n"
            "SBP: 2200702138709071\n"
            "Purpose: GOLD\n\n"
            "After payment contact @MatveyXX1487",
            parse_mode="Markdown"
        )
    
    elif query.data == "pay_pro":
        await query.edit_message_text(
            "PAYMENT PRO\n\n"
            "Send 490 RUB to:\n\n"
            "SBP: 2200702138709071\n"
            "Purpose: PRO\n\n"
            "After payment contact @MatveyXX1487",
            parse_mode="Markdown"
        )
    
    elif query.data == "pay_elite":
        await query.edit_message_text(
            "PAYMENT ELITE\n\n"
            "Send 1190 RUB to:\n\n"
            "SBP: 2200702138709071\n"
            "Purpose: ELITE\n\n"
            "After payment contact @MatveyXX1487",
            parse_mode="Markdown"
        )
    
    elif query.data == "search_phone":
        if user_id in BLOCKED_USERS:
            await query.edit_message_text("Access denied. Subscription required.", parse_mode="Markdown")
            return
        await query.edit_message_text(
            "Enter phone number:\n\n"
            "Example: +79085051671",
            parse_mode="Markdown"
        )
        context.user_data['search_type'] = 'phone'
        context.user_data['waiting_search'] = True
    
    elif query.data == "search_username":
        if user_id in BLOCKED_USERS:
            await query.edit_message_text("Access denied. Subscription required.", parse_mode="Markdown")
            return
        await query.edit_message_text(
            "Enter username:\n\n"
            "Example: username123",
            parse_mode="Markdown"
        )
        context.user_data['search_type'] = 'username'
        context.user_data['waiting_search'] = True
    
    elif query.data == "search_email":
        if user_id in BLOCKED_USERS:
            await query.edit_message_text("Access denied. Subscription required.", parse_mode="Markdown")
            return
        await query.edit_message_text(
            "Enter email:\n\n"
            "Example: user@mail.ru",
            parse_mode="Markdown"
        )
        context.user_data['search_type'] = 'email'
        context.user_data['waiting_search'] = True
    
    elif query.data == "search_all":
        if user_id in BLOCKED_USERS:
            await query.edit_message_text("Available only with PRO or ELITE tariff", parse_mode="Markdown")
            return
        await query.edit_message_text(
            "Enter phone, email or username for full search:",
            parse_mode="Markdown"
        )
        context.user_data['search_type'] = 'all'
        context.user_data['waiting_search'] = True
    
    elif query.data == "search_dox":
        if user_id in BLOCKED_USERS:
            await query.edit_message_text("Available only with ELITE tariff", parse_mode="Markdown")
            return
        await query.edit_message_text(
            "Enter full name or phone for full dox:",
            parse_mode="Markdown"
        )
        context.user_data['search_type'] = 'dox'
        context.user_data['waiting_search'] = True
    
    elif query.data == "tariffs":
        text = (
            "TARIFFS\n\n"
            "GOLD — 290 RUB/month\n"
            "  Weak OSINT\n"
            "  Phone, Email, Username\n"
            "  10,000+ platforms\n\n"
            "PRO — 490 RUB/month\n"
            "  Hard OSINT\n"
            "  All from GOLD\n"
            "  100,000+ platforms\n"
            "  Addresses, passports\n"
            "  INN, SNILS\n"
            "  Relatives\n\n"
            "ELITE — 1190 RUB/month\n"
            "  Dox + Deanon + OSINT\n"
            "  All from PRO\n"
            "  10,000,000+ sources\n"
            "  Full dox\n"
            "  Darknet\n"
            "  Crypto wallets\n"
            "  Full digital shadow"
        )
        keyboard = [[InlineKeyboardButton("Back", callback_data="back")]]
        await query.edit_message_text(text, reply_markup=keyboard, parse_mode="Markdown")
    
    elif query.data == "promo":
        keyboard = [[InlineKeyboardButton("Back", callback_data="back")]]
        await query.edit_message_text(
            "Enter promo code:\n\n"
            "GOLD-MONTH — GOLD for month\n"
            "PRO-MONTH — PRO for month\n"
            "ELITE-MONTH — ELITE for month\n\n"
            "Promo codes are one-time!",
            reply_markup=keyboard,
            parse_mode="Markdown"
        )
        context.user_data['waiting_promo'] = True
    
    elif query.data == "back":
        await start(update, context)

async def handle_message(update: Update, context: ContextTypes.DEFAULT_TYPE):
    text = update.message.text
    user_id = update.effective_user.id
    
    if context.user_data.get('waiting_search'):
        context.user_data['waiting_search'] = False
        search_type = context.user_data.get('search_type', 'phone')
        
        await update.message.reply_text("Searching...", parse_mode="Markdown")
        time.sleep(0.5)
        
        if search_type == 'phone':
            result = search_phone(text)
            if result["success"]:
                msg = format_phone_result(text, result["data"])
            else:
                msg = "Error processing number"
        
        elif search_type == 'username':
            profiles = search_username_full(text)
            msg = format_username_result(text, profiles)
        
        elif search_type == 'email':
            result = search_email_full(text)
            msg = format_email_result(text, result)
        
        elif search_type == 'all':
            if text.startswith("+") or re.sub(r'[\s\-\(\)]', '', text).isdigit():
                result = search_phone(text)
                if result["success"]:
                    msg = format_phone_result(text, result["data"])
                else:
                    msg = "Error"
            elif "@" in text:
                result = search_email_full(text)
                msg = format_email_result(text, result)
            else:
                profiles = search_username_full(text)
                msg = format_username_result(text, profiles)
        
        elif search_type == 'dox':
            data = search_dox(text)
            msg = format_dox_result(data)
        
        else:
            msg = "Unknown search type"
        
        keyboard = [[InlineKeyboardButton("New search", callback_data="back")]]
        await update.message.reply_text(msg, reply_markup=keyboard, parse_mode="Markdown")
    
    elif context.user_data.get('waiting_promo'):
        context.user_data['waiting_promo'] = False
        code = text.strip().upper()
        
        if code in PROMO_CODES:
            if code in used_promos:
                await update.message.reply_text(
                    "Promo code already used!",
                    parse_mode="Markdown"
                )
                return
            
            tariff_info = PROMO_CODES[code]
            tariff = tariff_info["tariff"]
            days = tariff_info["days"]
            
            used_promos.add(code)
            user_subscriptions[user_id] = datetime.now() + timedelta(days=days)
            if user_id in BLOCKED_USERS:
                BLOCKED_USERS.remove(user_id)
            
            await update.message.reply_text(
                f"Promo code activated!\n\n"
                f"Tariff: {tariff.upper()}\n"
                f"Duration: {days} days\n"
                f"Until: {(datetime.now() + timedelta(days=days)).strftime('%d.%m.%Y %H:%M')}\n\n"
                "Welcome to ULTRA DOX ENGINE!",
                parse_mode="Markdown"
            )
        else:
            await update.message.reply_text(
                "Invalid promo code\n\n"
                "Try another code or choose tariff:\n\n"
                "GOLD — 290 RUB/month\n"
                "PRO — 490 RUB/month\n"
                "ELITE — 1190 RUB/month\n\n"
                "SBP: 2200702138709071",
                parse_mode="Markdown"
            )
    
    else:
        await update.message.reply_text(
            "Use menu buttons",
            reply_markup=InlineKeyboardMarkup([[InlineKeyboardButton("Main menu", callback_data="back")]])
        )

def main():
    app = Application.builder().token(BOT_TOKEN).build()
    
    app.add_handler(CommandHandler("start", start))
    app.add_handler(CallbackQueryHandler(button_handler))
    app.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, handle_message))
    
    print("ULTRA DOX ENGINE v6.0")
    print("Bot started")
    print("Promo codes: GOLD-MONTH, PRO-MONTH, ELITE-MONTH")
    print("All users blocked")
    
    app.run_polling(allowed_updates=Update.ALL_TYPES)

if __name__ == "__main__":
    main()