ساختار پروژه
=============

- index.php              ورودی وبهوک؛ فقط require فایل‌ها
- bootstrap.php          لود کردن تنظیمات
- config/bot.php         توکن ربات و تنظیمات اصلی
- config/admin.php       owner_id و admins
- config/services.php    خالی است؛ هیچ کلیدی لازم نیست
- config/webhook.php     آدرس وبهوک و secret token
- set_webhook.php        ثبت وبهوک روی تلگرام
- clear_webhook.php      حذف وبهوک
- data/                  فایل‌های json و لاگ‌ها (باید قابل نوشتن باشد)

- src/polyfills.php      توابع جایگزین mbstring
- src/core.php           ذخیره‌سازی، لاگ، زبان، دیتابیس‌های JSON
- src/telegram.php       توابع تلگرام، پنل ادمین، عضویت اجباری
- src/bitpin.php         منبع قیمت ارز دیجیتال و نرخ دلار
- src/tgju.php           منبع قیمت طلا، سکه و ارزهای فیات
- src/pricing.php        پارس متن، تبدیل واحد و هندلرها
- src/router.php         امنیت وبهوک، خواندن آپدیت و مسیردهی


منابع قیمت
===========

فقط دو منبع، و هیچ‌کدام کلید یا لایسنس نمی‌خواهند:

۱) بیت‌پین — ارز دیجیتال و نرخ دلار
   https://api.bitpin.market/v1/mkt/markets/

   قیمتی که ربات نشان می‌دهد «قیمت خرید» آنی است، همان عددی که در
   صفحه‌ی bitpin.ir/otc/buy/<CODE>/ می‌بینی:

       buy = price_info.price * (1 + otc_buy_percent)

   نکته: تون‌کوین در بیت‌پین با نماد GRAM لیست شده و در
   bitpinSymbolMap() نگاشت شده است.

۲) tgju — طلا، سکه و ارزهای فیات
   https://api.tgju.org/v1/widget/tmp?keys=...

   یک درخواست همه‌ی شاخص‌ها را با قیمت لحظه‌ای برمی‌گرداند.
   مقدارها به ریال هستند و در کد بر ۱۰ تقسیم می‌شوند.
   دو استثنا: ons به دلار است، و price_jpy قیمت ۱۰۰ ین است.

هر دو منبع ۶۰ ثانیه کش می‌شوند. کش بیت‌پین به‌خاطر حجم
(~۲.۷ مگابایت پاسخ خام) در فایل جدا data/bitpin_cache.json ذخیره
می‌شود و هرگز داخل price_cache.json نوشته نمی‌شود.

APIهای قبلی (آلان‌چند، BRSAPI، فست‌کریت، GoldAPI، نوبیتکس، والکس،
بایننس، call.tgju.org) همگی حذف شدند — هر کدامشان مرده بودند:
توکن منقضی، 404، لایسنس نامعتبر، یا دامنه‌ای که دیگر resolve نمی‌شود.


مراحل نصب
==========

۱) کل پوشه را روی هاست آپلود کن.
۲) داخل config/webhook.php آدرس واقعی index.php را بگذار.
۳) حتماً secret_token را پر کن (خالی گذاشتنش یعنی هر کسی
   می‌تواند آپدیت جعلی بفرستد و خودش را ادمین جا بزند).
   ساخت مقدار تصادفی:  php -r "echo bin2hex(random_bytes(32));"
۴) set_webhook.php را یک‌بار اجرا کن.
۵) مطمئن شو data/ قابل نوشتن است.

هشدار امنیتی: هیچ‌وقت فایل zip، لاگ یا json داخل پوشه‌ی سایت نگذار.
فایل .htaccess در ریشه همین را مسدود می‌کند، ولی بهترین کار این است
که اصلاً آنجا نباشند.
