# TraderPro — نصب و اجرا (یک دستور)

نیازی به MySQL، ساخت دیتابیس، یوزر، رمز یا ویرایش `.env` نیست. همه‌ی توکن‌ها از قبل داخل `.env` پر شده‌ن.

## نصب اولیه / آپدیت به نسخه‌ی جدید

**یک دستور** (زیپ جدید رو داخل پوشه‌ی برنامه آپلود کنید، بعد در Terminal):

```bash
cd ~/public_html && bash update.sh
```

این دستور به‌ترتیب: از دیتابیس‌ها و کدهای فعلی بکاپ می‌گیره (`backups/pre-update/`)، ربات قدیمی رو می‌بنده، زیپ جدید رو جایگزین می‌کنه، سلامت فایل‌ها رو چک می‌کنه (اگه مشکل داشت خودش به نسخه‌ی قبلی برمی‌گرده) و ربات جدید رو در پس‌زمینه اجرا می‌کنه.
(اولین‌بار که هنوز `update.sh` ندارید: زیپ رو با Extract در File Manager یا `unzip -o traderpro-final.zip` باز کنید و فقط `bash run.sh` بزنید.)

اجرای دستی بدون آپدیت:

```bash
php traderpro.php        # اجرای مستقیم (با بستن ترمینال متوقف می‌شه)
bash run.sh              # اجرای دائمی در پس‌زمینه؛ نسخه‌ی قبلی در حال اجرا رو هم خودش می‌بنده
```

اطلاعات کاربرها و کیف‌پول‌ها در `traderpro.db` و `traderpro-financial.db` هستن که داخل زیپ نیستن، پس آپدیت هیچ‌وقت پاکشون نمی‌کنه.

**روشن ماندن بعد از ریستارت سرور** (اختیاری): در cPanel ← Cron Jobs هر ۵ دقیقه این خط:

```bash
cd /home/traderpr/public_html && (pgrep -u $(id -u) -f "[p]hp traderpro" >/dev/null || bash run.sh)
```

تمام. اولین اجرا خودش این کارها رو می‌کنه: چک PHP و افزونه‌ها، ساخت `traderpro-financial.db` و جدول‌ها،
ساخت کلیدهای رمزنگاری (اگه خالی بودن)، ساخت `.htaccess` محافظ، و پاک‌کردن Webhook قدیمی تلگرام.

لاگ: `tail -f traderpro.log` — توقف: `pkill -f traderpro.php`


## کیف‌پول دلاری و معامله‌ی لات‌محور (مثل بروکرها)

- **همه‌ی مبالغ به دلار.** کاربر مبلغ واریز رو به دلار می‌نویسه؛ ربات با «نرخ دلار ادمین» (پنل ادمین ← 💱 تنظیم نرخ دلار) تومانِ قابل‌پرداخت رو فقط در همون صفحه‌ی اطلاعات کارت نشون می‌ده. نرخ همون لحظه‌ی درخواست ثبت می‌شه؛ بعداً عوض‌شدن نرخ اثری روی اون واریز نداره.
  ادمین با «✅ تایید همین مبلغ» دلارِ درخواست رو شارژ می‌کنه، یا با «✏️ مبلغ واقعی (تومان)» مبلغ واقعی رو می‌نویسه و به دلار (با نرخ همون درخواست) تبدیل می‌شه.
- **معامله با حجم (لات)، بدون سقف ثابت:** حداقل ۰٫۰۱ لات (۱ لات = ۱۰۰ اونس طلا). فقط «مارجین آزاد» محدودکننده‌ست. دکمه‌های حجم سریع + هر عدد دلخواه.
- **قیمت:** همون سیستم قیمت‌گیری ربات؛ هر ۱ ثانیه از API رایگان و هر ۳ دقیقه از API پولی برای محاسبه‌ی اختلاف. پوزیشن‌ها هر ۱ ثانیه بررسی می‌شن (حد ضرر، حد سود، لیکوئید).
- **لیکوئید (Stop-out):** اگه «اکوییتی ÷ مارجین» به حد لیکوئید (پیش‌فرض ۵۰٪) برسه، همه‌ی معاملات کاربر با قیمت بازار بسته می‌شن (موجودی هیچ‌وقت منفی نمی‌شه)، به کاربر اطلاع داده می‌شه و ادمین‌های ارشد هم پیام می‌گیرن. قبلش (پیش‌فرض ۱۰۰٪) هشدار «مارجین‌کال» می‌ره.
- **🔄 بروزرسانی:** صفحه‌ی «معامله‌ی واقعی» یه دکمه‌ی بروزرسانی داره که همون پیام رو با سود/زیان لحظه‌ای، اکوییتی، سطح مارجین و قیمت لیکوئید تازه می‌کنه.
- **تنظیمات ادمین** (پنل ادمین ← 📊 تنظیمات معامله): لوریج (پیش‌فرض ۱:۱۰۰)، کارمزد هر لات (پیش‌فرض $5)، حد لیکوئید، هشدار مارجین، حداقل واریز/برداشت ($10) و آستانه‌ی تایید دو ادمین برای برداشت ($500). سقف روزانه/ماهانه‌ی برداشت هم (به دلار) از «🔒 سقف برداشت» تنظیم می‌شه.
- **برداشت** به دلار ثبت می‌شه؛ ادمین معادل تومانی رو (با نرخ روز) می‌بینه و به همون مقصد واریز می‌کنه. قابل‌برداشت = کمینه‌ی (موجودی، اکوییتی) − مارجین − برداشت‌های در انتظار.

## نیازمندی‌ها

PHP ‏8.1 یا بالاتر با افزونه‌های `pdo_sqlite`، `curl`، `openssl`، `mbstring` (اختیاری: `gd` برای عکس‌ها و کارت‌های گرافیکی، `zip` برای خروجی اکسل ادمین). نیازی به `sodium` نیست.
اگه چیزی کم باشه، ربات با پیام روشن (و دستور رفعش) همون لحظه متوقف می‌شه.
در cPanel: **Select PHP Version → Extensions**.

## دیتابیس مالی (SQLite)

- فایل: `traderpro-financial.db` کنار برنامه (مسیر دلخواه: `FIN_DB_FILE` در `.env`).
- Ledger و لاگ حسابرسی در سطح دیتابیس append-only هستن (UPDATE/DELETE خطا می‌ده).
- **بکاپ خودکار:** ربات هر ۲۴ ساعت یک بکاپ رمزنگاری‌شده در `backups/` می‌سازه (۱۴ تای آخر). گاهی پوشه‌ی `backups/`
  رو روی کامپیوتر خودتون هم دانلود کنید. بازیابی: `php restore-backup.php backups/financial_<تاریخ>.db.enc`
- بکاپ دستی فوری: `php backup-financial-db.php`

## نکته‌های امنیتی

- `.env` و `.secrets.env` شامل توکن‌ها و کلید رمزنگاری‌ان؛ منتشرشون نکنید. `.htaccess` ساخته‌شده دسترسی وب به فایل‌های حساس
  (`.env`، `*.db`، `*.log`، `backups/`، همه‌ی `*.php` به‌جز `api.php`) رو می‌بنده. **اگه از nginx استفاده می‌کنید** معادلش رو
  باید در تنظیمات سرور بذارید (deny روی همین الگوها).
- `CREDENTIALS_KEYPAIR` هیچ‌وقت عوض نشه؛ اگه عوض بشه رمزهای قبلاً ذخیره‌شده‌ی کاربرها خونده نمی‌شن. (کپی امنش در `.secrets.env` هست
  و اگه نسخه‌ی جدید زیپ کلید متفاوتی داشت، ربات همون کلید قبلی رو نگه می‌داره.)
- اگه توکن ربات جایی لو رفت: در BotFather دستور `/revoke` و مقدار `BOT_TOKEN` در `.env` رو عوض کنید.

## Mini App (متصل به خودِ ربات)

- آدرس در `.env` (`MINIAPP_URL`) روی `https://traderpro.s12.telviprobot.top/miniapp/index.html` تنظیم شده. `api.php` و پوشه‌ی `miniapp/` باید از وب در دسترس باشن.
- **همه‌چیز با ربات یکی است:** مینی‌اپ از همون موتور معامله و همون دیتابیس مالی ربات استفاده می‌کنه. معامله‌ای که در مینی‌اپ باز/بسته بشه، همون لحظه در ربات هم هست (موجودی، مارجین، پوزیشن‌ها، حد ضرر/سود، لیکوئید) و برعکس؛ بعد از هر معامله‌ی مینی‌اپ یک پیام هم داخل چت ربات می‌آد.
- قیمت مینی‌اپ همون قیمت ربات است (هر ۱ ثانیه). ربات فقط وقتی مینی‌اپ باز باشه یا معامله‌ی باز وجود داشته باشه قیمت رو منتشر می‌کنه (فایل `live-price.cache`).
- دکمه‌های واریز/برداشت مینی‌اپ، چت ربات رو دقیقاً روی همون صفحه باز می‌کنن (واریز و برداشت فقط داخل ربات و با تأیید ادمین انجام می‌شن).
- **اگه مینی‌اپ «قطع» نشون داد:** زیر نوار بالا دلیل دقیق خطا نوشته می‌شه. برای بررسی سریع سرور، این آدرس رو در مرورگر باز کنید: `https://traderpro.s12.telviprobot.top/api.php?health=1` — نسخه‌ی PHP وب، افزونه‌ها، دیتابیس مالی و اجرا بودن ربات رو نشون می‌ده. (نسخه‌ی PHP «وب» دامنه با نسخه‌ی PHP ترمینال ممکنه فرق کنه؛ در cPanel از MultiPHP Manager روی ۸٫۱ یا بالاتر بذارید.) مینی‌اپ فقط از داخل تلگرام (دکمه‌ی اپ در ربات) کار می‌کنه، نه با باز کردن لینک در مرورگر.

## اسکریپت‌های جانبی (همگی اختیاری)

| دستور | کار |
|---|---|
| `php preflight.php` | بررسی صحت کد، ترجمه‌ها و افزونه‌ها |
| `php test-ledger.php` / `php test-financial-full.php` | تست‌های مالی روی یک دیتابیس موقت (به دیتابیس واقعی دست نمی‌زنن) |
| `php reconcile-ledger.php` | تطبیق مجموع Ledger (دلار) با موجودی واقعی که در `bank-balance.txt` (به دلار) می‌نویسید؛ اختلاف بیش از $1 = هشدار تلگرام به ادمین‌ها |
| `php migrate-to-ledger.php` | ساخت حساب برای کاربرهای فعلی (لازم نیست؛ ربات خودش می‌سازه). ⚠️ گزینه‌ی `--include-legacy-payments` موجودی کیف‌پول رو الکی زیاد می‌کنه؛ استفاده نکنید |

توضیح مرحله‌به‌مرحله‌ی طراحی در پوشه‌ی `docs/` هست (بخش‌هایی که به MySQL اشاره می‌کنن قدیمی‌ان: دیتابیس مالی الان SQLite است).
