from telegram import (
    Update,
    InlineKeyboardButton,
    InlineKeyboardMarkup,
    InlineQueryResultArticle,
    InputTextMessageContent,
)
from telegram.ext import Application, CallbackQueryHandler, ContextTypes, InlineQueryHandler
import logging
import sys

if hasattr(sys.stdout, "reconfigure"):
    sys.stdout.reconfigure(encoding="utf-8")
    sys.stderr.reconfigure(encoding="utf-8")

TOKEN = "8376664289:AAGh7eRkDPQ1hxRy5PtMqSpp_fVlyMHjrXY"  # <-- توکن ربات رو اینجا بذار

logging.basicConfig(
    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
    level=logging.INFO,
    stream=sys.stdout,
)
logger = logging.getLogger(__name__)

HELP_TEXTS = {
    "clock": "🕒 ساعت اسم\n\n.ساعت روشن\nبا زدن این دستور ساعت کنار اسم شما فعال میشود\n\n.ساعت خاموش\nبا زدن این دستور ساعت از کنار اسم شما میرود",

    "bio": "🕒 ساعت بیو\n\n.ساعت بیو روشن\nبا زدن این دستور ساعت داخل بیو شما فعال میشود\n\n.ساعت بیو خاموش\nبا زدن این دستور ساعت از بیو شما میرود",

    "spam": "📨 اسپم\n\n.اسپم [تعداد] [متن]\nبا زدن این دستور متن مورد نظر به تعداد دلخواه ارسال میشود",

    "pvlock": "🔒 قفل پیوی\n\n.قفل پیوی روشن\nبا زدن این دستور پیوی شما قفل می شود و پیام های  جدی حذف\n\n.قفل پیوی خاموش\nبا زدن این دستور پیوی شما باز میوشد پیام ها حذف نمیشوند",

    "media": "📸 مدیا تایم\n\n.مدیا تایم روشن\nبا زدن این دستور عکس‌های زماندار ذخیره میشوند\n\n.مدیا تایم خاموش\nبا زدن این دستور عکس های زماندار دانلود نمیشوند",

    "info": "📌 اطلاعات\n\n.اطلاعات\nبا زدن این دستور اطلاعات کاملی از کاربر دریافت می‌کنید",

    "english": "🇬🇧 متن انگلیسی\n\n.متن انگلیسی روشن\nتمام پیام‌های شما به انگلیسی تبدیل میشوند\n\n.متن انگلیسی خاموش\n با زدن این دستور متن انگلیسی خاموش میشود",

    "translate": "🌐 ترجمه\n\n.ترجمه\nبا ریپلای روی پیام، آن را به فارسی ترجمه می‌کند",

    "video2sticker": "📹 فیلم به استیکر\n\n.فیلم به استیکر\nبا ریپلای روی فیلم، آن را به استیکر متحرک تبدیل می‌کند",

    "sticker": "🎨 عکس به استیکر\n\n.عکس به استیکر\nبا ریپلای روی عکس، آن را به استیکر تبدیل می‌کند",

    "gif": "🎬 ساخت گیف\n\n.ساخت گیف\nبا ریپلای روی فیلم یا عکس، یک گیف ایجاد می‌کند",

    "check": "📱 چک شماره\n\n.چک شماره [شماره]\nاطلاعات کامل یک شماره تلفن را نمایش می‌دهد",

    "clone": "👤 کپی پروفایل\n\n.کپی پروفایل\nبا ریپلای روی کاربر، پروفایل او را کپی می‌کند",

    "forcejoin": "📌 عضویت اجباری\n\n.تنظیم عضویت اجباری [لینک]\nبا زدن این دستور لینک عضویت اجباری ثبت میشود\n\n.حذف عضویت اجباری [لینک]\nبا زدن این دستور لینک ثبت‌شده حذف میشود\n\n.عضویت اجباری روشن\nبا زدن این دستور عضویت اجباری روشن میشه\n\n.عضویت اجباری خاموش\nبا زدن این دستور عضویت اجباری خاموش میشود\n\n.لیست عضویت اجباری\nبا زدن این دستور لینک های ثبت شده رامیبینید",

    "leavechannel": "📤 ترک کانال\n\n.ترک کانال [عدد]\nمثال: .ترک کانال 10\nبا زدن این دستور از تعداد مشخصی کانال ترک میزنید",

    "leavegroup": "🚪 ترک گروه\n\n.ترک گروه [عدد]\nمثال: .ترک گروه 10\nبا زدن این دستور از تعداد مشخصی گروه ترک میزنید",

    # ⚠️ این متن در فایل اصلی ناقص/بریده بود؛ اگر متن کامل رو داری بفرست تا جایگزین کنم
    "attack": "💢 اتکر فوش\n\n.اتک فوش [متن]\nبا زدن این دستور یک فحش به لیست فحش‌های شما اضافه می‌شود\n\n.اتک فوش فایل\nبا ریپلای روی فایل، تمام فحش‌های داخل فایل به لیست شما اضافه می‌شود\n\n.اتک لیست فوش\nبا زدن این دستور تمام فحش‌های ذخیره‌شدهٔ شما نمایش داده می‌شود\n\n.اتک حذف فوش [آیدی]\nبا زدن این دستور فحش موردنظر با آیدی مشخص حذف می‌شود\n\n.اتک پاک فوش\nبا زدن این دستور تمام فحش‌های ذخیره‌شدهٔ شما پاک می‌شود\n\n.اتک فوش رندوم\nبا زدن این دستور یک فحش تصادفی از لیست شما ارسال می‌شود\n\n.اتک add @user\nبا زدن این دستور کاربر موردنظر به لیست اتکر اضافه می‌شود\n\n.اتک del @user\nبا زدن این دستور کاربر موردنظر از لیست اتکر حذف می‌شود\n\n.اتک list\nبا زدن این دستور لیست کامل کاربرانی که اتکر روی آن‌ها فعال است نمایش داده می‌شود\n\n.اتک clean\nبا زدن این دستور تمام کاربران داخل لیست اتکر پاک می‌شوند\n\n.اتک start\nبا زدن این دستور اتکر فوش روی تمام کاربران لیست شروع می‌شود\n\n.اتک stop\nبا زدن این دستور اتکر فوش متوقف می‌شود\n\n.اتک timer [ثانیه]\nبا زدن این دستور فاصلهٔ بین ارسال فحش‌ها تنظیم می‌شود\n\n.اتک emoji [ایموجی]\nبا زدن این دستور ایموجی لینک‌دار اتکر تغییر می‌کند",

    "savegif": "💾 سیو گیف\n\n.سیو گیف [ریپلای]\nذخیره گیف‌های یک‌بارمصرف",

    "screenshot": "📸 اسکرین‌شات\n\n.اسکرین شات\n.اسکرین شات [عدد]\nگرفتن اسکرین‌شات از چت",

    "oncevoice": "🎤 ویس یک بار مصرف\n\n.دانلود ویس روشن\nذخیره ویس‌های یک‌بارمصرف\n\n.دانلود ویس خاموش\nخاموش کردن ذخیره ویس‌ها",

    "currency": "💸 ارز\n\n.قیمت ارز [اسم ارز]\nنمایش قیمت ارز به دلار و تومان\nbtc_eth_ton_usdt_bnb_sol_xrp_doge_ada_trx_not",

    "bot": "🤖 منشی\n\n.منشی روشن\nفعال شدن منشی\n\n.منشی خاموش\nخاموش شدن منشی\n\n.تنظیم متن منشی [ریپلای]\nتنظیم متن منشی\n\n.منشی حذف\nحذف متن منشی\n\n.منشی وضعیت\nنشون دادن وضعیت منشی\n\n.منشی وضعیت\nنشون دادن وضعیت منشی",

    "silence": "🔇 سکوت\n\n.سکوت[ریپلای]\nسکوت کردن کاربر\n\n.حذف سکوت[ریپلای]\nحذف سکوت کاربر\n\n.لیست سکوت\nنمایش لیست سکوت",

    "textmode": "🔤 حالت متن\n\n.بولد روشن\nفعال شدن بولد\n\n.بولد خاموش\nخاموش شدن بولد\n\n.ایتالیک روشن\nفعال شدن ایتالیک\n\n.ایتالیک خاموش\nخاموش شدن ایتالیک\n\n.اسپویلر روشن\nفعال شدن اسپویلر\n\n.اسپویلر خاموش\nخاموش شدن اسپویلر\n\n.آندرلاین روشن\nفعال شدن آندرلاین\n\n.آندرلاین خاموش\nخاموش شدن آندرلاین",

    "filter": "🚫 فیلتر کلمات\n\n.فیلتر کلمه [کلمه]\nاضافه کردن کلمه\n\n.حذف فیلتر [کلمه]\nحذف کلمه\n\n.لیست فیلتر\nنمایش لیست کلمات",

    "block": "⛔ بلاک\n\n.بلاک [ریپلای]\nبلاک کردن کاربر\n\n.انبلاک[ریپلای]\nخارج کردن از بلاک\n\n.لیست بلاک\nنمایش لیست بلاک",

    "font": "🖋 فونت متن\n\n.فونت [متن]\nارسال متن با 10 فونت زیبا\n\nمتن باید انگلیسی باشد",

    "animation": "✨ انیمیشن\n\n.عکاسی\nنمایش انیمیشن عکاسی\n\n.رقص\nنمایش انیمیشن رقص\n\n.قلب\nنمایش انیمیشن قلب",

    # ⚠️ این متن هم در فایل اصلی ناقص/بریده بود؛ اگر متن کامل رو داری بفرست تا جایگزین کنم
    "autoreact": "❤️ ری‌اکشن خودکار\n\n.ری اکشن خودکار روشن\nفعال شدن ری‌اکشن خودکار\n\n.ری اکشن خودکار خاموش\nخاموش شدن ری‌اکشن خودکار\n\n.تنظیم ری اکشن [ایموجی]\nتنظیم ایموجی ری‌اکشن",

    "calc": "🧮 ماشین حساب\n\n.ماشین حساب\nباز کردن ماشین حساب با دکمه",

    # ⚠️ متن‌های زیر placeholder هستن — اگه دستور دقیق هرکدوم فرق داره برام بفرست تا دقیق‌ترش کنم
    "tabchi": "📢 تبچی\n\n.تنظیم بنر کپی\nتنظیم بنر با ریپلای روی پیام\n\n.تبچی روشن\nروشن کردن تبچی\n\n.تبچی خاموش\nخاموش کردن تبچی\n\n.تنظیم بنر (عدد) در این چت\nتنظیم بنر برای همین گروه\n\n.تنظیم بنر (عدد) در همه گروه ها\nتنظیم بنر برای تمام گروه‌ها\n\n.حذف بنر (عدد)\nحذف بنر مورد نظر\n\n.حذف بنر (عدد) در این چت\nحذف بنر تنظیم‌شده در همین گروه\n\n.حذف بنر (عدد) از همه گروه ها\nحذف بنر از تمام گروه‌ها\n\n.حذف بنر ها از همه گروه ها\nحذف همه بنرهای ثبت‌شده\n\n.پاکسازی لیست بنر\nپاک کردن کل لیست بنرها\n\n.لیست بنر ها\nنمایش لیست کامل بنرها\n\n.کپی بنر (عدد) (تعداد پیوی) پیوی\nارسال بنر به چندین پیوی\n\n.تایم بنر (عدد) (ثانیه)\nتنظیم تایم بنر به ثانیه\n\n.آمار بنر (عدد)\nنمایش آمار بنر",

    "text2voice": "🎙 متن به ویس\n\n.ویس[متن]\nتبدیل متن وارد شده به فایل صوتی\n\nاگر روی متن هم ریپلای بزنید کار میکند",

    "logo": "🖼 لوگو\n\n.ساخت لوگو[متن]\nساخت لوگو با متن دلخواه",

    "groupcontrol": "⚙ کنترل گروه\n\n.ban @username\nبن کردن کاربر\n\n.unban @username\nرفع بن کاربر\n\n.setmute @username\nسکوت کردن کاربر\n\n.delmute @username\nرفع سکوت کاربر\n\n.addadmin @username\nافزودن ادمین\n\n.removeadmin @username\nحذف ادمین\n\n.ادمین‌ها\nنمایش لیست ادمین‌ها\n\n.pin\nسنجاق پیام (با ریپلای)\n\n.unpin\nبرداشتن سنجاق (با ریپلای)\n\n.unpinall\nحذف همه سنجاق‌ها\n\n.del\nحذف پیام (با ریپلای)\n\n.delete 10\nحذف ۱۰ پیام آخر\n\n.delallmsguser\nحذف پیام‌های یک کاربر (با ریپلای)\n\n.delethistory\nپاک کردن تاریخچه گروه\n\n.tagall متن\nتگ کردن همه اعضا",

    "delmsg": "🗑 حذف پیام\n\n.حذف پیام [عدد]\nحذف پیام به تعداد دلخواه در پیوی",

    "cheat": "🎭 تقلب\n\n.تاس[1تا6]\nآمدن تاس با عدد دلخواه\n\n.بولینگ\nافتادن همه هدف ها\n\n.بسکتبال\nافتادن توپ در سبد\n\n.فوتبال\n\nرفتن توپ توی گل\n\n.دارت\nخوردن وسط هدف\n\n توجه کنید این قابلیت در گروه کاربرد دارد در پیوی بقیه موارد حذف نمیکند",

    "autoseen": "👁 سین خودکار\n\n.سین خودکار روشن\nفعال شدن دیدن خودکار پیام‌ها\n\n.سین خودکار خاموش\nخاموش شدن سین خودکار",

    "autoreply": "💬 پاسخ خودکار\n\n.پاسخ روشن\nفعال شدن پاسخ خودکار\n\n.پاسخ خاموش\nخاموش شدن پاسخ خودکار\n\n.تنظیم پاسخ[متن]=[متن]\nتنظیم متن پاسخ خودکار\n\n.لیست پاسخ\nبا زدن این دستور لیست پاسخ هارا میبینید\n\n.حذف پاسخ[آیدی]\nبا زدن این دستور پاسخ مورد نظر حذف میشود",

    "friend": "💙 قابلیت دوست\n\n.دوست روشن\nفعال کردن قابلیت دوست\n\n.دوست خاموش\nخاموش کردن قابلیت دوست\n\n.تنظیم دوست\nاضافه کردن کاربر به لیست دوست‌ها (با ریپلای)\n\n.حذف دوست\nحذف کاربر از لیست دوست‌ها (با ریپلای)\n\n.لیست دوست\nنمایش لیست کامل دوست‌ها\n\n.تنظیم متن\nذخیره متن مخصوص کاربر (با ریپلای)\n\n.حذف متن\nحذف یک متن از لیست متن‌های کاربر با آیدی\n\n.لیست متن\nنمایش لیست متن‌های ذخیره‌شده برای کاربر",

    "enemy": "😈 دشمن\n\n.تنظیم دشمن[ریپلای]\nاضافه کردن کاربر به لیست دشمنان\n\n.لیست دشمن\nنمایش لیست دشمنان\n\n.حذف دشمن[ریپلای]\nبا زدن این دستور کاربر مورد نظر حذف میشود\n\n.تنظیم فحش[متن]\nبا زدن این دستور فحش مورد نظر اضاف میشود\n\n.حذف فحش[آیدی]\nبا زدن این دستور فحش مورد نظر پاک میشود\n\n.لیست فحش\nبا زدن این دستور لیست فحش ها را میبینید\n\n.دشمن روشن\nبا زدن این دستور دشمن خاموش میشود\n\n.دشمن خاموش\nبا زدن این دستور دشمن خاموش میشود",
}


def get_main_menu(user_id):
    keyboard = [
        [InlineKeyboardButton("🎛 پنل", callback_data=f"panel_{user_id}", style="primary")],
        [InlineKeyboardButton("🆘 پشتیبانی", callback_data=f"support_{user_id}", style="success")],
        [InlineKeyboardButton("❌ بستن پنل", callback_data=f"close_{user_id}", style="danger")],
    ]
    return InlineKeyboardMarkup(keyboard)


def get_back_button(user_id):
    btn = InlineKeyboardButton("🔙 بازگشت", callback_data=f"backpanel_{user_id}", style="danger")
    return InlineKeyboardMarkup([[btn]])


def get_panel_menu(user_id):
    buttons = [
        ("ساعت", "clock"), ("ساعت بیو", "bio"), ("اسپم", "spam"), ("قفل پیوی", "pvlock"),
        ("مدیا تایم", "media"), ("اطلاعات", "info"), ("متن انگلیسی", "english"), ("ترجمه", "translate"),
        ("فیلم به استیکر", "video2sticker"), ("عکس به استیکر", "sticker"), ("ساخت گیف", "gif"), ("چک شماره", "check"),
        ("ماشین حساب", "calc"), ("کپی پروفایل", "clone"), ("عضویت اجباری", "forcejoin"), ("ترک کانال", "leavechannel"),
        ("ترک گروه", "leavegroup"), ("اتکر", "attack"), ("سیو گیف", "savegif"), ("اسکرین شات", "screenshot"),
        ("ویس یک بار مصرف", "oncevoice"), ("ارز", "currency"), ("منشی", "bot"), ("سکوت", "silence"),
        ("حالت متن", "textmode"), ("فیلتر کلمات", "filter"), ("بلاک", "block"), ("فونت متن", "font"),
        ("انیمیشن", "animation"), ("ری اکشن خودکار", "autoreact"),
        ("تبچی", "tabchi"), ("متن به ویس", "text2voice"), ("لوگو", "logo"), ("کنترل گروه", "groupcontrol"),
        ("حذف پیام", "delmsg"), ("تقلب", "cheat"), ("سین خودکار", "autoseen"), ("پاسخ خودکار", "autoreply"),
        ("دوست", "friend"), ("دشمن", "enemy"),
    ]

    ROW_SIZE = 4
    keyboard = []
    for i in range(0, len(buttons), ROW_SIZE):
        row = [
            InlineKeyboardButton(f"{label}", callback_data=f"{key}_{user_id}", style="primary")
            for label, key in buttons[i:i + ROW_SIZE]
        ]
        keyboard.append(row)

    keyboard.append([InlineKeyboardButton("🔙 بازگشت", callback_data=f"back_{user_id}", style="danger")])
    return InlineKeyboardMarkup(keyboard)


def get_calc_keyboard(display, user_id):
    keyboard = [
        [InlineKeyboardButton("1", callback_data=f"calc_1_{user_id}", style="primary"),
         InlineKeyboardButton("2", callback_data=f"calc_2_{user_id}", style="primary"),
         InlineKeyboardButton("3", callback_data=f"calc_3_{user_id}", style="primary")],
        [InlineKeyboardButton("4", callback_data=f"calc_4_{user_id}", style="primary"),
         InlineKeyboardButton("5", callback_data=f"calc_5_{user_id}", style="primary"),
         InlineKeyboardButton("6", callback_data=f"calc_6_{user_id}", style="primary")],
        [InlineKeyboardButton("7", callback_data=f"calc_7_{user_id}", style="primary"),
         InlineKeyboardButton("8", callback_data=f"calc_8_{user_id}", style="primary"),
         InlineKeyboardButton("9", callback_data=f"calc_9_{user_id}", style="primary")],
        [InlineKeyboardButton("C", callback_data=f"calc_C_{user_id}", style="primary"),
         InlineKeyboardButton("0", callback_data=f"calc_0_{user_id}", style="primary"),
         InlineKeyboardButton("=", callback_data=f"calc_eq_{user_id}", style="primary")],
        [InlineKeyboardButton("+", callback_data=f"calc_add_{user_id}", style="primary"),
         InlineKeyboardButton("-", callback_data=f"calc_sub_{user_id}", style="primary"),
         InlineKeyboardButton("×", callback_data=f"calc_mul_{user_id}", style="primary"),
         InlineKeyboardButton("÷", callback_data=f"calc_div_{user_id}", style="primary")],
        [InlineKeyboardButton("❌ بستن ماشین حساب", callback_data=f"calc_close_{user_id}", style="danger")],
    ]
    return InlineKeyboardMarkup(keyboard)


async def handle_inline_query(update: Update, context: ContextTypes.DEFAULT_TYPE):
    query = update.inline_query.query.strip().lower()
    user_id = update.inline_query.from_user.id

    if query == "panel":
        results = [
            InlineQueryResultArticle(
                id="1",
                title="🎛 پنل سلف ویدال",
                description="پنل مدیریت سلف",
                input_message_content=InputTextMessageContent(
                    message_text="<b>𝙎𝙀𝙇𝙁 𝙑𝙞𝙙𝙖𝙡 | پنل سلف ویدال</b>",
                    parse_mode='HTML',
                ),
                reply_markup=get_main_menu(user_id),
            )
        ]
        await update.inline_query.answer(results, cache_time=0, is_personal=True)

    elif query == "calc":
        results = [
            InlineQueryResultArticle(
                id="2",
                title="🧮 ماشین حساب",
                description="ماشین حساب با دکمه",
                input_message_content=InputTextMessageContent(
                    message_text="<b>🧮 ماشین حساب</b>\n\n<code>0</code>",
                    parse_mode='HTML',
                ),
                reply_markup=get_calc_keyboard("0", user_id),
            )
        ]
        await update.inline_query.answer(results, cache_time=0, is_personal=True)


async def handle_callback(update: Update, context: ContextTypes.DEFAULT_TYPE):
    query = update.callback_query
    data = query.data
    clicking_user_id = query.from_user.id

    try:
        owner_id = int(data.rsplit("_", 1)[-1])
    except ValueError:
        owner_id = None

    if owner_id is not None and owner_id != clicking_user_id:
        await query.answer("⛔ این پنل مخصوص شما نیست!", show_alert=True)
        return

    await query.answer()
    user_id = owner_id if owner_id is not None else clicking_user_id

    # ماشین حساب
    if data.startswith("calc_"):
        parts = data.split("_")
        btn = parts[1] if len(parts) > 1 else ""

        if btn == "close":
            text = "<b>❌ ماشین حساب بسته شد</b>"
            try:
                await query.edit_message_text(text, parse_mode='HTML')
            except Exception as e:
                logger.warning(f"خطا در بستن ماشین حساب: {e}")
            return

        display = context.user_data.get("calc_display", "0")
        expression = context.user_data.get("calc_expression", "")

        if btn == "C":
            display = "0"
            expression = ""
        elif btn == "eq":
            try:
                result = eval(expression)
                display = str(result)
                expression = str(result)
            except Exception:
                display = "خطا"
                expression = ""
        elif btn in ("add", "sub", "mul", "div"):
            ops = {"add": "+", "sub": "-", "mul": "*", "div": "/"}
            expression += ops[btn]
            display = ops[btn]
        else:
            if display in ("0", "+", "-", "*", "/", "خطا"):
                display = btn
            else:
                display += btn
            expression += btn

        context.user_data["calc_display"] = display
        context.user_data["calc_expression"] = expression

        text = f"<b>🧮 ماشین حساب</b>\n\n<code>{display}</code>"
        await query.edit_message_text(
            text,
            reply_markup=get_calc_keyboard(display, user_id),
            parse_mode='HTML',
        )
        return

    # بستن پنل
    if data.startswith("close_"):
        text = "<b>❌ پنل بسته شد</b>"
        try:
            await query.edit_message_text(text, parse_mode='HTML')
        except Exception as e:
            logger.warning(f"خطا در بستن پنل: {e}")
        return

    # بازگشت از صفحه‌ی راهنما به لیست پنل
    if data.startswith("backpanel_"):
        text = "<b>𝙎𝙀𝙇𝙁 𝙑𝙞𝙙𝙖𝙡 | قابلیت‌ها</b>"
        await query.edit_message_text(text, reply_markup=get_panel_menu(user_id), parse_mode='HTML')
        return

    # بازگشت به پنل اول
    if data.startswith("back_"):
        text = "<b>𝙎𝙀𝙇𝙁 𝙑𝙞𝙙𝙖𝙡 | پنل سلف ویدال</b>"
        await query.edit_message_text(text, reply_markup=get_main_menu(user_id), parse_mode='HTML')
        return

    # پشتیبانی
    if data.startswith("support_"):
        text = "🆘 پشتیبانی\n\nبرای کمک و پشتیبانی با این شخص تماس بگیرید:\n\n@Vahab0ne"
        await query.edit_message_text(text, reply_markup=get_back_button(user_id), parse_mode='HTML')
        return

    # پنل
    if data.startswith("panel_"):
        text = "<b>𝙎𝙀𝙇𝙁 𝙑𝙞𝙙𝙖𝙡 | قابلیت‌ها</b>"
        await query.edit_message_text(text, reply_markup=get_panel_menu(user_id), parse_mode='HTML')
        return

    # بقیه قابلیت‌ها
    action = data.rsplit("_", 1)[0]
    if action in HELP_TEXTS:
        text = HELP_TEXTS[action]
        await query.edit_message_text(text, reply_markup=get_back_button(user_id), parse_mode='HTML')
    else:
        logger.warning(f"callback ناشناخته: {data}")


async def error_handler(update: object, context: ContextTypes.DEFAULT_TYPE):
    logger.error(f"Error: {context.error}", exc_info=context.error)


def main():
    app = Application.builder().token(TOKEN).build()
    app.add_handler(InlineQueryHandler(handle_inline_query))
    app.add_handler(CallbackQueryHandler(handle_callback))
    app.add_error_handler(error_handler)
    print("🤖 هلپر اجرا شد")
    app.run_polling()


if __name__ == "__main__":
    main()