# فیچر جدید: قالب سفارشی «پروفایل» هر کلن

## چی اضافه شد
- جدول جدید `clan_profile_templates` (یک ردیف در هر کلن): `migrations/add_clan_profile_template.sql` (روی دیتابیس لایو با phpMyAdmin اجرا کن) — همین جدول به `schema.sql` هم اضافه شد برای نصب‌های تازه.
- `/clantext` — فقط مالک کلن؛ قالب فعلی (پیش‌فرض یا قبلاً ثبت‌شده) رو با placeholder های خام + راهنمای کامل placeholder ها نشون می‌ده تا کپی/دیزاین بشه.
- `/contextnew` — فقط مالک کلن؛ قالب جدید رو ثبت می‌کنه. دو روش ورودی: ریپلای روی پیامی که متن قالب توشه، یا نوشتن متن بلافاصله بعد از خودِ دستور (خط بعدی همون پیام). سقف طول: ۳۰۰۰ کاراکتر.
- تایپ کلمه‌ی «پروفایل» (علاوه بر `/profile` قبلی) هم حالا کار می‌کنه — چه در پی‌وی چه در گروه.
- وقتی کسی «پروفایل»/`/profile` بزنه: اگه عضو کلنی باشه که قالب سفارشی ثبت کرده، همون قالب با آمار واقعی‌اش نشون داده می‌شه؛ وگرنه قالب پیش‌فرض جدید (طرح جعبه‌ای که تأیید کردی، شامل اسم کلن).

## Placeholder های پشتیبانی‌شده
`{name} {id} {emoji} {emoji_full} {title} {coins} {wins} {losses} {winrate} {games} {xp} {level} {premium} {badges} {league} {clan_name}`

placeholder ناشناخته/اشتباه‌نوشته‌شده دست‌نخورده تو خروجی می‌مونه (نه خطا، نه رد کل ذخیره‌سازی) — مالک کلن خودش موقع دیدن خروجی متوجه می‌شه.

## فایل‌های تغییر یافته
- `migrations/add_clan_profile_template.sql` (جدید)
- `schema.sql` (جدول جدید اضافه شد)
- `handlers/clan.php` (قالب پیش‌فرض، راهنمای placeholder، `/clantext`، `/contextnew`، helper های مربوطه)
- `handlers/shop.php` (`profilePlaceholders`, `renderProfileTemplate`, `renderUserProfile` — بدون تغییر در `buildProfileText` قدیمی که ممکنه جای دیگه‌ای بهش وابسته باشه)
- `webhook.php` (dispatch برای `/clantext`, `/contextnew`, و تایپ «پروفایل»)
- `handlers/basic.php` (اضافه شدن دو خط به `/help`)

## معماری/محدودیت‌های رعایت‌شده
- تابع تکراری ساخته نشد؛ `buildProfileText` قدیمی دست‌نخورده موند، منطق مشترک تو `profilePlaceholders` جدا شد.
- ارسال HTML با fallback به متن خام اگه قالب دیزاین‌شده کاراکتر خرابکن HTML (`<`, `&`) داشته باشه — دقیقاً طبق الگوی «خطای بی‌صدای تلگرام» که قبلاً دیده بودیم.
- دیپلوی: فقط از طریق cPanel File Manager + اجرای migration تو phpMyAdmin؛ چون مسیر webhook عوض نشده، نیازی به ری‌رجیستر webhook نیست.

## نکته‌ی ترکیب با فیچر AFK
این آپدیت روی نسخه‌ای از پروژه پیاده شد که از قبل فیچر «پنالتی غیبت (AFK)» رو داشت (`handlers/afk_penalty.php`, ستون‌های `afk_strikes`/`afk_block_until` تو `users`). برای اینکه هشدار/محرومیت AFK تو خروجی جدیدِ «پروفایل» (که حالا از قالب کلن رد می‌شه) گم نشه:
- placeholder جدید `{afk}` به `profilePlaceholders()` اضافه شد (خالی وقتی کاربر مشکلی نداره).
- `{afk}` به انتهای قالب پیش‌فرض (`CLAN_PROFILE_DEFAULT_TEMPLATE`) و راهنمای `/clantext` اضافه شد.
- اگه مالک کلنی قالب سفارشی خودش رو با `/contextnew` بدون `{afk}` ثبت کنه، هشدار AFK فقط تو اون قالب سفارشی نشون داده نمی‌شه (خودِ کاربر همچنان تو پی‌وی از طرف `applyAfkPenalty` مطلع می‌شه؛ این placeholder فقط نمایش اضافه‌ی داخل خودِ متن پروفایله).

## قدم بعدی برای دیپلوی
1. `migrations/add_clan_profile_template.sql` رو تو phpMyAdmin اجرا کن.
2. فایل‌های تغییریافته (`webhook.php`, `handlers/basic.php`, `handlers/clan.php`, `handlers/shop.php`) رو جایگزین نسخه‌ی روی هاست کن.
3. تست: یک مالک کلن `/clantext` بزنه → متن رو دیزاین کنه → `/contextnew` (ریپلای) بزنه → یکی از اعضای همون کلن «پروفایل» بنویسه.
