راهنمای نصب ربات فروش VPN
===========================

این راهنما برای نصب روی هاست سی‌پنل نوشته شده. اگر سرور مجازی داری هم
مراحل همینه؛ فقط به‌جای سی‌پنل، وب‌سرور و کرون رو خودت تنظیم می‌کنی.

نصب تازه حدود ۱۵ دقیقه طول می‌کشه. یک بار از اول تا آخر بخونش، بعد شروع کن.


۰. قبل از شروع، این‌ها رو آماده کن
-----------------------------------
 • هاست یا سرور با PHP نسخه‌ی ۸.۲ یا بالاتر
 • یک دامنه یا ساب‌دامنه که روش SSL (آدرس https) فعاله
 • یک دیتابیس MySQL خالی، با یک یوزر که به همون دیتابیس دسترسی کامل داره
 • یک ربات تلگرام (از @BotFather بساز) و توکنش
 • آیدی عددی تلگرام خودت، به‌عنوان ادمین (از ربات‌هایی مثل @userinfobot
   می‌گیری)

اکستنشن‌های PHP که لازمه:
   curl، pdo_mysql، mysqli، mbstring، json، fileinfo، openssl، gd، zip

توی سی‌پنل این‌ها معمولاً روشنن. اگر نبودن، از «Select PHP Version»
(یا MultiPHP Manager) روشنشون کن. نصب‌کننده خودش هم این‌ها رو چک می‌کنه و
اگر چیزی کم باشه بهت می‌گه.

یک نکته‌ی مهم: بعضی هاست‌ها نسخه‌ی PHP رو برای هر دامنه جدا نگه می‌دارن.
مطمئن شو نسخه‌ی ۸.۲ یا بالاتر برای «همین دامنه‌ای» که ربات روش نصب می‌شه
انتخاب شده، نه فقط برای حساب کلی.


۱. آپلود فایل‌ها
-----------------
 ۱. وارد File Manager سی‌پنل شو و برو داخل پوشه‌ی public_html (یا پوشه‌ی
    ریشه‌ی همون دامنه).
 ۲. فایل zip بسته رو آپلود کن و روش Extract بزن. یک پوشه به اسم bott
    ساخته می‌شه.
 ۳. دقت کن داخل پوشه‌ی bott مستقیم فایل‌هایی مثل config.php و index.php
    باشه، نه یک پوشه‌ی bott دیگه. اگر دو لایه شد، محتوای لایه‌ی داخلی رو
    یک سطح بیار بالا.

اسم پوشه دست خودته. اگر اسم دیگه‌ای بذاری، توی همه‌ی آدرس‌های پایین به‌جای
bott همون اسم رو بنویس.

آدرس نهایی ربات توی این راهنما اینطوری نوشته می‌شه:

    https://example.com/bott/

که example.com رو باید با دامنه‌ی خودت عوض کنی.


۲. اجرای نصب‌کننده
-------------------
توی مرورگر این آدرس رو باز کن:

    https://example.com/bott/installer/

فرم این اطلاعات رو می‌خواد:
 • آیدی عددی ادمین
 • توکن ربات
 • نام دیتابیس، یوزر دیتابیس، پسورد دیتابیس
 • آدرس وب‌هوک (خودش پر می‌کنه؛ دستش نزن)

بعد از زدن دکمه‌ی نصب، خودکار این کارها انجام می‌شه:
 • جدول‌های دیتابیس ساخته می‌شه
 • فایل config.php پر می‌شه
 • وب‌هوک ربات روی دامنه‌ی تو تنظیم می‌شه

در پایان، رمز ورود پنل تحت وب ادمین نشون داده می‌شه. فقط همین یک بار
نمایش داده می‌شه، همین‌جا یادداشتش کن.

بعد از نصب موفق، نصب‌کننده خودش رو از کار می‌ندازه و پوشه‌ی installer پاک
می‌شه. نیازی به کار دستی نیست.


۳. کرون (اجباری)
-----------------
تمدید و یادآوری سرویس‌ها، پیگیری پرداخت‌ها، به‌روزرسانی نرخ ارز و بقیه‌ی
کارهای زمان‌دار همه با یک کرون انجام می‌شن. بدون اون ربات کار می‌کنه ولی
این کارها انجام نمی‌شن.

سی‌پنل ← Cron Jobs ← یک کرون جدید:

    زمان‌بندی:  هر ۱ دقیقه   (* * * * *)
    دستور:      php /home/USERNAME/public_html/bott/cron/cron.php

به‌جای USERNAME اسم کاربری سی‌پنلت و به‌جای مسیر، مسیر واقعی پوشه‌ی ربات
رو بنویس. فقط همین یک کرون لازمه؛ نیازی نیست برای هر وظیفه کرون جدا
بسازی.


۴. تنظیم مینی‌اپ در BotFather
------------------------------
این مرحله رو نصب‌کننده انجام نمی‌ده و باید خودت یک بار انجام بدی.

 ۱. توی @BotFather دستور /mybots رو بزن و رباتت رو انتخاب کن.
 ۲. Bot Settings ← Configure Mini App (یا Menu Button) رو بزن.
 ۳. آدرس رو دقیقاً اینطوری بذار، با اسلش آخرش:

        https://example.com/bott/app-v2/

دقت کن آدرس باید app-v2 باشه. اگر آدرس /app/ بذاری نسخه‌ی قدیمی مینی‌اپ
باز می‌شه و قابلیت‌های جدید مثل چت خریداران توش دیده نمی‌شه.

بعد از تغییر آدرس، مینی‌اپ رو توی تلگرام کامل ببند و دوباره باز کن.


۵. تست نهایی
-------------
 • توی ربات /start بزن؛ باید جواب بده.
 • مینی‌اپ رو باز کن؛ صفحه‌ی خانه باید بیاد.
 • با ادمین وارد پنل ادمین ربات شو و یک پنل (مرزبان، پاسارگارد و ...)
   اضافه کن.
 • یک شارژ آزمایشی با مبلغ کم انجام بده تا مطمئن شی مسیر پرداخت درسته.


قابلیت‌هایی که خاموش شروع می‌شن
--------------------------------
این‌ها عمداً در ابتدا خاموشن و خودت تصمیم می‌گیری روشنشون کنی:

چت خریداران (داخل مینی‌اپ)
   پنل ادمین ربات ← «⚙️ وضعیت قابلیت ها» ← «🤖 آپشن‌های اصلی ربات» ← «💬 چت خریداران».
   فقط کسی که حداقل یک خرید واقعی داشته باشه می‌تونه توش بنویسه.
   پیش‌فرض اسم مستعار نشون داده می‌شه. با گزینه‌ی «نام نمایشی در چت»
   می‌تونی اسم پروفایل تلگرام رو نشون بدی. یوزرنیم و آیدی هیچ‌وقت نمایش
   داده نمی‌شه. اسم هر نفر بعد از اولین باری که مینی‌اپ رو باز می‌کنه ثبت
   می‌شه. ادمین‌ها زیر هر پیام دکمه‌ی حذف، حذف و مسدود کردن و دیدن پروفایل
   نویسنده رو دارن.

قیمت‌گذاری دلاری (هر پنل جدا)
   پنل ادمین ربات ← مدیریت پنل‌ها ← یک پنل ← «💵 قیمت‌گذاری دلاری (USDT)».
   قیمت‌هایی که برای محصولات ثبت کردی «قیمت پایه به تومان» می‌مونن و با
   تغییر نرخ تتر تنظیم می‌شن. اول نرخ پایه رو ثبت کن، بعد فعالش کن.
   نرخ به‌صورت پیش‌فرض خودکار گرفته می‌شه و کلیدی لازم نداره. اگر
   خواستی منبع دیگه‌ای بذاری، از همون صفحه «منبع نرخ دلار» رو بزن؛ دو
   منبع آماده داره، یا آدرس و کلید دلخواهت رو وارد می‌کنی. بعد از تنظیم
   حتماً «تست» رو بزن. اگر منبع نرخ جواب نده، آخرین نرخ معتبر نگه داشته
   می‌شه و برای ادمین هشدار می‌آد. می‌تونی یک نرخ اضطراری دستی هم بذاری.

ایموجی پرمیوم
   پنل ادمین ربات ← «⚙️ وضعیت قابلیت ها» ← «🌟 ایموجی پرمیوم». می‌تونی ایموجی‌ها رو
   تکی، با فایل JSON، یا با فرستادن لینک پک ایموجی (t.me/addemoji/...)
   اضافه کنی. وقتی متنی رو از داخل ربات تنظیم می‌کنی و داخلش ایموجی
   پرمیوم هست، همون ایموجی پرمیوم ذخیره می‌شه.

راهنمای آماده برای مشتری‌ها
   بخش «📚 آموزش» ربات روی نصب تازه خودکار پر می‌شه: ۲۸ مطلب در ۷ دسته،
   از شروع کار تا اتصال روی اندروید، آیفون، ویندوز و مک، رفع مشکل و نکات
   امنیتی. اگر قبلاً آموزش‌های خودت رو داشتی، از پنل ادمین ← «📚 بخش
   آموزش» ← «📥 افزودن راهنمای آماده» اضافه‌شون کن؛ چیزی که از قبل داری
   تغییر نمی‌کنه. هر مطلب رو با «✏️ ویرایش آموزش» می‌تونی به سلیقه‌ی خودت
   عوض کنی. برای هر مطلب می‌تونی دکمه‌ی دانلود برنامه هم بذاری.

واکنش خودکار به پیام مشتری
   پنل ادمین ربات ← «⚙️ وضعیت قابلیت ها» ← «😀 واکنش خودکار».
   مشخص می‌کنی روی چه پیامی (دستور مثل /start، یک دکمه‌ی منو، یک کلمه، عکس، فایل و...)
   چه ایموجی‌ای گذاشته بشه. با «📦 پیشنهادهای آماده» سریع شروع کن. پیش‌فرض خاموشه و
   باید «روشن کردن» رو بزنی. تلگرام به ربات اجازه می‌ده روی هر پیام فقط یک واکنش
   بذاره و ایموجی پرمیوم رو معمولاً قبول نمی‌کنه؛ برای همین ربات اول پرمیوم رو امتحان
   می‌کنه و اگه قبول نشد ایموجی عادی رو می‌ذاره. واکنش فقط روی پیام‌هایی که مشتری توی
   ربات می‌فرسته کار می‌کنه، نه وقتی روی دکمه‌ی شیشه‌ای (اینلاین) می‌زنه.

بک‌آپ خودکار و بازیابی
   پنل ادمین ربات ← «⚙️ وضعیت قابلیت ها» ← «💾 بک‌آپ و بازیابی».
   از همین‌جا زمان‌بندی (هر چند ساعت، روزانه یا هفتگی)، مقصد (کانال یا گروه که ربات
   توش ادمینه)، رمزگذاری و تاریخچه رو تنظیم می‌کنی. بک‌آپ‌ها داخل کانال خصوصی
   فرستاده می‌شن؛ اطلاعات حساس داخلشونه، پس کانال رو عمومی نکن.
   برای بازیابی، «♻️ بازیابی از فایل» رو بزن و بک‌آپ رو داخل همون چت بفرست.
   قبل از اعمال پیش‌نمایش می‌بینی و یک نقطه‌ی بازگشت گرفته می‌شه تا ۷۲ ساعت بشه
   برگشت. تلگرام اجازه‌ی دریافت فایل بزرگ‌تر از ۲۰ مگ رو به ربات نمی‌ده؛ برای همین
   بک‌آپ‌ها به قسمت‌های ۱۹ مگی تقسیم می‌شن و موقع بازیابی همه‌ی قسمت‌ها رو می‌فرستی.
   اگر ربات رو از یک ربات هم‌خانواده منتقل می‌کنی، فایل .sql یا .zip اون ربات رو
   همین‌جا بفرست. بک‌آپ دیتابیسی که سی‌پنل می‌ده (Backup ← «Download a MySQL Database
   Backup»، فایل .sql.gz) هم قبوله. بک‌آپ کامل سی‌پنل معمولاً خیلی بزرگ‌تر از ۲۰ مگه و
   تلگرام اجازه‌ی دریافتش رو به ربات نمی‌ده؛ برای انتقال بهتره فقط بک‌آپ دیتابیس رو بگیری.

پینگ واقعی از ایران
   این قابلیت یک سرور جدا داخل ایران لازم داره، برای همین داخل بسته‌ی
   اصلی نیست. پوشه‌ی iran-ping-script جداگانه همراهشه و راهنمای
   خودش رو داره.


نصب روی یک سایت قدیمی (انتقال، نه نصب تازه)
---------------------------------------------
اگر قبلاً این ربات رو روی هاست دیگه‌ای داری و می‌خوای منتقلش کنی:
 ۱. از دیتابیس قدیمی با phpMyAdmin یک Export کامل بگیر.
 ۲. توی هاست جدید یک دیتابیس خالی بساز و همون فایل رو Import کن.
 ۳. فایل‌های بسته رو آپلود کن، ولی نصب‌کننده رو اجرا نکن. به‌جاش
    config.php رو باز کن و هشت مقدار بالای فایل و پایینش (dbname،
    usernamedb، passworddb، dbhost، APIKEY، adminnumber، domainhosts،
    usernamebot) رو با مقدارهای واقعی پر کن.
 ۴. آدرس https://example.com/bott/table.php رو یک بار باز کن تا هر جدول
    یا ستونی که توی دیتابیس قدیمی نبوده اضافه بشه. آخرش باید بنویسه
    «table.php finished OK».
 ۵. وب‌هوک رو روی آدرس جدید تنظیم کن (این آدرس رو با توکن خودت باز کن):
        https://api.telegram.org/botTOKEN/setWebhook?url=https://example.com/bott/index.php
 ۶. کرون و تنظیم BotFather (مرحله‌ی ۳ و ۴ بالا) رو انجام بده.
 ۷. روی هاست قدیمی وب‌هوک و کرون رو حذف کن تا دو سرور هم‌زمان جواب ندن.

از BotFather هیچ‌وقت دستور /deletebot نزن؛ ربات و توکنش کامل پاک می‌شه.


آپدیت یک نصب موجود
-------------------
 ۱. از پوشه‌ی ربات و از دیتابیس بک‌آپ بگیر.
 ۲. فایل آپدیت رو روی پوشه‌ی ربات Extract کن و Overwrite بزن.
 ۳. آدرس .../bott/table.php رو یک بار باز کن.
 ۴. مینی‌اپ رو کامل ببند و دوباره باز کن.

مهم: بسته‌ی کامل نصب رو هیچ‌وقت روی یک سایت در حال کار Extract نکن. فایل
config.php اون خالیه و اطلاعات سایت‌ت رو پاک می‌کنه. برای آپدیت فقط از
فایل‌های «آپدیت» استفاده کن.


اگر مشکلی پیش اومد
--------------------
نصب‌کننده 404 می‌ده یا باز نمی‌شه
   معمولاً مسیر اشتباهه. توی File Manager ببین پوشه‌ی installer دقیقاً
   کنار config.php هست یا نه. مطمئن شو پوشه‌ی bott دو لایه نشده.
   اگر باز هم نشد، نسخه‌ی PHP همون دامنه رو چک کن (۸.۲ یا بالاتر).

«نمی‌تونم اطلاعات ربات رو بگیرم» (cannot get bot details)
   یا توکن اشتباهه (از @BotFather دوباره بگیر، مخصوصاً اگر Revoke کردی)،
   یا هاست اجازه‌ی اتصال به api.telegram.org رو نمی‌ده. از پشتیبانی هاست
   بپرس که curl و اتصال خروجی فعاله یا نه.

ربات به /start جواب نمی‌ده
   این آدرس رو با توکن خودت باز کن و ببین وب‌هوک روی دامنه‌ی درست تنظیم
   شده و خطایی نداره:
        https://api.telegram.org/botTOKEN/getWebhookInfo
   فیلد url باید آدرس ربات تو باشه و last_error_message خالی.

مینی‌اپ باز می‌شه ولی نسخه‌ی قدیمی یا بدون قابلیت‌های جدیده
   آدرس مینی‌اپ توی BotFather رو چک کن؛ باید .../app-v2/ باشه (مرحله‌ی ۴).

بعد از آپدیت چیزی عوض نشد
   مینی‌اپ رو کامل از تلگرام ببند و دوباره باز کن. اگر هاست OPcache داره،
   چند دقیقه صبر کن یا از پنل هاست OPcache رو ری‌استارت کن.

صفحه‌ی table.php سفیده یا خطا می‌ده
   اطلاعات دیتابیس داخل config.php رو چک کن. لاگ خطا داخل پوشه‌ی logs و
   error_log هاست هست.

یک نکته‌ی امنیتی
-----------------
فایل config.php توکن ربات و پسورد دیتابیس داره. هیچ‌وقت جایی منتشرش نکن،
توی چت یا گروه نذارش، و فایل‌های تستی (مثل test.php) که موقع عیب‌یابی
روی سرور می‌ذاری رو بعد از کار پاک کن.
