<?php
// crowmas.php
// ربات پیام ناشناس کلاغ پیامرسان
// توکن ربات: 8280614954:AAFzHPaXE52_QiEQMewwMZF4nA4XzyEFTSc
// مالک: 891980428

// تنظیمات اولیه
error_reporting(E_ALL);
ini_set('display_errors', 1);
date_default_timezone_set('Asia/Tehran');

// توکن ربات
define('BOT_TOKEN', '8285167718:AAHrpvwTwMD19tdMtO7fXMrR7foLzWS3ENo');
define('ADMIN_ID', 891980428);
define('DATA_FILE', 'crowmas.json');
define('BOT_USERNAME', 'CROWMSGBOT'); // نام کاربری ربات

// ایموجی‌ها
define('EMOJI_CROW', '🐦‍⬛');
define('EMOJI_BACK', '🔙');
define('EMOJI_SETTINGS', '⚙️');
define('EMOJI_MSG', '✉️');
define('EMOJI_LINK', '🔗');
define('EMOJI_NETWORK', EMOJI_CROW);
define('EMOJI_SEND', '🗣️');
define('EMOJI_REACTION', '✨');
define('EMOJI_AD', '🛃');
define('EMOJI_REPLY', '🗨️');
define('EMOJI_BLOCK', '⛔');
define('EMOJI_VIEW', '👁️');
define('EMOJI_UNBLOCK', '🔓');
define('EMOJI_POST', '📱');
define('EMOJI_VIEW_NETWORK', '📑');
define('EMOJI_CHANGE_LINK', '⛓️‍💥');
define('EMOJI_NAME', '👤');
define('EMOJI_RECEIVE_SETTINGS', '✉️');
define('EMOJI_SEEN_NOTIFY', '👀');
define('EMOJI_BIO', '🔮');
define('EMOJI_STATS', '📊');
define('EMOJI_CHANNEL', '📣');
define('EMOJI_SIGNATURE', '✍🏻');
define('EMOJI_DELETE_BLOCKS', '🗑️');
define('EMOJI_AD_SENSITIVITY', '🔇');
define('EMOJI_SUPPORT', '🧑🏻‍💻');
define('EMOJI_DIRECT', '✉️');
define('EMOJI_NOTIFICATION', '🔔');
define('EMOJI_HIDDEN', '👤');
define('EMOJI_VISIBLE', '🧔🏻‍♀️');
define('EMOJI_ENCRYPTED', '🔐');
define('EMOJI_SELECTIVE', '❇️');
define('EMOJI_ADD_CHANNEL', '📢');
define('EMOJI_DELETE_CHANNEL', '🗑️');
define('EMOJI_SET_AD', '📑');
define('EMOJI_DELETE_AD', '🗑️');
define('EMOJI_SET_SIGNATURE', '🖋️');
define('EMOJI_DELETE_SIGNATURE', '🗑️');
define('EMOJI_BIO_PREVIEW', '👁️‍🗨️');
define('EMOJI_CHECK_JOIN', '🎩');
// ایموجی‌های جدید
define('EMOJI_ANTI_SPAM', '📳');
define('EMOJI_ANTI_ABUSE', '🛂');
define('EMOJI_DELETE_MSG', '🗑️');
define('EMOJI_RULES', '📜');
define('EMOJI_CANCEL', '❗️');
define('EMOJI_RECEIVE_MANAGE', '🗃');
define('EMOJI_RECEIVE_STATUS', '🔕');
define('EMOJI_SOCIAL_BAN', '📵');
define('EMOJI_FORWARD', '📤');
define('EMOJI_REPORT', '⚠️');
define('EMOJI_GIFT', '🎁');
define('EMOJI_SAVE', '💾');
define('EMOJI_REDIRECT', '🔀');
define('EMOJI_ACCOUNT', '👤');

// کلاس اصلی ربات
class CrowMasBot {
    private $token;
    private $apiUrl;
    private $data;
    private $update;
    private $chatId;
    private $userId;
    private $messageId;
    private $text;
    private $messageType;
    private $adminIds;
    private $caption;
    private $isFromLink = false;
    private $targetUserIdFromLink = null;
    
    public function __construct($token) {
        $this->token = $token;
        $this->apiUrl = "https://api.telegram.org/bot{$token}/";
        $this->adminIds = [ADMIN_ID];
        $this->loadData();
        
        // FIX: بارگذاری لیست گیفت‌ها در صورت نیاز
        if (empty($this->data['available_gifts']) || (time() - ($this->data['gifts_last_updated'] ?? 0)) > 86400) {
            $this->loadAvailableGifts();
        }
        
        $content = file_get_contents("php://input");
        $this->update = json_decode($content, true);
        
        if (!$this->update && isset($_GET['test'])) {
            $this->update = [
                'update_id' => 1,
                'message' => [
                    'message_id' => 1,
                    'from' => ['id' => ADMIN_ID, 'first_name' => 'Test', 'username' => 'testuser'],
                    'chat' => ['id' => ADMIN_ID, 'type' => 'private'],
                    'date' => time(),
                    'text' => '/start'
                ]
            ];
        }
        
        if ($this->update) {
            $this->processUpdate();
        }
    }
    
    private function loadData() {
        if (file_exists(DATA_FILE)) {
            $encrypted = file_get_contents(DATA_FILE);
            $json = base64_decode($encrypted);
            $this->data = json_decode($json, true);
            if (!is_array($this->data)) $this->data = [];
        } else {
            $this->data = [];
        }
        
        if (!isset($this->data['users'])) $this->data['users'] = [];
        if (!isset($this->data['admins'])) $this->data['admins'] = $this->adminIds;
        if (!isset($this->data['forced_join'])) $this->data['forced_join'] = [];
        if (!isset($this->data['social_channel'])) $this->data['social_channel'] = null;
        if (!isset($this->data['pending_posts'])) $this->data['pending_posts'] = [];
        if (!isset($this->data['bot_active'])) $this->data['bot_active'] = true;
        if (!isset($this->data['start_text'])) $this->data['start_text'] = "به ربات پیام ناشناس کلاغ پیامرسان خوش اومدی 🐦‍⬛🎩\nآموزش کار کامل با ربات : \nبرای شروع از دکمه ها استفاده کن 👇🏻";
        if (!isset($this->data['help_text'])) $this->data['help_text'] = "📚 راهنمای ربات:\n\n1. برای دریافت پیام از دکمه ✉️ استفاده کن\n2. برای ارسال پیام ناشناس، لینک خودت رو به دوستات بده\n3. در تنظیمات میتونی حالت نمایش پیام‌ها رو تغییر بدی\n4. میتونی کانال خودت رو برای جوین اجباری تنظیم کنی\n5. در شبکه اجتماعی میتونی پست منتشر کنی";
        if (!isset($this->data['support_text'])) $this->data['support_text'] = "📞 پشتیبانی:\n\nبرای ارتباط با پشتیبانی، پیام خود را در بخش تنظیمات -> پشتیبانی ارسال کنید.";
        if (!isset($this->data['rules_text'])) $this->data['rules_text'] = "📜 قوانین ربات:\n\n1. احترام به دیگر کاربران الزامی است.\n2. ارسال محتوای نامناسب ممنوع می‌باشد.\n3. از ارسال هرزنامه خودداری کنید.\n4. در صورت مشاهده تخلف، کاربر بلاک خواهد شد.";
        if (!isset($this->data['support_messages'])) $this->data['support_messages'] = [];
        if (!isset($this->data['message_counter'])) $this->data['message_counter'] = 0;
        if (!isset($this->data['last_update'])) $this->data['last_update'] = 0;
        if (!isset($this->data['advertisement'])) $this->data['advertisement'] = ['active' => false, 'type' => '', 'content' => '', 'file_id' => null, 'sent_to' => []];
        if (!isset($this->data['advertisement_message'])) $this->data['advertisement_message'] = [];
        if (!isset($this->data['spam_blocks'])) $this->data['spam_blocks'] = [];
        if (!isset($this->data['bad_words'])) $this->data['bad_words'] = [];
        if (!isset($this->data['message_log'])) $this->data['message_log'] = [];
        if (!isset($this->data['command_log'])) $this->data['command_log'] = [];
        if (!isset($this->data['command_blocks'])) $this->data['command_blocks'] = [];
        if (!isset($this->data['reports'])) $this->data['reports'] = [];
        if (!isset($this->data['pending_gifts'])) $this->data['pending_gifts'] = [];
        // FIX: فیلد جدید برای ذخیره لیست گیفت‌ها
        if (!isset($this->data['available_gifts'])) $this->data['available_gifts'] = [];
        if (!isset($this->data['gifts_last_updated'])) $this->data['gifts_last_updated'] = 0;
    }
    
    private function saveData() {
        $this->data['last_update'] = time();
        $json = json_encode($this->data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
        $encrypted = base64_encode($json);
        file_put_contents(DATA_FILE, $encrypted, LOCK_EX);
    }
    
    // FIX: دریافت لیست گیفت‌های موجود از تلگرام
    private function loadAvailableGifts() {
        $url = $this->apiUrl . "getAvailableGifts";
        $result = $this->sendRequest($url, []);
        $data = json_decode($result, true);
        if ($data && isset($data['ok']) && $data['ok']) {
            $this->data['available_gifts'] = $data['result'];
            $this->data['gifts_last_updated'] = time();
            $this->saveData();
        } else {
            $this->data['available_gifts'] = [];
        }
    }
    
    // FIX: پیدا کردن شناسه گیفت بر اساس نام (مثلاً teddy یا heart)
    private function getGiftIdByName($name) {
        $gifts = $this->data['available_gifts'] ?? [];
        // ابتدا به دنبال گیفتی با قیمت ۱۸ و نام مشابه می‌گردیم
        foreach ($gifts as $gift) {
            if (isset($gift['price']) && $gift['price'] == 18) {
                $title = isset($gift['title']) ? $gift['title'] : '';
                if (stripos($title, $name) !== false) {
                    return $gift['id'];
                }
            }
        }
        // اگر پیدا نشد، اولین گیفت با قیمت ۱۸ را برمی‌گردانیم
        foreach ($gifts as $gift) {
            if (isset($gift['price']) && $gift['price'] == 18) {
                return $gift['id'];
            }
        }
        return null;
    }
    
    private function processUpdate() {
        if (isset($this->update['message'])) {
            $message = $this->update['message'];
            $this->chatId = $message['chat']['id'];
            $this->userId = $message['from']['id'];
            $this->messageId = $message['message_id'];
            $this->text = isset($message['text']) ? trim($message['text']) : '';
            $this->caption = isset($message['caption']) ? trim($message['caption']) : '';
            
            $this->registerUser($message['from']);
            
            if (!$this->data['bot_active'] && !$this->isAdmin($this->userId)) {
                $this->sendMessage($this->chatId, "ربات در حال حاضر غیرفعال است. لطفا بعدا تلاش کنید.");
                return;
            }
            
            if (isset($message['text'])) $this->messageType = 'text';
            elseif (isset($message['photo'])) $this->messageType = 'photo';
            elseif (isset($message['video'])) $this->messageType = 'video';
            elseif (isset($message['voice'])) $this->messageType = 'voice';
            elseif (isset($message['document'])) $this->messageType = 'document';
            elseif (isset($message['audio'])) $this->messageType = 'audio';
            elseif (isset($message['video_note'])) $this->messageType = 'video_note';
            else $this->messageType = 'unknown';
            
            $isStartWithParam = (strpos($this->text, '/start ') === 0);
            if (!$isStartWithParam) {
                if (!$this->checkForcedJoinChannels($this->userId, true)) {
                    return;
                }
            }
            
            $this->processMessage();
            
        } elseif (isset($this->update['callback_query'])) {
            $callback = $this->update['callback_query'];
            $this->chatId = $callback['message']['chat']['id'];
            $this->userId = $callback['from']['id'];
            $this->messageId = $callback['message']['message_id'];
            $this->text = $callback['data'];
            
            $this->registerUser($callback['from']);
            
            if (!$this->data['bot_active'] && !$this->isAdmin($this->userId)) {
                $this->answerCallback($callback['id'], "ربات در حال حاضر غیرفعال است.");
                return;
            }
            
            
            $this->processCallback();
            $this->answerCallback($callback['id']);
        } elseif (isset($this->update['pre_checkout_query'])) {
            // پرداخت استارز
            $this->handlePreCheckoutQuery();
        } elseif (isset($this->update['successful_payment'])) {
            // پرداخت موفق
            $this->handleSuccessfulPayment();
        }
    }
    
    // بررسی عضویت در کانال‌های اجباری ربات
    private function checkForcedJoinChannels($userId, $showMessage = true) {
        if ($this->isAdmin($userId)) return true;
        $channelsToCheck = $this->data['forced_join'];
        $sendingTo = isset($this->data['users'][$userId]['sending_to']) ? $this->data['users'][$userId]['sending_to'] : null;
        if ($sendingTo) {
            $targetUser = $this->data['users'][$sendingTo] ?? null;
            if ($targetUser && !empty($targetUser['settings']['ad_channel'])) {
                $channelsToCheck[] = $targetUser['settings']['ad_channel'];
            }
        }
        $channelsToCheck = array_unique($channelsToCheck);
        if (empty($channelsToCheck)) return true;
        
        $notJoinedChannels = [];
        foreach ($channelsToCheck as $channel) {
            if (!$this->checkChannelMembership($userId, $channel)) {
                $notJoinedChannels[] = $channel;
            }
        }
        
        if (!empty($notJoinedChannels)) {
            if ($showMessage) {
                $this->showJoinRequiredMessage($userId, $notJoinedChannels);
            }
            return false;
        }
        return true;
    }
    
    private function showJoinRequiredMessage($userId, $notJoinedChannels) {
        $message = "🎩 برای ادامه کار خود باید در کانال ها یا گروه های زیر عضو شوید:\n\n";
        foreach ($notJoinedChannels as $channel) {
            $channelLink = str_replace('@', 'https://t.me/', $channel);
            $message .= "📢 {$channel}\n{$channelLink}\n\n";
        }
        $keyboard = [
            [
                ['text' => EMOJI_CHECK_JOIN . " بررسی عضویت", 'callback_data' => 'check_join_status']
            ]
        ];
        $replyMarkup = ['inline_keyboard' => $keyboard];
        $this->sendMessage($userId, $message, null, $replyMarkup);
    }
    
    private function checkChannelMembership($userId, $channel) {
        $chatId = str_replace('@', '', $channel);
        $url = $this->apiUrl . "getChatMember";
        $data = [
            'chat_id' => '@' . $chatId,
            'user_id' => $userId
        ];
        $result = $this->sendRequest($url, $data);
        $response = json_decode($result, true);
        if (!$response['ok']) return false;
        $status = $response['result']['status'];
        return in_array($status, ['member', 'administrator', 'creator']);
    }
    
    private function checkBotAdminInChannel($channel) {
        $chatId = str_replace('@', '', $channel);
        $botInfo = $this->getBotInfo();
        if (!$botInfo) return false;
        $url = $this->apiUrl . "getChatAdministrators";
        $data = ['chat_id' => '@' . $chatId];
        $result = $this->sendRequest($url, $data);
        $response = json_decode($result, true);
        if (!$response['ok']) return false;
        $botUserId = $botInfo['id'];
        foreach ($response['result'] as $admin) {
            if ($admin['user']['id'] == $botUserId) return true;
        }
        return false;
    }
    
    private function getBotInfo() {
        $url = $this->apiUrl . "getMe";
        $result = $this->sendRequest($url, []);
        $response = json_decode($result, true);
        if ($response['ok']) return $response['result'];
        return false;
    }
    
    private function registerUser($userData) {
        $userId = $userData['id'];
        if (!isset($this->data['users'][$userId])) {
            $username = isset($userData['username']) ? $userData['username'] : '';
            $firstName = isset($userData['first_name']) ? $userData['first_name'] : '';
            $lastName = isset($userData['last_name']) ? $userData['last_name'] : '';
            $link = $this->generateEncryptedLink();
            
            $this->data['users'][$userId] = [
                'id' => $userId,
                'username' => $username,
                'first_name' => $firstName,
                'last_name' => $lastName,
                'link' => $link,
                'joined_at' => time(),
                'contacts' => [],
                'settings' => [
                    'receive_mode' => 'notification',
                    'display_mode' => 'hidden',
                    'seen_notification' => true,
                    'bio' => '⚠️ بیوگرافی تنظیم نشده',
                    'signature' => '',
                    'ad_sensitivity' => false,
                    'ad_channel' => null,
                    'ad_text' => '',
                    'blocked_users' => [],
                    'anti_spam' => false,
                    'anti_abuse' => false,
                    'social_ban' => false,
                    'receive_active' => true,
                    'receive_filters' => [
                        'text' => true,
                        'voice' => true,
                        'video_note' => true,
                        'video' => true,
                        'photo' => true,
                        'audio' => true,
                        'document' => true
                    ],
                    'forward_channel' => null,
                    'forward_signature' => '',
                    'profile_photo' => null,
                    // ویژگی‌های جدید
                    'redirect_person' => null,        // آیدی کاربر مقصد برای ریدایرکت شخص
                    'redirect_channel' => null,       // آیدی کانال برای ریدایرکت
                ],
                'stats' => [
                    'sent' => 0,
                    'received' => 0,
                    'blocked_count' => 0
                ],
                'messages' => [
                    'inbox' => [],
                    'outbox' => []
                ],
                'admin' => $this->isAdmin($userId),
                'pending_action' => null,
                'pending_data' => null,
                'last_activity' => time(),
                'blocked' => false
            ];
            $this->saveData();
        } else {
            // اضافه کردن فیلدهای جدید برای کاربران قدیمی
            if (!isset($this->data['users'][$userId]['joined_at'])) {
                $this->data['users'][$userId]['joined_at'] = $this->data['users'][$userId]['last_activity'] ?? time();
            }
            if (!isset($this->data['users'][$userId]['contacts'])) {
                $this->data['users'][$userId]['contacts'] = [];
            }
            if (!isset($this->data['users'][$userId]['settings']['social_ban'])) {
                $this->data['users'][$userId]['settings']['social_ban'] = false;
            }
            if (!isset($this->data['users'][$userId]['settings']['receive_active'])) {
                $this->data['users'][$userId]['settings']['receive_active'] = true;
            }
            if (!isset($this->data['users'][$userId]['settings']['receive_filters'])) {
                $this->data['users'][$userId]['settings']['receive_filters'] = [
                    'text' => true,
                    'voice' => true,
                    'video_note' => true,
                    'video' => true,
                    'photo' => true,
                    'audio' => true,
                    'document' => true
                ];
            }
            if (!isset($this->data['users'][$userId]['settings']['forward_channel'])) {
                $this->data['users'][$userId]['settings']['forward_channel'] = null;
            }
            if (!isset($this->data['users'][$userId]['settings']['forward_signature'])) {
                $this->data['users'][$userId]['settings']['forward_signature'] = '';
            }
            if (!isset($this->data['users'][$userId]['settings']['profile_photo'])) {
                $this->data['users'][$userId]['settings']['profile_photo'] = null;
            }
            // فیلدهای جدید ریدایرکت
            if (!isset($this->data['users'][$userId]['settings']['redirect_person'])) {
                $this->data['users'][$userId]['settings']['redirect_person'] = null;
            }
            if (!isset($this->data['users'][$userId]['settings']['redirect_channel'])) {
                $this->data['users'][$userId]['settings']['redirect_channel'] = null;
            }
            $this->data['users'][$userId]['last_activity'] = time();
        }
    }
    
    private function isAdmin($userId) {
        return in_array($userId, $this->data['admins']) || $userId == ADMIN_ID;
    }
    
    private function generateEncryptedLink($length = 12) {
        $chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
        $link = '';
        for ($i = 0; $i < $length; $i++) {
            $link .= $chars[rand(0, strlen($chars) - 1)];
        }
        return $link;
    }
    
    private function processMessage() {
        if (strpos($this->text, '/') === 0 && !$this->isAdmin($this->userId)) {
            if (!$this->checkCommandSpam()) return;
        }
        
        if (isset($this->data['users'][$this->userId]['pending_action'])) {
            $this->handlePendingAction();
            return;
        }
        
        if (strpos($this->text, '/') === 0) {
            $this->processCommand();
        } else {
            if (isset($this->data['users'][$this->userId]['sending_to'])) {
                $this->processAnonymousMessage();
            } else {
                $this->processKeyboardButton();
            }
        }
    }
    
    private function checkCommandSpam() {
        $userId = $this->userId;
        $now = time();
        if (isset($this->data['command_blocks'][$userId]) && $this->data['command_blocks'][$userId] > $now) {
            $remaining = $this->data['command_blocks'][$userId] - $now;
            $this->sendMessage($this->chatId, "⏳ شما به دلیل ارسال سریع فرمان‌ها، به مدت {$remaining} ثانیه مسدود شده‌اید.");
            return false;
        }
        if (!isset($this->data['command_log'][$userId])) $this->data['command_log'][$userId] = [];
        $this->data['command_log'][$userId] = array_filter($this->data['command_log'][$userId], function($t) use ($now) {
            return $t > $now - 15;
        });
        $this->data['command_log'][$userId][] = $now;
        if (count($this->data['command_log'][$userId]) >= 20) {
            $this->data['command_blocks'][$userId] = $now + 120;
            $this->saveData();
            $this->sendMessage($this->chatId, "⛔ شما به دلیل ارسال بیش از حد فرمان، به مدت ۲ دقیقه از استفاده از ربات محروم شدید.");
            return false;
        }
        $this->saveData();
        return true;
    }
    
    private function processKeyboardButton() {
        $user = &$this->data['users'][$this->userId];
        switch ($this->text) {
            case EMOJI_MSG . " دریافت پیام":
                $this->showReceivedMessages();
                break;
            case EMOJI_LINK . " لینک پیامرسان من":
                $this->showMyLink();
                break;
            case EMOJI_NETWORK . " شبکه اجتماعی کلاغ پیامرسان":
                $this->showSocialNetwork();
                break;
            case EMOJI_SETTINGS . " تنظیمات":
                $this->showSettings();
                break;
            case EMOJI_SEND . " ارسال بدون لینک":
                $this->sendWithoutLink();
                break;
            default:
                $this->showMainMenu();
        }
    }
    
    private function processCommand() {
        $command = strtolower($this->text);
        switch (true) {
            case $command == '/start':
                $this->handleStart();
                break;
            case $command == '/newmsg':
                $this->showNewMessages();
                break;
            case $command == '/help':
                $this->showHelp();
                break;
            case $command == '/support':
                $this->showSupport();
                break;
            case $command == '/rules':
                $this->showRules();
                break;
            case $command == '/admin' && $this->isAdmin($this->userId):
                $this->showAdminPanel();
                break;
            case $command == '/id':
                $this->handleIdCommand();
                break;
            case strpos($command, '/start ') === 0:
                $param = substr($this->text, 7);
                $this->handleStartLink($param);
                break;
            case strpos($command, '/reply_') === 0 && $this->isAdmin($this->userId):
                $messageId = substr($command, 7);
                $this->handleAdminReply($messageId);
                break;
            case strpos($command, '/approve_') === 0 && $this->isAdmin($this->userId):
                $postId = substr($command, 9);
                $this->approvePost($postId);
                break;
            case strpos($command, '/reject_') === 0 && $this->isAdmin($this->userId):
                $postId = substr($command, 8);
                $this->rejectPost($postId);
                break;
            case strpos($command, '/reply_report_') === 0 && $this->isAdmin($this->userId):
                $parts = explode('_', $command);
                if (count($parts) == 4) {
                    $reportId = $parts[2];
                    $target = $parts[3]; // reporter یا sender
                    $this->handleAdminReplyReport($reportId, $target);
                }
                break;
            default:
                $this->showMainMenu();
        }
    }
    
    private function handleStart() {
        $startText = $this->data['start_text'];
        $this->sendMessage($this->chatId, $startText);
        $this->showMainMenu();
    }
    
    private function handleIdCommand() {
        $chat = $this->update['message']['chat'];
        $chatId = $chat['id'];
        $chatType = $chat['type'];
        
        // فقط در گروه یا کانال کار کند
        if ($chatType == 'private') {
            $this->sendMessage($this->chatId, "این دستور فقط در گروه یا کانال قابل استفاده است.");
            return;
        }
        
        // بررسی ادمین بودن ربات
        if (!$this->isBotAdminInChat($chatId)) {
            $this->sendMessage($this->chatId, "ربات در این چت ادمین نیست.");
            return;
        }
        
        $this->sendMessage($this->chatId, "🆔 آیدی عددی این چت: <code>{$chatId}</code>");
    }
    
    private function isBotAdminInChat($chatId) {
        $botInfo = $this->getBotInfo();
        if (!$botInfo) return false;
        $url = $this->apiUrl . "getChatMember";
        $data = [
            'chat_id' => $chatId,
            'user_id' => $botInfo['id']
        ];
        $result = $this->sendRequest($url, $data);
        $response = json_decode($result, true);
        if (!$response['ok']) return false;
        $status = $response['result']['status'];
        return in_array($status, ['administrator', 'creator']);
    }
    
    private function handleStartLink($param) {
        $this->isFromLink = true;
        $targetUserId = null;
        foreach ($this->data['users'] as $userId => $user) {
            if ($user['link'] === $param) {
                $targetUserId = $userId;
                $this->targetUserIdFromLink = $userId;
                break;
            }
        }
        
        if ($targetUserId) {
            if ($targetUserId == $this->userId) {
                $this->sendMessage($this->chatId, "با خودت چیکار داری 🥸😂");
                $this->data['users'][$this->userId]['sending_to'] = $targetUserId;
                $this->saveData();
                $targetName = $this->data['users'][$targetUserId]['first_name'];
                $bio = $this->data['users'][$targetUserId]['settings']['bio'];
                $message = "درحال ارسال پیام به {$targetName} هستی :)\nمی‌تونی هر حرف یا هر چیزی که دوست داری براش بفرستی؛ فقط یادت باشه این ربات یه پیام‌رسانه و اسمتو میبینه.";
                $keyboard = [
                    [
                        ['text' => EMOJI_CANCEL . " لغو ارسال پیام", 'callback_data' => 'cancel_send']
                    ],
                    [
                        ['text' => EMOJI_BIO_PREVIEW . " مشاهده بیوگرافی", 'callback_data' => "viewbio_{$targetUserId}"]
                    ]
                ];
                $replyMarkup = ['inline_keyboard' => $keyboard];
                $this->sendMessage($this->chatId, $message, null, $replyMarkup);
                return;
            }
            
            if (in_array($this->userId, $this->data['users'][$targetUserId]['settings']['blocked_users'])) {
                $this->sendMessage($this->chatId, "⚠️شما توسط این کاربر بلاک شده‌اید و نمی‌توانید پیام دهید!⛔");
                $blockerName = $this->data['users'][$this->userId]['first_name'];
                $keyboard = [
                    [
                        ['text' => EMOJI_UNBLOCK . ' آنبلاک کردن', 'callback_data' => "unblock_{$this->userId}_block_notif"]
                    ]
                ];
                $replyMarkup = ['inline_keyboard' => $keyboard];
                $this->sendMessage($targetUserId, "{$blockerName} قصد دارد به شما پیام دهد", null, $replyMarkup);
                $this->showMainMenu();
                return;
            }
            
            $this->data['users'][$this->userId]['sending_to'] = $targetUserId;
            $this->saveData();
            
            if (!$this->checkForcedJoinChannels($this->userId, true)) {
                return;
            }
            
            $targetUser = $this->data['users'][$targetUserId];
            $targetName = $targetUser['first_name'];
            $bio = $targetUser['settings']['bio'];
            $message = "درحال ارسال پیام به {$targetName} هستی :)\nمی‌تونی هر حرف یا هر چیزی که دوست داری براش بفرستی؛ فقط یادت باشه این ربات یه پیام‌رسانه و اسمتو میبینه.";
            $keyboard = [
                [
                    ['text' => EMOJI_CANCEL . " لغو ارسال پیام", 'callback_data' => 'cancel_send']
                ],
                [
                    ['text' => EMOJI_BIO_PREVIEW . " مشاهده بیوگرافی", 'callback_data' => "viewbio_{$targetUserId}"]
                ]
            ];
            $replyMarkup = ['inline_keyboard' => $keyboard];
            
            // اگر کاربر مقصد عکس پروفایل دارد، آن را نمایش بده
            if (!empty($targetUser['settings']['profile_photo'])) {
                $this->sendMedia($this->chatId, 'photo', $targetUser['settings']['profile_photo'], $message, $replyMarkup);
            } else {
                $this->sendMessage($this->chatId, $message, null, $replyMarkup);
            }
        } else {
            $this->sendMessage($this->chatId, "لینک نامعتبر است!");
            $this->showMainMenu();
        }
    }
    
    private function processAnonymousMessage() {
        $targetUserId = $this->data['users'][$this->userId]['sending_to'];
        if (!$targetUserId) {
            $this->showMainMenu();
            return;
        }
        
        $targetUser = &$this->data['users'][$targetUserId];
        
        if (!$targetUser['settings']['receive_active']) {
            $this->sendMessage($this->chatId, "⚠️ {$targetUser['first_name']} دریافت پیام خود را خاموش کرده است.");
            $this->sendMessage($targetUserId, "⚠️ یک نفر میخواست برایتان پیامی ارسال کند اما شما دریافت پیام را خاموش کرده اید. در صورتی که میخواهید پیام دریافت کنید به تنظیمات بروید و دریافت پیام را از بخش وضعیت دریافت پیام روشن نمایید.");
            unset($this->data['users'][$this->userId]['sending_to']);
            $this->saveData();
            return;
        }
        
        $filters = $targetUser['settings']['receive_filters'];
        $messageType = $this->messageType;
        $hasText = ($this->messageType === 'text' || !empty($this->caption));
        
        if ($messageType === 'text' && !$filters['text']) {
            $this->sendMessage($this->chatId, "⚠️ دریافت پیام متنی توسط گیرنده غیر فعال شده است.");
            $this->sendMessage($targetUserId, "⚠️ شخصی قصد دارد پیام متنی ارسال نماید اما شما دریافت آن را محدود کرده اید. در صورتی که مایل به دریافت آن هستید از تنظیمات دریافت پیام، دریافت متن را فعال کنید.");
            unset($this->data['users'][$this->userId]['sending_to']);
            $this->saveData();
            return;
        }
        
        $mediaType = $messageType;
        if ($mediaType !== 'text') {
            if (isset($filters[$mediaType]) && !$filters[$mediaType]) {
                $typeNames = [
                    'voice' => 'ویس',
                    'video_note' => 'ویدیو مسیج',
                    'video' => 'ویدیو',
                    'photo' => 'عکس',
                    'audio' => 'آهنگ',
                    'document' => 'فایل'
                ];
                $typeName = isset($typeNames[$mediaType]) ? $typeNames[$mediaType] : $mediaType;
                $this->sendMessage($this->chatId, "⚠️ دریافت پیام {$typeName} توسط گیرنده غیر فعال شده است.");
                $this->sendMessage($targetUserId, "⚠️ شخصی قصد دارد پیام {$typeName} ارسال نماید اما شما دریافت آن را محدود کرده اید. در صورتی که مایل به دریافت آن هستید از تنظیمات دریافت پیام، دریافت {$typeName} را فعال کنید.");
                unset($this->data['users'][$this->userId]['sending_to']);
                $this->saveData();
                return;
            }
        }
        
        if (in_array($this->userId, $targetUser['settings']['blocked_users'])) {
            $this->sendMessage($this->chatId, "⚠️شما توسط این کاربر بلاک شده‌اید و نمی‌توانید پیام دهید!⛔");
            unset($this->data['users'][$this->userId]['sending_to']);
            $this->saveData();
            return;
        }
        
        if ($targetUser['settings']['anti_spam']) {
            $blockKey = $this->userId . '_' . $targetUserId;
            if (isset($this->data['spam_blocks'][$blockKey]) && $this->data['spam_blocks'][$blockKey] > time()) {
                $this->sendMessage($this->chatId, "⏳ شما به دلیل ارسال پیام‌های مکرر به این کاربر، به مدت ۱ ساعت مسدود شده‌اید.");
                unset($this->data['users'][$this->userId]['sending_to']);
                $this->saveData();
                return;
            }
        }
        
        if ($targetUser['settings']['ad_sensitivity']) {
            $checkText = $this->messageType === 'text' ? $this->text : $this->caption;
            if ($this->containsAds($checkText)) {
                $this->sendMessage($this->chatId, "پیام شما تبلیغ است و تبلیغات توسط گیرنده محدود شده است.");
                unset($this->data['users'][$this->userId]['sending_to']);
                $this->saveData();
                return;
            }
        }
        
        if ($targetUser['settings']['anti_abuse']) {
            $checkText = $this->messageType === 'text' ? $this->text : $this->caption;
            if (!empty($this->data['bad_words']) && $this->containsBadWords($checkText)) {
                $this->sendMessage($this->chatId, "⚠️ پیام شما شامل کلمات نامناسب یا تهدید آمیز میباشد. گیرنده دریافت چنین پیام‌هایی را محدود کرده است.");
                unset($this->data['users'][$this->userId]['sending_to']);
                $this->saveData();
                return;
            }
        }
        
        $messageId = 'msg_' . time() . '_' . $this->data['message_counter']++;
        
        $messageData = [
            'id' => $messageId,
            'from' => $this->userId,
            'type' => $this->messageType,
            'content' => $this->encryptMessage($this->messageType === 'text' ? $this->text : ($this->caption ?: '')),
            'timestamp' => time(),
            'read' => false,
            'replied' => false,
            'reactions' => [],
            'ad_sent' => false,
            'deleted' => false,
            'saved' => false, // جدید: ذخیره شده یا نه
            'telegram_message_id' => null
        ];
        
        if ($this->messageType != 'text') {
            $messageData['file_id'] = $this->getFileId();
        }
        
        $this->data['users'][$targetUserId]['messages']['inbox'][] = $messageData;
        
        $outboxMessage = $messageData;
        $outboxMessage['to'] = $targetUserId;
        $outboxMessage['telegram_message_id'] = null;
        $this->data['users'][$this->userId]['messages']['outbox'][] = $outboxMessage;
        
        $this->data['users'][$this->userId]['stats']['sent']++;
        $this->data['users'][$targetUserId]['stats']['received']++;
        
        // به‌روزرسانی contacts
        if (!in_array($targetUserId, $this->data['users'][$this->userId]['contacts'])) {
            $this->data['users'][$this->userId]['contacts'][] = $targetUserId;
        }
        if (!in_array($this->userId, $this->data['users'][$targetUserId]['contacts'])) {
            $this->data['users'][$targetUserId]['contacts'][] = $this->userId;
        }
        
        $logKey = $this->userId . '_' . $targetUserId;
        if (!isset($this->data['message_log'][$logKey])) $this->data['message_log'][$logKey] = [];
        $this->data['message_log'][$logKey] = array_filter($this->data['message_log'][$logKey], function($t) {
            return $t > time() - 60;
        });
        $this->data['message_log'][$logKey][] = time();
        
        unset($this->data['users'][$this->userId]['sending_to']);
        $this->saveData();
        
        $confirmMessage = "پیام شما با موفقیت ارسال شد! ✅";
        $deleteButton = [
            'text' => EMOJI_DELETE_MSG . " حذف پیام",
            'callback_data' => 'delete_msg_' . $outboxMessage['id']
        ];
        $keyboard = [[$deleteButton]];
        $replyMarkup = ['inline_keyboard' => $keyboard];
        $response = $this->sendMessage($this->chatId, $confirmMessage, null, $replyMarkup);
        
        if ($response && isset($response['result']['message_id'])) {
            $outboxIndex = array_key_last($this->data['users'][$this->userId]['messages']['outbox']);
            $this->data['users'][$this->userId]['messages']['outbox'][$outboxIndex]['confirm_msg_id'] = $response['result']['message_id'];
            $this->saveData();
        }
        
        $this->notifyReceiver($targetUserId, $messageId);
        $this->showMainMenu();
    }
    
    private function containsBadWords($text) {
        if (empty($text)) return false;
        $textLower = mb_strtolower($text, 'UTF-8');
        foreach ($this->data['bad_words'] as $word) {
            if (mb_strpos($textLower, mb_strtolower($word, 'UTF-8')) !== false) return true;
        }
        return false;
    }
    
    private function checkSpamThresholds($senderId, $recipientId) {
        $logKey = $senderId . '_' . $recipientId;
        if (!isset($this->data['message_log'][$logKey])) return false;
        $now = time();
        $timestamps = $this->data['message_log'][$logKey];
        $last15Sec = array_filter($timestamps, function($t) use ($now) {
            return $t > $now - 15;
        });
        if (count($last15Sec) >= 10) return true;
        $last60Sec = array_filter($timestamps, function($t) use ($now) {
            return $t > $now - 60;
        });
        if (count($last60Sec) >= 30) return true;
        return false;
    }
    
    private function containsAds($text) {
        if (empty($text)) return false;
        $adPatterns = ['@', 'http://', 'https://', 't.me/', 'telegram.me/', 'joinchat/', '.com', '.ir', '.org', '.net', '.me', 'www.'];
        foreach ($adPatterns as $pattern) {
            if (stripos($text, $pattern) !== false) return true;
        }
        return false;
    }
    
    private function getFileId() {
        $message = $this->update['message'];
        switch ($this->messageType) {
            case 'photo':
                $photos = $message['photo'];
                $photo = end($photos);
                return $photo['file_id'];
            case 'video':
                return $message['video']['file_id'];
            case 'voice':
                return $message['voice']['file_id'];
            case 'document':
                return $message['document']['file_id'];
            case 'audio':
                return $message['audio']['file_id'];
            case 'video_note':
                return $message['video_note']['file_id'];
            default:
                return null;
        }
    }
    
    private function encryptMessage($message) {
        return base64_encode($message);
    }
    
    private function decryptMessage($encrypted) {
        return base64_decode($encrypted);
    }
    
    private function notifyReceiver($userId, $messageId) {
        $user = $this->data['users'][$userId];
        if ($user['settings']['receive_mode'] === 'notification') {
            $message = "کلاغ پیام های جدیدی برایتان اورده 🐦‍⬛\nبرای مشاهده /newmsg";
            $this->sendMessage($userId, $message);
        } else {
            $this->showMessage($userId, $messageId);
        }
    }
    
    // نمایش پیام (بازنویسی شده با دکمه‌های جدید)
    private function showMessage($userId, $messageId) {
        $user = &$this->data['users'][$userId];
        $messageIndex = null;
        foreach ($user['messages']['inbox'] as $index => $msg) {
            if ($msg['id'] === $messageId) {
                $messageIndex = $index;
                break;
            }
        }
        if ($messageIndex === null) return null;
        $message = &$user['messages']['inbox'][$messageIndex];
        
        if ($message['deleted']) {
            $this->sendMessage($userId, "❌ این پیام توسط فرستنده حذف شده است.");
            return null;
        }
        
        $senderId = $message['from'];
        $sender = $this->data['users'][$senderId];
        
        if (!$message['read']) {
            $message['read'] = true;
            if ($sender['settings']['seen_notification']) {
                $seenMessage = "پیام شما دیده شد ☝🏻";
                $this->sendMessage($senderId, $seenMessage, $this->findOriginalMessageId($senderId, $messageId));
            }
        }
        
        $messageText = "📨 پیام جدید:\n\n";
        if ($message['type'] === 'text') {
            $messageText .= $this->decryptMessage($message['content']);
        } else {
            $messageText .= $this->decryptMessage($message['content']) . "\n\n[پیام " . $message['type'] . "]";
        }
        
        if (!empty($sender['settings']['signature'])) {
            $messageText .= "\n\n" . $sender['settings']['signature'];
        }
        
        $keyboard = [];
        $isBlocked = in_array($senderId, $user['settings']['blocked_users']);
        
        if ($isBlocked) {
            $keyboard[] = [
                ['text' => EMOJI_UNBLOCK . " آنبلاک کردن", 'callback_data' => "unblock_{$senderId}_{$messageId}"]
            ];
        } else {
            // ردیف 1: گزارش و ارسال به کانال
            $keyboard[] = [
                ['text' => EMOJI_REPORT . " گزارش پیام", 'callback_data' => "report_message_{$messageId}"],
                ['text' => EMOJI_FORWARD . " ارسال به کانال", 'callback_data' => "forward_to_channel_{$messageId}"]
            ];
            
            // ردیف 2: هدیه و ذخیره (با وضعیت ذخیره)
            $saveText = $message['saved'] ? "💾 لغو ذخیره سازی" : "💾 ذخیره پیام";
            $keyboard[] = [
                ['text' => EMOJI_GIFT . " ارسال هدیه", 'callback_data' => "gift_message_{$messageId}"],
                ['text' => $saveText, 'callback_data' => "save_message_{$messageId}"]
            ];
            
            // ردیف 3: ری اکشن و ارسال تبلیغ
            $keyboard[] = [
                ['text' => EMOJI_REACTION . " ری اکشن", 'callback_data' => "reaction_{$messageId}"],
                ['text' => EMOJI_AD . " ارسال تبلیغ", 'callback_data' => "sendad_{$senderId}_{$messageId}"]
            ];
            
            // ردیف 4: پاسخ و بلاک
            $keyboard[] = [
                ['text' => EMOJI_REPLY . " پاسخ", 'callback_data' => "reply_{$messageId}"],
                ['text' => EMOJI_BLOCK . " بلاک کردن", 'callback_data' => "block_{$senderId}_{$messageId}"]
            ];
            
            // ردیف 5: مشاهده فرستنده
            $keyboard[] = [
                ['text' => EMOJI_VIEW . " مشاهده فرستنده", 'callback_data' => "viewsender_{$senderId}_{$messageId}"]
            ];
        }
        
        $keyboard[] = [
            ['text' => EMOJI_BACK . " بازگشت", 'callback_data' => "back_inbox"]
        ];
        
        $replyMarkup = ['inline_keyboard' => $keyboard];
        $sentMessageId = null;
        if ($message['type'] === 'text') {
            $response = $this->sendMessage($userId, $messageText, null, $replyMarkup);
        } else {
            $response = $this->sendMedia($userId, $message['type'], $message['file_id'], $messageText, $replyMarkup);
        }
        
        if ($response && isset($response['result']['message_id'])) {
            $message['telegram_message_id'] = $response['result']['message_id'];
            $this->saveData();
        }
        
        return $message['telegram_message_id'];
    }
    
    private function findOriginalMessageId($userId, $messageId) {
        foreach ($this->data['users'][$userId]['messages']['outbox'] as $msg) {
            if ($msg['id'] === $messageId) {
                return null;
            }
        }
        return null;
    }
    
    private function showNewMessages() {
        if ($this->data['advertisement']['active'] && !in_array($this->userId, $this->data['advertisement']['sent_to'])) {
            $this->showAdvertisement();
            $this->data['advertisement']['sent_to'][] = $this->userId;
            $this->saveData();
            return;
        }
        
        $user = $this->data['users'][$this->userId];
        $unreadMessages = [];
        foreach ($user['messages']['inbox'] as $msg) {
            if (!$msg['read']) $unreadMessages[] = $msg;
        }
        
        if (empty($unreadMessages)) {
            $this->sendMessage($this->chatId, "📭 پیام جدیدی ندارید.");
            $this->showMainMenu();
            return;
        }
        
        $this->sendMessage($this->chatId, "📬 پیام‌های خوانده نشده شما (".count($unreadMessages)."):");
        foreach ($unreadMessages as $msg) {
            $this->showMessage($this->userId, $msg['id']);
        }
    }
    
    private function showAdvertisement() {
        $ad = $this->data['advertisement'];
        if ($ad['type'] === 'text') {
            $this->sendMessage($this->chatId, $ad['content']);
        } else {
            $this->sendMedia($this->chatId, $ad['type'], $ad['file_id'], $ad['content']);
        }
        $this->showMainMenu();
    }
    
    private function showReceivedMessages() {
        $user = $this->data['users'][$this->userId];
        if (empty($user['messages']['inbox'])) {
            $this->sendMessage($this->chatId, "📭 پیامی برای نمایش وجود ندارد.");
            $this->showMainMenu();
            return;
        }
        if ($user['settings']['receive_mode'] === 'notification') {
            $this->showNewMessages();
        } else {
            $lastMessage = end($user['messages']['inbox']);
            $this->showMessage($this->userId, $lastMessage['id']);
        }
    }
    
    private function showMainMenu() {
        $keyboard = [
            [
                ['text' => EMOJI_MSG . " دریافت پیام"]
            ],
            [
                ['text' => EMOJI_LINK . " لینک پیامرسان من"],
                ['text' => EMOJI_NETWORK . " شبکه اجتماعی کلاغ پیامرسان"]
            ],
            [
                ['text' => EMOJI_SETTINGS . " تنظیمات"],
                ['text' => EMOJI_SEND . " ارسال بدون لینک"]
            ]
        ];
        $replyMarkup = ['keyboard' => $keyboard, 'resize_keyboard' => true, 'one_time_keyboard' => false];
        $message = "منوی اصلی ربات:\nبرای شروع از دکمه‌ها استفاده کنید 👇🏻";
        $this->sendMessage($this->chatId, $message, null, $replyMarkup);
    }
    
    private function showMyLink() {
        $user = $this->data['users'][$this->userId];
        $username = $user['first_name'] . ($user['last_name'] ? ' ' . $user['last_name'] : '');
        $link = "https://t.me/" . BOT_USERNAME . "?start=" . $user['link'];
        $message = "سلام {$username} هستم ✋\nاز طریق لینک زیر می‌تونی پیامت رو برام بفرستی 🤫\n\n{$link}";
        $keyboard = [
            [
                ['text' => '🔗 اشتراک گذاری', 'url' => 'https://t.me/share/url?url=' . urlencode($link)],
                ['text' => EMOJI_BACK . " بازگشت", 'callback_data' => 'main_menu']
            ]
        ];
        $replyMarkup = ['inline_keyboard' => $keyboard];
        $this->sendMessage($this->chatId, $message, null, $replyMarkup);
    }
    
    private function showSocialNetwork() {
        $message = "به شبکه اجتماعی داخلی کلاغ پیامرسان خوشامدید 🎩\n\nدر اینجا میتوانید پست مورد نظر خود را که شامل متن خالی یا عکس و متن و ویدیو و متن باشد را ارسال نمایید. \nپس از تایید پست شما در کانال ما قرار خواهد گرفت و کلاغ پیام شمارا منتشر خواهد کرد🐦‍⬛";
        $keyboard = [
            [
                ['text' => '📱انتشار پست', 'callback_data' => 'post_publish'],
                ['text' => '📑مشاهده شبکه', 'callback_data' => 'view_network']
            ],
            [
                ['text' => EMOJI_BACK . " بازگشت", 'callback_data' => 'main_menu']
            ]
        ];
        $replyMarkup = ['inline_keyboard' => $keyboard];
        $this->sendMessage($this->chatId, $message, null, $replyMarkup);
    }
    
    // نمایش تنظیمات - اضافه شدن دکمه‌های جدید
    private function showSettings() {
        $message = "به بخش تنظیمات ربات خوش اومدی🛠☺️";
        $keyboard = [
            [
                ['text' => EMOJI_CHANGE_LINK . " تغییر لینک پیامرسان", 'callback_data' => 'change_link'],
                ['text' => EMOJI_NAME . " نام پیامرسان من", 'callback_data' => 'change_name']
            ],
            [
                ['text' => EMOJI_RECEIVE_SETTINGS . " نحوه دریافت پیام من و حالت نمایش من", 'callback_data' => 'receive_settings']
            ],
            [
                ['text' => EMOJI_SEEN_NOTIFY . " اعلان دیده شدن", 'callback_data' => 'seen_notification'],
                ['text' => EMOJI_BIO . " بیو پیامرسان", 'callback_data' => 'change_bio']
            ],
            [
                ['text' => EMOJI_STATS . " آمار", 'callback_data' => 'stats'],
                ['text' => EMOJI_CHANNEL . " کانال من و تبلیغ", 'callback_data' => 'channel_settings']
            ],
            [
                ['text' => EMOJI_SIGNATURE . " امضای پیام ها", 'callback_data' => 'signature_settings'],
                ['text' => EMOJI_DELETE_BLOCKS . " حذف همه بلاک ها", 'callback_data' => 'delete_all_blocks']
            ],
            [
                ['text' => EMOJI_AD_SENSITIVITY . " حساسیت به تبلیغات", 'callback_data' => 'show_ad_sensitivity'],
                ['text' => EMOJI_SUPPORT . " پشتیبانی", 'callback_data' => 'support']
            ],
            [
                ['text' => EMOJI_ANTI_ABUSE . " ضد توهین و تحدید", 'callback_data' => 'show_anti_abuse'],
                ['text' => EMOJI_ANTI_SPAM . " ضد اسپم", 'callback_data' => 'show_anti_spam']
            ],
            [
                ['text' => EMOJI_RECEIVE_MANAGE . " مدیریت دریافت پیام", 'callback_data' => 'receive_filters'],
                ['text' => EMOJI_RECEIVE_STATUS . " وضعیت دریافت پیام", 'callback_data' => 'receive_status']
            ],
            // دکمه‌های قبلی
            [
                ['text' => '📣 پیام همگانی', 'callback_data' => 'broadcast_message'],
                ['text' => '🖼 عکس پروفایل', 'callback_data' => 'profile_photo']
            ],
            [
                ['text' => '📣 کانال ارسال پیام', 'callback_data' => 'forward_channel_settings'],
                ['text' => '📚 راهنما و قوانین', 'callback_data' => 'help_and_rules']
            ],
            // دکمه‌های جدید
            [
                ['text' => EMOJI_REDIRECT . " ری دایرکت", 'callback_data' => 'redirect_settings'],
                ['text' => EMOJI_ACCOUNT . " اطلاعات اکانت", 'callback_data' => 'account_info']
            ],
            [
                ['text' => EMOJI_BACK . " بازگشت", 'callback_data' => 'main_menu']
            ]
        ];
        $replyMarkup = ['inline_keyboard' => $keyboard];
        $this->sendMessage($this->chatId, $message, null, $replyMarkup);
    }
    
    // --- تنظیمات ری دایرکت ---
    private function showRedirectSettings() {
        $user = $this->data['users'][$this->userId];
        $person = $user['settings']['redirect_person'] ?: 'تنظیم نشده';
        $channel = $user['settings']['redirect_channel'] ?: 'تنظیم نشده';
        
        $message = "🔀 ری دایرکت کردن پیام‌ها\n\n";
        $message .= "👥 شما می‌توانید با فرستادن آیدی یا آیدی عددی شخصی دیگر که ربات را استارت کرده است پیام‌های دریافتی خود را هم‌زمان برای شخصی دیگر ارسال نمایید.\n";
        $message .= "کافیست آیدی عددی یا آیدی آن شخص را ارسال نمایید و کد تاییدی که برایش ارسال می‌شود را برای ربات بفرستید.\n\n";
        $message .= "📣 همچنین می‌توانید ربات را ادمین کانال کرده و کدی که ربات به شما می‌دهد را در آن کانال پست کنید و آن را برای ربات فوروارد نمایید.\n\n";
        $message .= "⚠️ اگر ریدایرکت به کانال باشد ادمین‌های کانال قادر به استفاده از دکمه‌های پاسخ‌دهی، بلاک و... خواهند بود.\n\n";
        $message .= "🔄 وضعیت فعلی:\n";
        $message .= "👤 شخص: {$person}\n";
        $message .= "📢 کانال: {$channel}";
        
        $keyboard = [
            [
                ['text' => '🗑 قطع ری دایرکت شخص', 'callback_data' => 'redirect_remove_person'],
                ['text' => '👤 ری دایرکت شخص', 'callback_data' => 'redirect_add_person']
            ],
            [
                ['text' => '🗑 قطع ریدایرکت کانال', 'callback_data' => 'redirect_remove_channel'],
                ['text' => '📣 ری دایرکت کانال', 'callback_data' => 'redirect_add_channel']
            ],
            [
                ['text' => EMOJI_BACK . " بازگشت", 'callback_data' => 'settings']
            ]
        ];
        $replyMarkup = ['inline_keyboard' => $keyboard];
        $this->sendMessage($this->chatId, $message, null, $replyMarkup);
    }
    
    private function redirectAddPerson() {
        $this->data['users'][$this->userId]['pending_action'] = 'redirect_person_input';
        $this->saveData();
        $this->sendMessage($this->chatId, "لطفا آیدی عددی یا @username شخصی که می‌خواهید پیام‌ها به او نیز ارسال شود را وارد کنید:");
    }
    
    private function redirectPersonInput() {
        $target = trim($this->text);
        $targetUserId = $this->findUserId($target);
        if (!$targetUserId) {
            $this->sendMessage($this->chatId, "❌ کاربر یافت نشد.");
            return;
        }
        if ($targetUserId == $this->userId) {
            $this->sendMessage($this->chatId, "❌ نمی‌توانید به خودتان ریدایرکت کنید.");
            return;
        }
        // تولید کد ۶ رقمی
        $code = rand(100000, 999999);
        $this->data['users'][$this->userId]['pending_action'] = 'redirect_person_verify';
        $this->data['users'][$this->userId]['pending_data'] = ['target' => $targetUserId, 'code' => $code];
        $this->saveData();
        
        // ارسال کد به کاربر مقصد
        $this->sendMessage($targetUserId, "🔐 کاربری با نام {$this->data['users'][$this->userId]['first_name']} می‌خواهد پیام‌های دریافتی خود را به شما نیز ریدایرکت کند.\nکد تأیید: <code>{$code}</code>\nلطفاً این کد را برای او ارسال کنید.");
        
        $this->sendMessage($this->chatId, "✅ یک کد ۶ رقمی برای کاربر مقصد ارسال شد. لطفاً کد را از او دریافت و اینجا وارد کنید:");
    }
    
    private function redirectPersonVerify() {
        $code = intval($this->text);
        $pending = $this->data['users'][$this->userId]['pending_data'];
        if ($code == $pending['code']) {
            $this->data['users'][$this->userId]['settings']['redirect_person'] = $pending['target'];
            $this->data['users'][$this->userId]['pending_action'] = null;
            $this->data['users'][$this->userId]['pending_data'] = null;
            $this->saveData();
            $this->sendMessage($this->chatId, "✅ ریدایرکت به شخص با موفقیت فعال شد.");
        } else {
            $this->sendMessage($this->chatId, "❌ کد اشتباه است. لطفاً دوباره تلاش کنید.");
        }
        $this->showRedirectSettings();
    }
    
    private function redirectRemovePerson() {
        $this->data['users'][$this->userId]['settings']['redirect_person'] = null;
        $this->saveData();
        $this->sendMessage($this->chatId, "✅ ریدایرکت شخص قطع شد.");
        $this->showRedirectSettings();
    }
    
    private function redirectAddChannel() {
        // تولید کد ۸ رقمی
        $code = rand(10000000, 99999999);
        $this->data['users'][$this->userId]['pending_action'] = 'redirect_channel_verify';
        $this->data['users'][$this->userId]['pending_data'] = ['code' => $code];
        $this->saveData();
        
        $message = "برای فعال‌سازی ریدایرکت به کانال:\n\n";
        $message .= "1️⃣ ابتدا ربات را در کانال خود ادمین کنید.\n";
        $message .= "2️⃣ سپس کد زیر را در کانال پست کرده و همان پست را برای من فوروارد کنید.\n\n";
        $message .= "#️⃣ کد: <code>{$code}</code>";
        
        $this->sendMessage($this->chatId, $message);
    }
    
    private function redirectChannelVerify() {
        $pending = $this->data['users'][$this->userId]['pending_data'];
        $expectedCode = $pending['code'];
        
        if (!isset($this->update['message']['forward_from_chat'])) {
            $this->sendMessage($this->chatId, "❌ لطفاً پیام را از کانال خود فوروارد کنید.");
            return;
        }
        
        $forwardChat = $this->update['message']['forward_from_chat'];
        if ($forwardChat['type'] !== 'channel') {
            $this->sendMessage($this->chatId, "❌ این پیام از یک کانال فوروارد نشده است.");
            return;
        }
        
        $forwardedText = $this->text;
        if (trim($forwardedText) != $expectedCode) {
            $this->sendMessage($this->chatId, "❌ کد ارسال شده مطابقت ندارد.");
            return;
        }
        
        // بررسی ادمین بودن ربات
        $channelUsername = null;
        if (isset($forwardChat['username'])) {
            $channelUsername = '@' . $forwardChat['username'];
        } else {
            $this->sendMessage($this->chatId, "❌ کانال شما نام کاربری ندارد. لطفاً برای کانال خود یوزرنیم تنظیم کنید.");
            return;
        }
        
        if (!$this->checkBotAdminInChannel($channelUsername)) {
            $this->sendMessage($this->chatId, "❌ ربات در کانال {$channelUsername} ادمین نیست.");
            return;
        }
        
        $this->data['users'][$this->userId]['settings']['redirect_channel'] = $channelUsername;
        $this->data['users'][$this->userId]['pending_action'] = null;
        $this->data['users'][$this->userId]['pending_data'] = null;
        $this->saveData();
        
        $this->sendMessage($this->chatId, "✅ ریدایرکت به کانال با موفقیت فعال شد.");
        $this->showRedirectSettings();
    }
    
    private function redirectRemoveChannel() {
        $this->data['users'][$this->userId]['settings']['redirect_channel'] = null;
        $this->saveData();
        $this->sendMessage($this->chatId, "✅ ریدایرکت کانال قطع شد.");
        $this->showRedirectSettings();
    }
    
    // --- اطلاعات اکانت ---
    private function showAccountInfo() {
        $user = $this->data['users'][$this->userId];
        $joined = date('Y-m-d H:i:s', $user['joined_at']);
        $bio = $user['settings']['bio'];
        $name = $user['first_name'] . ' ' . $user['last_name'];
        $username = $user['username'] ? '@' . $user['username'] : 'ندارد';
        $photo = $user['settings']['profile_photo'];
        
        $message = "👤 اطلاعات اکانت شما:\n\n";
        $message .= "📛 نام: {$name}\n";
        $message .= "👤 یوزرنیم: {$username}\n";
        $message .= "🆔 آیدی عددی: {$this->userId}\n";
        $message .= "📝 بیوگرافی: {$bio}\n";
        $message .= "📅 تاریخ عضویت: {$joined}\n";
        
        if ($photo) {
            $this->sendMedia($this->chatId, 'photo', $photo, $message);
        } else {
            $this->sendMessage($this->chatId, $message);
        }
    }
    
    // --- تنظیمات کانال ارسال پیام ---
    private function showForwardChannelSettings() {
        $user = $this->data['users'][$this->userId];
        $channel = $user['settings']['forward_channel'] ?: 'تنظیم نشده';
        $signature = $user['settings']['forward_signature'] ?: 'تنظیم نشده';
        
        $message = "📤 قابلیت ارسال پیام به کانال به شما کمک میکند تا دیگر نیازی به کپی و پیست کردن پیام به کانال خود نداشته باشید و با زدن یک دکمه پیام دیگران را ربات به کانالتان هدایت میکند.\n\n";
        $message .= "✍ همچنین میتوانید برای پست های خود امضا تنظیم کنید مانند آیدی کانالتان تا به صورت خودکار زیر پست قرار گیرند.\n\n";
        $message .= "📢 کانال فعلی: {$channel}\n";
        $message .= "🖋 امضای فعلی: {$signature}";
        
        $keyboard = [
            [
                ['text' => EMOJI_ADD_CHANNEL . " افزودن کانال", 'callback_data' => 'forward_add_channel'],
                ['text' => EMOJI_DELETE_CHANNEL . " حذف کانال", 'callback_data' => 'forward_remove_channel']
            ],
            [
                ['text' => EMOJI_SET_SIGNATURE . " افزودن امضا", 'callback_data' => 'forward_add_signature'],
                ['text' => EMOJI_DELETE_SIGNATURE . " حذف امضا", 'callback_data' => 'forward_remove_signature']
            ],
            [
                ['text' => EMOJI_BACK . " بازگشت", 'callback_data' => 'settings']
            ]
        ];
        $replyMarkup = ['inline_keyboard' => $keyboard];
        $this->sendMessage($this->chatId, $message, null, $replyMarkup);
    }
    
    // --- راهنما و قوانین ---
    private function showHelpAndRules() {
        $message = "📚 برای مشاهده آموزش ها و راهنمای کار با ربات دستور /help را ارسال کنید.\n\n⚖ برای مشاهده قوانین ربات و مقررات و سیاست های ما دستور /rules را ارسال نمایید.";
        $this->sendMessage($this->chatId, $message);
    }
    
    private function sendWithoutLink() {
        $this->data['users'][$this->userId]['pending_action'] = 'send_without_link';
        $this->saveData();
        $this->sendMessage($this->chatId, "لطفا آیدی عددی یا @username شخص مورد نظر را ارسال کنید:");
    }
    
    // پردازش کلیک دکمه‌ها
    private function processCallback() {
        $data = $this->text;
        
        // بررسی عضویت
        if ($data === 'check_join_status') {
            $this->handleCheckJoinStatus();
        }
        elseif (strpos($data, 'delete_msg_') === 0) {
            $this->handleDeleteMessage($data);
        }
        elseif ($data === 'cancel_send') {
            unset($this->data['users'][$this->userId]['sending_to']);
            $this->saveData();
            $this->answerCallback($this->update['callback_query']['id'], "ارسال پیام لغو شد.");
            $this->showMainMenu();
        }
        elseif ($data === 'show_anti_spam') {
            $this->showAntiSpamMenu();
        }
        elseif ($data === 'show_anti_abuse') {
            $this->showAntiAbuseMenu();
        }
        elseif ($data === 'show_ad_sensitivity') {
            $this->showAdSensitivityMenu();
        }
        elseif ($data === 'toggle_anti_spam') {
            $this->toggleAntiSpam();
        }
        elseif ($data === 'toggle_anti_abuse') {
            $this->toggleAntiAbuse();
        }
        elseif ($data === 'toggle_ad_sensitivity') {
            $this->toggleAdSensitivity();
        }
        elseif ($data === 'admin_bad_words') {
            $this->adminBadWordsMenu();
        }
        elseif ($data === 'admin_add_badword') {
            $this->adminRequestAddBadWord();
        }
        elseif ($data === 'admin_list_badwords') {
            $this->adminListBadWords();
        }
        elseif (strpos($data, 'admin_remove_badword_') === 0) {
            $this->adminRemoveBadWord($data);
        }
        elseif ($data === 'admin_text_settings') {
            $this->adminTextSettings();
        }
        elseif ($data === 'admin_set_rules') {
            $this->adminSetRules();
        }
        elseif ($data === 'admin_social_ban_menu') {
            $this->adminSocialBanMenu();
        }
        elseif ($data === 'admin_social_ban_user') {
            $this->adminSocialBanUser();
        }
        elseif ($data === 'admin_social_unban_user') {
            $this->adminSocialUnbanUser();
        }
        elseif ($data === 'receive_filters') {
            $this->showReceiveFiltersMenu();
        }
        elseif (strpos($data, 'toggle_filter_') === 0) {
            $this->toggleReceiveFilter($data);
        }
        elseif ($data === 'receive_status') {
            $this->showReceiveStatusMenu();
        }
        elseif ($data === 'toggle_receive_active') {
            $this->toggleReceiveActive();
        }
        elseif (strpos($data, 'reaction_') === 0) {
            $this->handleReaction($data);
        }
        elseif (strpos($data, 'react_') === 0) {
            $this->sendReaction($data);
        }
        elseif (strpos($data, 'back_to_msg_') === 0) {
            $messageId = str_replace('back_to_msg_', '', $data);
            $this->showMessage($this->userId, $messageId);
        }
        elseif (strpos($data, 'viewbio_') === 0) {
            $targetUserId = str_replace('viewbio_', '', $data);
            $this->showUserBio($targetUserId);
        }
        elseif (strpos($data, 'sendad_') === 0) {
            $this->handleSendAd($data);
        }
        elseif (strpos($data, 'reply_') === 0) {
            $this->handleReply($data);
        }
        elseif (strpos($data, 'block_') === 0) {
            $this->handleBlock($data);
        }
        elseif (strpos($data, 'confirm_block_') === 0) {
            $this->confirmBlock($data);
        }
        elseif (strpos($data, 'cancel_block_') === 0) {
            $this->cancelBlock($data);
        }
        elseif (strpos($data, 'unblock_') === 0) {
            $this->handleUnblock($data);
        }
        elseif (strpos($data, 'viewsender_') === 0) {
            $this->handleViewSender($data);
        }
        elseif (strpos($data, 'back_') === 0) {
            $this->handleBack($data);
        }
        elseif ($data === 'back_to_message') {
            $this->showMainMenu();
        }
        elseif ($data === 'main_menu') {
            $this->showMainMenu();
        }
        elseif ($data === 'receive_msg') {
            $this->showReceivedMessages();
        }
        elseif ($data === 'my_link') {
            $this->showMyLink();
        }
        elseif ($data === 'social_network') {
            $this->showSocialNetwork();
        }
        elseif ($data === 'settings') {
            $this->showSettings();
        }
        elseif ($data === 'send_without_link') {
            $this->sendWithoutLink();
        }
        elseif ($data === 'change_link') {
            $this->changeLinkMenu();
        }
        elseif ($data === 'encrypted_link') {
            $this->changeToEncryptedLink();
        }
        elseif ($data === 'selective_link') {
            $this->requestSelectiveLink();
        }
        elseif ($data === 'change_name') {
            $this->requestNameChange();
        }
        elseif ($data === 'receive_settings') {
            $this->showReceiveSettings();
        }
        elseif ($data === 'direct_mode') {
            $this->setReceiveMode('direct');
        }
        elseif ($data === 'notification_mode') {
            $this->setReceiveMode('notification');
        }
        elseif ($data === 'display_settings') {
            $this->showDisplaySettings();
        }
        elseif ($data === 'hidden_mode') {
            $this->setDisplayMode('hidden');
        }
        elseif ($data === 'visible_mode') {
            $this->setDisplayMode('visible');
        }
        elseif ($data === 'seen_notification') {
            $this->toggleSeenNotification();
        }
        elseif ($data === 'change_bio') {
            $this->requestBioChange();
        }
        elseif ($data === 'stats') {
            $this->showStats();
        }
        elseif ($data === 'channel_settings') {
            $this->showChannelSettings();
        }
        elseif ($data === 'add_channel') {
            $this->requestChannelAdd();
        }
        elseif ($data === 'delete_channel') {
            $this->deleteChannel();
        }
        elseif ($data === 'set_ad') {
            $this->requestAdText();
        }
        elseif ($data === 'delete_ad') {
            $this->deleteAd();
        }
        elseif ($data === 'signature_settings') {
            $this->showSignatureSettings();
        }
        elseif ($data === 'set_signature') {
            $this->requestSignature();
        }
        elseif ($data === 'delete_signature') {
            $this->deleteSignature();
        }
        elseif ($data === 'delete_all_blocks') {
            $this->deleteAllBlocks();
        }
        elseif ($data === 'support') {
            $this->showSupportMenu();
        }
        elseif ($data === 'post_publish') {
            $this->requestPost();
        }
        elseif ($data === 'view_network') {
            $this->viewSocialNetwork();
        }
        elseif ($data === 'admin_panel') {
            $this->showAdminPanel();
        }
        elseif (strpos($data, 'admin_force_remove_') === 0) {
            $this->adminForceRemove($data);
        }
        elseif ($data === 'admin_advertisement') {
            $this->adminAdvertisement();
        }
        elseif ($data === 'admin_set_advertisement') {
            $this->adminSetAdvertisement();
        }
        elseif ($data === 'admin_disable_advertisement') {
            $this->adminDisableAdvertisement();
        }
        elseif ($data === 'admin_clear_advertisement') {
            $this->adminClearAdvertisement();
        }
        elseif (strpos($data, 'admin_') === 0) {
            $this->handleAdminCallback($data);
        }
        elseif (strpos($data, 'approve_post_') === 0) {
            $this->approvePost($data);
        }
        elseif (strpos($data, 'reject_post_') === 0) {
            $this->rejectPost($data);
        }
        
        // کال‌بک‌های جدید
        elseif ($data === 'redirect_settings') {
            $this->showRedirectSettings();
        }
        elseif ($data === 'redirect_add_person') {
            $this->redirectAddPerson();
        }
        elseif ($data === 'redirect_remove_person') {
            $this->redirectRemovePerson();
        }
        elseif ($data === 'redirect_add_channel') {
            $this->redirectAddChannel();
        }
        elseif ($data === 'redirect_remove_channel') {
            $this->redirectRemoveChannel();
        }
        elseif ($data === 'account_info') {
            $this->showAccountInfo();
        }
        elseif (strpos($data, 'gift_message_') === 0) {
            $messageId = str_replace('gift_message_', '', $data);
            $this->showGiftOptions($messageId);
        }
        elseif (strpos($data, 'gift_select_') === 0) {
            // اصلاح برای پیام‌های دارای underscore
            $parts = explode('_', $data);
            $gift = $parts[2];
            $messageId = implode('_', array_slice($parts, 3));
            $this->initiateGiftPayment($gift, $messageId);
        }
        elseif (strpos($data, 'save_message_') === 0) {
            $messageId = str_replace('save_message_', '', $data);
            $this->toggleSaveMessage($messageId);
        }
        
        // --- کال‌بک‌های جدید برای کانال ارسال پیام ---
        elseif ($data === 'forward_channel_settings') {
            $this->showForwardChannelSettings();
        }
        elseif ($data === 'help_and_rules') {
            $this->showHelpAndRules();
        }
        elseif ($data === 'forward_add_channel') {
            $this->requestForwardChannel();
        }
        elseif ($data === 'forward_remove_channel') {
            $this->removeForwardChannel();
        }
        elseif ($data === 'forward_add_signature') {
            $this->requestForwardSignature();
        }
        elseif ($data === 'forward_remove_signature') {
            $this->removeForwardSignature();
        }
        elseif (strpos($data, 'forward_to_channel_') === 0) {
            $messageId = str_replace('forward_to_channel_', '', $data);
            $this->forwardMessageToChannel($this->userId, $messageId);
        }
        elseif (strpos($data, 'report_message_') === 0) {
            $messageId = str_replace('report_message_', '', $data);
            $this->askReportConfirmation($messageId);
        }
        elseif (strpos($data, 'confirm_report_') === 0) {
            $messageId = str_replace('confirm_report_', '', $data);
            $this->sendReport($messageId);
        }
        elseif (strpos($data, 'cancel_report_') === 0) {
            $this->sendMessage($this->chatId, "❌ عملیات گزارش لغو شد.");
        }
        
        // --- کال‌بک‌های جدید برای پیام همگانی و عکس پروفایل ---
        elseif ($data === 'broadcast_message') {
            $this->handleBroadcastMessageStart();
        }
        elseif ($data === 'cancel_broadcast') {
            unset($this->data['users'][$this->userId]['pending_action']);
            $this->saveData();
            $this->sendMessage($this->chatId, "✅ ارسال همگانی لغو شد.");
            $this->showSettings();
        }
        elseif ($data === 'profile_photo') {
            $this->showProfilePhotoSettings();
        }
        elseif ($data === 'set_profile_photo') {
            $this->requestSetProfilePhoto();
        }
        elseif ($data === 'delete_profile_photo') {
            $this->deleteProfilePhoto();
        }
        // --- کال‌بک جدید برای ارسال گیفت توسط ادمین ---
        elseif ($data === 'admin_send_gift') {
            $this->adminSendGiftStart();
        }
        elseif (strpos($data, 'admin_gift_choose_') === 0) {
            $gift = str_replace('admin_gift_choose_', '', $data);
            $this->adminGiftChooseType($gift);
        }
    }
    
    // --- توابع جدید برای هدیه ---
    private function showGiftOptions($messageId) {
        $text = "🎁 ارسال هدیه استارزی\n\n";
        $text .= "⭐️ با استفاده از این قابلیت می‌توانید برای دیگران گیفت‌های تلگرامی ارسال نمایید، اون هم به صورت ناشناس با متن توضیح دلخواه خودت.\n\n";
        $text .= "⚠️ خدمات ما شامل مالیات می‌شوند و مبالغ نمایشی همراه مالیات است.\n\n";
        $text .= "گیفت مورد نظر خودت را انتخاب کن 👇🏻";
        
        $keyboard = [
            [
                ['text' => '🧸 تدی 18 STARS ⭐', 'callback_data' => 'gift_select_teddy_' . $messageId],
                ['text' => '💝 قلب 18 STARS ⭐', 'callback_data' => 'gift_select_heart_' . $messageId]
            ],
            [
                ['text' => EMOJI_BACK . " بازگشت به پیام", 'callback_data' => 'back_to_msg_' . $messageId]
            ]
        ];
        $replyMarkup = ['inline_keyboard' => $keyboard];
        $this->sendMessage($this->chatId, $text, null, $replyMarkup);
    }
    
    private function initiateGiftPayment($gift, $messageId) {
        // دریافت آیدی گیرنده (فرستنده پیام اصلی)
        $targetUserId = null;
        foreach ($this->data['users'][$this->userId]['messages']['inbox'] as $msg) {
            if ($msg['id'] === $messageId) {
                $targetUserId = $msg['from'];
                break;
            }
        }
        if (!$targetUserId) {
            $this->sendMessage($this->chatId, "❌ پیام یافت نشد.");
            return;
        }
        
        // FIX: پیدا کردن شناسه گیفت از لیست
        $giftId = $this->getGiftIdByName($gift);
        if (!$giftId) {
            $this->sendMessage($this->chatId, "❌ گیفت مورد نظر یافت نشد. لطفاً بعداً تلاش کنید.");
            return;
        }
        
        // ذخیره اطلاعات موقت در pending_gifts
        $payload = "gift_{$gift}_{$messageId}_{$this->userId}";
        $this->data['pending_gifts'][$payload] = [
            'user_id' => $this->userId,
            'gift' => $gift,
            'gift_id' => $giftId,
            'message_id' => $messageId,
            'target_user' => $targetUserId,
            'amount' => 18,
            'step' => 'invoice_sent'
        ];
        $this->saveData();
        
        // ارسال فاکتور
        $prices = [['label' => 'Gift', 'amount' => 18 * 100]]; // 18 Stars = 1800 کوپک (هر Star = 100)
        $this->sendInvoice(
            $this->chatId,
            "هدیه تلگرامی",
            "ارسال {$gift} به کاربر",
            $payload,
            "XTR",
            $prices
        );
    }
    
    private function handlePreCheckoutQuery() {
        $query = $this->update['pre_checkout_query'];
        $id = $query['id'];
        $payload = $query['invoice_payload'];
        
        // بررسی وجود payload در pending_gifts
        if (isset($this->data['pending_gifts'][$payload])) {
            $this->answerPreCheckoutQuery($id, true);
            // به‌روزرسانی وضعیت
            $this->data['pending_gifts'][$payload]['step'] = 'paid';
            $this->saveData();
        } else {
            $this->answerPreCheckoutQuery($id, false, "خطا در پردازش سفارش");
        }
    }
    
    private function handleSuccessfulPayment() {
        $message = $this->update['message'];
        $payload = $message['successful_payment']['invoice_payload'];
        
        if (!isset($this->data['pending_gifts'][$payload])) {
            $this->sendMessage($this->chatId, "❌ اطلاعات پرداخت یافت نشد.");
            return;
        }
        
        $giftData = $this->data['pending_gifts'][$payload];
        $userId = $giftData['user_id'];
        
        // اگر کاربر فعلی همان کسی نیست که پرداخت کرده، نادیده بگیر (اختیاری)
        if ($userId != $this->userId) return;
        
        // ذخیره در pending_action برای دریافت توضیح
        $this->data['users'][$userId]['pending_action'] = 'gift_comment';
        $this->data['users'][$userId]['pending_data'] = [
            'gift' => $giftData['gift'],
            'gift_id' => $giftData['gift_id'],
            'target_user' => $giftData['target_user'],
            'message_id' => $giftData['message_id']
        ];
        // پاک کردن از pending_gifts
        unset($this->data['pending_gifts'][$payload]);
        $this->saveData();
        
        $this->sendMessage($userId, "✅ پرداخت با موفقیت انجام شد.\nلطفاً یک متن توضیح برای هدیه خود بنویسید (حداکثر ۱۰۰ کاراکتر):");
    }
    
    private function findTargetFromMessage($userId, $messageId) {
        foreach ($this->data['users'][$userId]['messages']['outbox'] as $msg) {
            if ($msg['id'] === $messageId) {
                return $msg['to'];
            }
        }
        foreach ($this->data['users'][$userId]['messages']['inbox'] as $msg) {
            if ($msg['id'] === $messageId) {
                return $msg['from'];
            }
        }
        return null;
    }
    
    private function handleGiftComment() {
        $comment = trim($this->text);
        if (mb_strlen($comment) > 100) {
            $this->sendMessage($this->chatId, "❌ متن طولانی است. لطفاً حداکثر ۱۰۰ کاراکتر ارسال کنید.");
            return;
        }
        
        $pending = $this->data['users'][$this->userId]['pending_data'];
        $giftId = $pending['gift_id'];
        $targetUserId = $pending['target_user'];
        
        if (!$targetUserId || !isset($this->data['users'][$targetUserId])) {
            $this->sendMessage($this->chatId, "❌ کاربر مقصد یافت نشد.");
            return;
        }
        
        // ارسال هدیه با استفاده از sendGift
        $response = $this->sendGift($targetUserId, $giftId, $comment);
        $result = json_decode($response, true);
        
        if ($result && isset($result['ok']) && $result['ok']) {
            $this->sendMessage($this->chatId, "✅ هدیه شما با موفقیت برای کاربر ارسال شد.");
        } else {
            $error = isset($result['description']) ? $result['description'] : 'خطای ناشناخته';
            $this->sendMessage($this->chatId, "❌ ارسال هدیه ناموفق بود: " . $error);
        }
        
        // پاک کردن pending
        unset($this->data['users'][$this->userId]['pending_action']);
        unset($this->data['users'][$this->userId]['pending_data']);
        $this->saveData();
    }
    
    private function sendGift($userId, $giftId, $text) {
        // این متد با API واقعی تطبیق داده شده است
        $url = $this->apiUrl . "sendGift";
        $data = [
            'user_id' => $userId,
            'gift_id' => $giftId,
            'text' => $text
        ];
        return $this->sendRequest($url, $data);
    }
    
    private function sendInvoice($chatId, $title, $description, $payload, $currency, $prices) {
        $url = $this->apiUrl . "sendInvoice";
        $data = [
            'chat_id' => $chatId,
            'title' => $title,
            'description' => $description,
            'payload' => $payload,
            'currency' => $currency,
            'prices' => json_encode($prices),
            'provider_token' => '' // برای ستاره‌ها خالی است
        ];
        $this->sendRequest($url, $data);
    }
    
    private function answerPreCheckoutQuery($id, $ok, $errorMessage = '') {
        $url = $this->apiUrl . "answerPreCheckoutQuery";
        $data = [
            'pre_checkout_query_id' => $id,
            'ok' => $ok
        ];
        if (!$ok) $data['error_message'] = $errorMessage;
        $this->sendRequest($url, $data);
    }
    
    // --- ذخیره/لغو ذخیره پیام ---
    private function toggleSaveMessage($messageId) {
        $user = &$this->data['users'][$this->userId];
        foreach ($user['messages']['inbox'] as &$msg) {
            if ($msg['id'] === $messageId) {
                $msg['saved'] = !$msg['saved'];
                $this->saveData();
                $status = $msg['saved'] ? 'ذخیره شد' : 'از ذخیره خارج شد';
                $this->answerCallback($this->update['callback_query']['id'], "✅ پیام {$status}.");
                // نمایش مجدد پیام برای به‌روزرسانی دکمه
                $this->showMessage($this->userId, $messageId);
                return;
            }
        }
    }
    
    // --- توابع جدید برای پیام همگانی ---
    private function handleBroadcastMessageStart() {
        $this->data['users'][$this->userId]['pending_action'] = 'broadcast_message';
        $this->saveData();
        $message = "📣 ارسال پیام همگانی به کاربران شما\n\n";
        $message .= "💬پیامی را که میخواهید برای کسانی که به شما پیام ارسال کرده اند بفرستید را ارسال نمایید.\n\n";
        $message .= "⚠️ اگر شما کاربر را بلاک کرده باشید یا به آن شخص پیام داده باشید و ان شخص پاسخ شمارا نداده باشد یا پیام شما حاوی تبلیغ باشد و کاربر دریافت تبلیغ خود را بسته باشد پیام شما برای آن کاربر ارسال نخواهد شد.\n\n";
        $message .= "‼️در صورت انصراف از ارسال پیام بر روی دکمه لغو کلیک کنید در غیر این صورت پیام همگانی خود را ارسال یا فوروارد کنید.";
        $keyboard = [
            [
                ['text' => '❌ لغو ارسال همگانی', 'callback_data' => 'cancel_broadcast']
            ]
        ];
        $replyMarkup = ['inline_keyboard' => $keyboard];
        $this->sendMessage($this->chatId, $message, null, $replyMarkup);
    }
    
    private function handleBroadcastMessage() {
        $user = &$this->data['users'][$this->userId];
        $isForwarded = isset($this->update['message']['forward_from']) || isset($this->update['message']['forward_from_chat']);
        
        // استخراج فرستنده‌های منحصر به فرد از inbox
        $recipients = [];
        foreach ($user['messages']['inbox'] as $msg) {
            $senderId = $msg['from'];
            if (!in_array($senderId, $recipients)) {
                $recipients[] = $senderId;
            }
        }
        
        if (empty($recipients)) {
            $this->sendMessage($this->chatId, "❌ شما هیچ پیامی دریافت نکرده‌اید تا بتوانید پیام همگانی ارسال کنید.");
            return;
        }
        
        $messageType = $this->messageType;
        $content = $this->messageType === 'text' ? $this->text : ($this->caption ?: '');
        $fileId = $this->messageType !== 'text' ? $this->getFileId() : null;
        
        $sentCount = 0;
        $failedCount = 0;
        
        foreach ($recipients as $targetId) {
            // بررسی بلاک بودن متقابل
            if (in_array($targetId, $user['settings']['blocked_users'])) {
                continue; // کاربر، این مخاطب را بلاک کرده
            }
            if (isset($this->data['users'][$targetId]) && in_array($this->userId, $this->data['users'][$targetId]['settings']['blocked_users'])) {
                continue; // مخاطب، کاربر را بلاک کرده
            }
            
            // بررسی ضد تبلیغ
            if (isset($this->data['users'][$targetId]['settings']['ad_sensitivity']) && $this->data['users'][$targetId]['settings']['ad_sensitivity']) {
                if ($this->containsAds($content)) {
                    continue; // مخاطب تبلیغ را نمی‌پذیرد
                }
            }
            
            $header = "⚠️ این یک پیام همگانی از طرف {$user['first_name']} است.\n\n";
            
            if ($isForwarded) {
                // ارسال یک پیام متنی جداگانه با هشدار
                $warningMsgId = null;
                $response = $this->sendMessage($targetId, $header);
                if ($response && isset($response['result']['message_id'])) {
                    $warningMsgId = $response['result']['message_id'];
                }
                // سپس پیام اصلی را فوروارد می‌کنیم با ریپلای به پیام هشدار
                if ($warningMsgId) {
                    $forwardResult = $this->forwardMessage($targetId, $this->chatId, $this->messageId);
                    if ($forwardResult) {
                        $sentCount++;
                    } else {
                        $failedCount++;
                    }
                } else {
                    $failedCount++;
                }
            } else {
                // ارسال مستقیم با هدر
                $finalContent = $header . $content;
                if ($messageType === 'text') {
                    $response = $this->sendMessage($targetId, $finalContent);
                } else {
                    $response = $this->sendMedia($targetId, $messageType, $fileId, $finalContent);
                }
                if ($response) {
                    $sentCount++;
                } else {
                    $failedCount++;
                }
            }
            usleep(100000);
        }
        
        $this->sendMessage($this->chatId, "✅ ارسال همگانی انجام شد.\nموفق: {$sentCount}\nناموفق: {$failedCount}");
        $this->showSettings();
    }
    
    // --- توابع جدید برای عکس پروفایل ---
    private function showProfilePhotoSettings() {
        $user = $this->data['users'][$this->userId];
        $hasPhoto = !empty($user['settings']['profile_photo']);
        $message = "🖼 عکس پروفایل شما\n\n";
        $message .= "🌄شما میتوانید عکسی برای پروفایل خود تنظیم کنید که کاربران در زمان ارسال پیام به شما میتوانند انرا مشاهده نمایند.\n\n";
        $message .= "⚠️ عکس پروفایل نامناسب میتواند موجب ممنوعیت استفاده شما از ربات گردد.";
        $keyboard = [];
        if ($hasPhoto) {
            $keyboard[] = [
                ['text' => '🖼 تنظیم عکس جدید', 'callback_data' => 'set_profile_photo'],
                ['text' => '🗑 حذف عکس', 'callback_data' => 'delete_profile_photo']
            ];
        } else {
            $keyboard[] = [
                ['text' => '🖼 تنظیم عکس پروفایل', 'callback_data' => 'set_profile_photo']
            ];
        }
        $keyboard[] = [
            ['text' => EMOJI_BACK . " بازگشت", 'callback_data' => 'settings']
        ];
        $replyMarkup = ['inline_keyboard' => $keyboard];
        $this->sendMessage($this->chatId, $message, null, $replyMarkup);
    }
    
    private function requestSetProfilePhoto() {
        $this->data['users'][$this->userId]['pending_action'] = 'set_profile_photo';
        $this->saveData();
        $this->sendMessage($this->chatId, "لطفا عکس پروفایل خود را ارسال کنید:");
    }
    
    private function deleteProfilePhoto() {
        $this->data['users'][$this->userId]['settings']['profile_photo'] = null;
        $this->saveData();
        $this->sendMessage($this->chatId, "✅ عکس پروفایل با موفقیت حذف شد.");
        $this->showProfilePhotoSettings();
    }
    
    private function handleSetProfilePhoto() {
        if ($this->messageType !== 'photo') {
            $this->sendMessage($this->chatId, "❌ لطفا فقط یک عکس ارسال کنید.");
            return;
        }
        $fileId = $this->getFileId();
        $this->data['users'][$this->userId]['settings']['profile_photo'] = $fileId;
        $this->saveData();
        $this->sendMessage($this->chatId, "✅ عکس پروفایل با موفقیت تنظیم شد.");
        $this->showProfilePhotoSettings();
    }
    
    // --- توابع ضد اسپم و ضد توهین ---
    private function showAntiSpamMenu() {
        $user = $this->data['users'][$this->userId];
        $status = $user['settings']['anti_spam'] ? 'فعال' : 'غیرفعال';
        $message = "📳 ضد اسپم:\n\nبا فعال سازی این سیستم به آرامش خود کمک کنید!\n\nاگر کسی سعی کند که به شما در مدت زمانی کوتاه پیامی تکراری یا تعداد زیادی پیام ارسال کند به مدت ۱ ساعت از ارسال پیام به شما محروم خواهد شد.\n\nوضعیت فعلی: {$status}";
        $keyboard = [
            [
                ['text' => $user['settings']['anti_spam'] ? '❌ غیرفعال کردن' : '✅ فعال کردن', 'callback_data' => 'toggle_anti_spam']
            ],
            [
                ['text' => EMOJI_BACK . " بازگشت", 'callback_data' => 'settings']
            ]
        ];
        $replyMarkup = ['inline_keyboard' => $keyboard];
        $this->sendMessage($this->chatId, $message, null, $replyMarkup);
    }
    
    private function showAntiAbuseMenu() {
        $user = $this->data['users'][$this->userId];
        $status = $user['settings']['anti_abuse'] ? 'فعال' : 'غیرفعال';
        $message = "🛂 ضد توهین و تحدید:\n\nبا فعال کردن این سیستم کاربران قادر به ارسال پیام‌های حاوی کلمات نامناسب یا تهدید آمیز به شما نیستند.\n\nوضعیت فعلی: {$status}";
        $keyboard = [
            [
                ['text' => $user['settings']['anti_abuse'] ? '❌ غیرفعال کردن' : '✅ فعال کردن', 'callback_data' => 'toggle_anti_abuse']
            ],
            [
                ['text' => EMOJI_BACK . " بازگشت", 'callback_data' => 'settings']
            ]
        ];
        $replyMarkup = ['inline_keyboard' => $keyboard];
        $this->sendMessage($this->chatId, $message, null, $replyMarkup);
    }
    
    private function showAdSensitivityMenu() {
        $user = $this->data['users'][$this->userId];
        $status = $user['settings']['ad_sensitivity'] ? 'فعال' : 'غیرفعال';
        $message = "⚠️ اگر حساسیت به تبلیغات را فعال کنید پیام های ارسالی برای شما اگر شامل ایدی یا لینک باشند دیگر برای شما ارسال نخواهد شد.\n\nوضعیت فعلی: {$status}";
        $keyboard = [
            [
                ['text' => $user['settings']['ad_sensitivity'] ? '❌ غیرفعال کردن' : '✅ فعال کردن', 'callback_data' => 'toggle_ad_sensitivity']
            ],
            [
                ['text' => EMOJI_BACK . " بازگشت", 'callback_data' => 'settings']
            ]
        ];
        $replyMarkup = ['inline_keyboard' => $keyboard];
        $this->sendMessage($this->chatId, $message, null, $replyMarkup);
    }
    
    private function toggleAntiSpam() {
        $user = &$this->data['users'][$this->userId];
        $user['settings']['anti_spam'] = !$user['settings']['anti_spam'];
        $this->saveData();
        $this->showAntiSpamMenu();
    }
    
    private function toggleAntiAbuse() {
        $user = &$this->data['users'][$this->userId];
        $user['settings']['anti_abuse'] = !$user['settings']['anti_abuse'];
        $this->saveData();
        $this->showAntiAbuseMenu();
    }
    
    private function toggleAdSensitivity() {
        $user = &$this->data['users'][$this->userId];
        $user['settings']['ad_sensitivity'] = !$user['settings']['ad_sensitivity'];
        $this->saveData();
        $this->showAdSensitivityMenu();
    }
    
    private function showUserBio($targetUserId) {
        if (!isset($this->data['users'][$targetUserId])) {
            $this->sendMessage($this->chatId, "❌ کاربر یافت نشد.");
            return;
        }
        $targetUser = $this->data['users'][$targetUserId];
        $bio = $targetUser['settings']['bio'];
        $message = "📝 بیوگرافی کاربر:\n\n{$bio}";
        $this->sendMessage($this->chatId, $message);
    }
    
    // --- سیستم ری‌اکشن بازسازی شده ---
    private function handleReaction($data) {
        $messageId = str_replace('reaction_', '', $data);
        
        // لیست کامل ری‌اکشن‌های تلگرام
        $reactions = [
            ['👍', '👎', '❤️', '🔥', '🥰', '👏'],
            ['😁', '🤔', '🤯', '😱', '🤬', '😢'],
            ['🎉', '🤩', '🤮', '💩', '🙏', '👌'],
            ['🕊', '🤡', '🥱', '🥴', '😍', '🐳'],
            ['❤️‍🔥', '💔', '🤝', '👍🏼', '👎🏼', '😈'],
            ['⚡️', '🏆', '💋', '🌚', '🌞', '🍌'],
            ['👻', '💀', '🦍', '🐧', '🐦‍⬛', '🍆']
        ];
        
        $keyboard = [];
        foreach ($reactions as $row) {
            $rowButtons = [];
            foreach ($row as $emoji) {
                $rowButtons[] = ['text' => $emoji, 'callback_data' => 'react_' . $messageId . '_' . $emoji];
            }
            $keyboard[] = $rowButtons;
        }
        
        $keyboard[] = [
            ['text' => EMOJI_BACK . " بازگشت به پیام", 'callback_data' => 'back_to_msg_' . $messageId]
        ];
        
        $replyMarkup = ['inline_keyboard' => $keyboard];
        $this->sendMessage($this->chatId, "لطفاً یک ری‌اکشن انتخاب کنید:", null, $replyMarkup);
    }
    
    private function sendReaction($data) {
        // اصلاح برای پیام‌های دارای underscore
        $rest = substr($data, strlen('react_'));
        $lastUnderscore = strrpos($rest, '_');
        if ($lastUnderscore !== false) {
            $messageId = substr($rest, 0, $lastUnderscore);
            $reaction = substr($rest, $lastUnderscore + 1);
        } else {
            // fallback
            $parts = explode('_', $rest);
            $messageId = $parts[0];
            $reaction = '';
        }
        
        $messageFound = false;
        $senderId = null;
        foreach ($this->data['users'][$this->userId]['messages']['inbox'] as $index => $msg) {
            if ($msg['id'] === $messageId) {
                $messageFound = true;
                $senderId = $msg['from'];
                
                if (!isset($this->data['users'][$this->userId]['messages']['inbox'][$index]['reactions'])) {
                    $this->data['users'][$this->userId]['messages']['inbox'][$index]['reactions'] = [];
                }
                
                $alreadyReacted = false;
                foreach ($this->data['users'][$this->userId]['messages']['inbox'][$index]['reactions'] as $react) {
                    if ($react['user'] == $this->userId) {
                        $alreadyReacted = true;
                        break;
                    }
                }
                
                if (!$alreadyReacted) {
                    $this->data['users'][$this->userId]['messages']['inbox'][$index]['reactions'][] = [
                        'user' => $this->userId,
                        'reaction' => $reaction,
                        'timestamp' => time()
                    ];
                }
                break;
            }
        }
        
        if ($messageFound && $senderId) {
            $reactorName = $this->data['users'][$this->userId]['first_name'];
            
            // پیدا کردن پیام تأیید در outbox فرستنده
            $confirmMsgId = null;
            foreach ($this->data['users'][$senderId]['messages']['outbox'] as $outMsg) {
                if ($outMsg['id'] === $messageId && isset($outMsg['confirm_msg_id'])) {
                    $confirmMsgId = $outMsg['confirm_msg_id'];
                    break;
                }
            }
            
            // ارسال ریپلای به پیام تأیید
            if ($confirmMsgId) {
                $replyText = "{$reaction} واکنش را به پیام شما داد.";
                $this->sendMessage($senderId, $replyText, $confirmMsgId);
            } else {
                $this->sendMessage($senderId, "{$reactorName} {$reaction} واکنش را به پیام شما داد.");
            }
            
            $this->answerCallback($this->update['callback_query']['id'], "ری‌اکشن {$reaction} ارسال شد!");
            
            // حذف کیبورد ری‌اکشن
            $this->editMessageReplyMarkup($this->chatId, $this->messageId, null);
            
            // نمایش مجدد پیام اصلی
            $this->showMessage($this->userId, $messageId);
        } else {
            $this->answerCallback($this->update['callback_query']['id'], "پیام یافت نشد!");
        }
        
        $this->saveData();
    }
    
    private function handleCheckJoinStatus() {
        if ($this->checkForcedJoinChannels($this->userId, false)) {
            $this->sendMessage($this->chatId, "✅ شما در تمام کانال‌های اجباری عضو هستید. اکنون می‌توانید از ربات استفاده کنید.");
            if (isset($this->data['users'][$this->userId]['sending_to'])) {
                $targetUserId = $this->data['users'][$this->userId]['sending_to'];
                $targetName = $this->data['users'][$targetUserId]['first_name'];
                $message = "درحال ارسال پیام به {$targetName} هستی :)\nمی‌تونی هر حرف یا هر چیزی که دوست داری براش بفرستی؛ فقط یادت باشه این ربات یه پیام‌رسانه و اسمتو میبینه.";
                $keyboard = [
                    [
                        ['text' => EMOJI_CANCEL . " لغو ارسال پیام", 'callback_data' => 'cancel_send']
                    ],
                    [
                        ['text' => EMOJI_BIO_PREVIEW . " مشاهده بیوگرافی", 'callback_data' => "viewbio_{$targetUserId}"]
                    ]
                ];
                $replyMarkup = ['inline_keyboard' => $keyboard];
                $this->sendMessage($this->chatId, $message, null, $replyMarkup);
            } else {
                $this->showMainMenu();
            }
        } else {
            $this->answerCallback($this->update['callback_query']['id'], "❌ هنوز در برخی کانال‌ها عضو نشده‌اید.");
        }
    }
    
    private function handleDeleteMessage($data) {
        $outboxId = substr($data, strlen('delete_msg_'));
        $outboxIndex = null;
        $outboxMessage = null;
        foreach ($this->data['users'][$this->userId]['messages']['outbox'] as $index => $msg) {
            if ($msg['id'] === $outboxId) {
                $outboxIndex = $index;
                $outboxMessage = $msg;
                break;
            }
        }
        if (!$outboxMessage) {
            $this->sendMessage($this->chatId, "❌ پیام یافت نشد.");
            return;
        }
        if (time() - $outboxMessage['timestamp'] > 600) {
            $this->sendMessage($this->chatId, "⚠️ شما قادر به حذف این پیام نمی‌باشید زیرا بیش از ۱۰ دقیقه از زمان ارسال آن گذشته است.");
            return;
        }
        $recipientId = $outboxMessage['to'];
        foreach ($this->data['users'][$recipientId]['messages']['inbox'] as $index => $inMsg) {
            if ($inMsg['id'] === $outboxId) {
                if (!empty($inMsg['telegram_message_id'])) {
                    $this->deleteMessage($recipientId, $inMsg['telegram_message_id']);
                }
                $this->data['users'][$recipientId]['messages']['inbox'][$index]['deleted'] = true;
                break;
            }
        }
        unset($this->data['users'][$this->userId]['messages']['outbox'][$outboxIndex]);
        $this->data['users'][$this->userId]['messages']['outbox'] = array_values($this->data['users'][$this->userId]['messages']['outbox']);
        $this->saveData();
        $this->sendMessage($this->chatId, "✅ پیام با موفقیت حذف شد.");
    }
    
    private function handleSendAd($data) {
        // اصلاح برای پیام‌های دارای underscore
        $parts = explode('_', $data);
        $senderId = $parts[1];
        $messageId = implode('_', array_slice($parts, 2));
        $user = $this->data['users'][$this->userId];
        if (empty($user['settings']['ad_text'])) {
            $this->sendMessage($this->chatId, "شما تبلیغی تنظیم نکرده‌اید!");
            return;
        }
        $this->sendMessage($senderId, $user['settings']['ad_text']);
        foreach ($this->data['users'][$this->userId]['messages']['inbox'] as $index => $msg) {
            if ($msg['id'] === $messageId) {
                $this->data['users'][$this->userId]['messages']['inbox'][$index]['ad_sent'] = true;
                break;
            }
        }
        $this->saveData();
        $this->sendMessage($this->chatId, "تبلیغ ارسال شد!");
    }
    
    private function handleReply($data) {
        $messageId = str_replace('reply_', '', $data);
        $this->data['users'][$this->userId]['pending_action'] = 'reply_message';
        $this->data['users'][$this->userId]['pending_data'] = $messageId;
        $this->saveData();
        $this->sendMessage($this->chatId, "لطفا پاسخ خود را ارسال کنید:");
    }
    
    private function handleBlock($data) {
        // اصلاح برای پیام‌های دارای underscore
        $parts = explode('_', $data);
        $blockUserId = $parts[1];
        $messageId = implode('_', array_slice($parts, 2));
        $keyboard = [
            [
                ['text' => '✅ بله، بلاک کن', 'callback_data' => 'confirm_block_' . $blockUserId . '_' . $messageId],
                ['text' => '❌ خیر', 'callback_data' => 'cancel_block_' . $messageId]
            ]
        ];
        $replyMarkup = ['inline_keyboard' => $keyboard];
        $this->sendMessage($this->chatId, "⚠️ آیا مطمئن هستید که می‌خواهید این کاربر را بلاک کنید؟", null, $replyMarkup);
    }
    
    private function confirmBlock($data) {
        // اصلاح برای پیام‌های دارای underscore
        $parts = explode('_', $data);
        $blockUserId = $parts[2];
        $messageId = implode('_', array_slice($parts, 3));
        if (!in_array($blockUserId, $this->data['users'][$this->userId]['settings']['blocked_users'])) {
            $this->data['users'][$this->userId]['settings']['blocked_users'][] = $blockUserId;
            $this->data['users'][$this->userId]['stats']['blocked_count']++;
            $this->saveData();
            $this->sendMessage($this->chatId, "✅ کاربر با موفقیت بلاک شد.");
            $blockerName = $this->data['users'][$this->userId]['first_name'];
            $this->sendMessage($blockUserId, "⚠️شما توسط {$blockerName} بلاک شده‌اید نمیتوانید پیام دهید!⛔");
        } else {
            $this->sendMessage($this->chatId, "این کاربر قبلاً بلاک شده است.");
        }
    }
    
    private function cancelBlock($data) {
        // اصلاح برای پیام‌های دارای underscore
        $parts = explode('_', $data);
        $messageId = implode('_', array_slice($parts, 2));
        $this->sendMessage($this->chatId, "عملیات بلاک لغو شد.");
    }
    
    private function handleUnblock($data) {
        // اصلاح برای پیام‌های دارای underscore
        $parts = explode('_', $data);
        $unblockUserId = $parts[1];
        $messageId = isset($parts[2]) ? implode('_', array_slice($parts, 2)) : '';
        $blockedUsers = &$this->data['users'][$this->userId]['settings']['blocked_users'];
        $key = array_search($unblockUserId, $blockedUsers);
        if ($key !== false) {
            unset($blockedUsers[$key]);
            $blockedUsers = array_values($blockedUsers);
            $this->data['users'][$this->userId]['stats']['blocked_count'] = count($blockedUsers);
            $this->saveData();
            $this->sendMessage($this->chatId, "✅ کاربر آنبلاک شد.");
            if ($messageId === 'block_notif') {
                $unblockerName = $this->data['users'][$this->userId]['first_name'];
                $this->sendMessage($unblockUserId, "✅ شما توسط {$unblockerName} آنبلاک شدید. اکنون می‌توانید پیام دهید.");
            }
        } else {
            $this->sendMessage($this->chatId, "این کاربر بلاک نبود.");
        }
    }
    
    private function handleViewSender($data) {
        // اصلاح برای پیام‌های دارای underscore
        $parts = explode('_', $data);
        $senderId = $parts[1];
        $messageId = implode('_', array_slice($parts, 2));
        $sender = $this->data['users'][$senderId];
        if ($sender['settings']['display_mode'] === 'hidden') {
            $message = "👤 اطلاعات این کاربر پنهان است.";
        } else {
            $message = "👤 اطلاعات فرستنده:\n\n";
            $message .= "📛 نام: " . $sender['first_name'] . "\n";
            $message .= "👤 آیدی: @" . ($sender['username'] ?: 'ندارد') . "\n";
            $message .= "🆔 آیدی عددی: " . $senderId . "\n";
            $message .= "📝 بیوگرافی: " . $sender['settings']['bio'] . "\n";
            $message .= "🔗 لینک پیام: https://t.me/" . BOT_USERNAME . "?start=" . $sender['link'];
        }
        $this->sendMessage($this->chatId, $message);
    }
    
    private function handleBack($data) {
        $target = str_replace('back_', '', $data);
        switch ($target) {
            case 'inbox':
                $this->showReceivedMessages();
                break;
            case 'to_message':
                $this->showMainMenu();
                break;
            default:
                $this->showMainMenu();
        }
    }
    
    // --- توابع جدید برای کانال ارسال پیام ---
    private function requestForwardChannel() {
        // تولید کد ۵ رقمی
        $code = rand(10000, 99999);
        $this->data['users'][$this->userId]['pending_action'] = 'forward_add_channel_verify';
        $this->data['users'][$this->userId]['pending_data'] = ['code' => $code];
        $this->saveData();
        
        $message = "برای ثبت کانال مراحل زیر را انجام دهید👇🏻\n\n";
        $message .= "1️⃣ ابتدا ربات @CROW_MASSAGER_bot را در کانال خود ادمین کنید\n\n";
        $message .= "2️⃣ برای احراز هویت و اینکه مطمئن شویم شما ادمین کانال هستید کد پایین را موقتا در کانال پست کرده و سپس اینجا فروارد کنید\n\n";
        $message .= "#️⃣ code: {$code}";
        
        $this->sendMessage($this->chatId, $message);
    }
    
    private function handleForwardChannelVerify() {
        $pending = $this->data['users'][$this->userId]['pending_data'];
        $expectedCode = $pending['code'];
        
        // بررسی اینکه پیام فروارد شده است
        $message = $this->update['message'];
        if (!isset($message['forward_from_chat'])) {
            $this->sendMessage($this->chatId, "❌ لطفا پیام را از کانال خود فروارد کنید.");
            return;
        }
        
        $forwardChat = $message['forward_from_chat'];
        if ($forwardChat['type'] !== 'channel') {
            $this->sendMessage($this->chatId, "❌ این پیام از یک کانال فروارد نشده است.");
            return;
        }
        
        // بررسی متن کد
        $forwardedText = $this->text;
        if (trim($forwardedText) != $expectedCode) {
            $this->sendMessage($this->chatId, "❌ کد ارسال شده مطابقت ندارد.");
            return;
        }
        
        // بررسی ادمین بودن ربات در کانال
        $channelUsername = null;
        if (isset($forwardChat['username'])) {
            $channelUsername = '@' . $forwardChat['username'];
        } else {
            $this->sendMessage($this->chatId, "❌ کانال شما نام کاربری ندارد. لطفاً برای کانال خود یوزرنیم تنظیم کنید.");
            return;
        }
        
        if (!$this->checkBotAdminInChannel($channelUsername)) {
            $this->sendMessage($this->chatId, "❌ ربات در کانال {$channelUsername} ادمین نیست. لطفا ابتدا ربات را به عنوان ادمین به کانال اضافه کنید.");
            return;
        }
        
        // ذخیره کانال
        $this->data['users'][$this->userId]['settings']['forward_channel'] = $channelUsername;
        $this->data['users'][$this->userId]['pending_action'] = null;
        $this->data['users'][$this->userId]['pending_data'] = null;
        $this->saveData();
        
        $this->sendMessage($this->chatId, "✅ کانال {$channelUsername} با موفقیت ثبت شد.");
        $this->showForwardChannelSettings();
    }
    
    private function removeForwardChannel() {
        $this->data['users'][$this->userId]['settings']['forward_channel'] = null;
        $this->saveData();
        $this->sendMessage($this->chatId, "✅ کانال ارسال پیام با موفقیت حذف شد.");
        $this->showForwardChannelSettings();
    }
    
    private function requestForwardSignature() {
        $this->data['users'][$this->userId]['pending_action'] = 'forward_set_signature';
        $this->saveData();
        $this->sendMessage($this->chatId, "لطفا امضای خود را برای پست‌های کانال ارسال کنید (حداکثر ۲۰۰ کاراکتر):");
    }
    
    private function handleForwardSetSignature() {
        $signature = trim($this->text);
        if (empty($signature)) {
            $this->sendMessage($this->chatId, "❌ امضا نمی‌تواند خالی باشد.");
            return;
        }
        if (strlen($signature) > 200) {
            $this->sendMessage($this->chatId, "❌ امضا نباید بیشتر از ۲۰۰ کاراکتر باشد.");
            return;
        }
        $this->data['users'][$this->userId]['settings']['forward_signature'] = $signature;
        $this->saveData();
        $this->sendMessage($this->chatId, "✅ امضای شما با موفقیت تنظیم شد.");
        $this->showForwardChannelSettings();
    }
    
    private function removeForwardSignature() {
        $this->data['users'][$this->userId]['settings']['forward_signature'] = '';
        $this->saveData();
        $this->sendMessage($this->chatId, "✅ امضا با موفقیت حذف شد.");
        $this->showForwardChannelSettings();
    }
    
    // --- ارسال پیام به کانال با دکمه شیشه‌ای ---
    private function forwardMessageToChannel($userId, $messageId) {
        $user = $this->data['users'][$userId];
        $channel = $user['settings']['forward_channel'];
        if (!$channel) {
            $this->sendMessage($this->chatId, "❌ شما کانالی برای ارسال پیام تنظیم نکرده‌اید.");
            return;
        }
        
        // یافتن پیام در صندوق ورودی
        $messageData = null;
        foreach ($user['messages']['inbox'] as $msg) {
            if ($msg['id'] === $messageId) {
                $messageData = $msg;
                break;
            }
        }
        if (!$messageData) {
            $this->sendMessage($this->chatId, "❌ پیام یافت نشد.");
            return;
        }
        
        // آماده‌سازی متن
        $senderId = $messageData['from'];
        $sender = $this->data['users'][$senderId];
        $decryptedContent = $this->decryptMessage($messageData['content']);
        
        $caption = "#کلاغ_پیامرسان | @CROW_MASSAGER_bot\n\n";
        $caption .= $decryptedContent;
        
        if (!empty($user['settings']['forward_signature'])) {
            $caption .= "\n\n" . $user['settings']['forward_signature'];
        }
        
        // دکمه شیشه‌ای برای ارسال پیام به کاربر
        $button = [
            'text' => '🗨️ ارسال پیام به کاربر',
            'url' => 'https://t.me/' . BOT_USERNAME . '?start=' . $user['link']
        ];
        $keyboard = [[$button]];
        $replyMarkup = ['inline_keyboard' => $keyboard];
        
        // ارسال به کانال
        if ($messageData['type'] === 'text') {
            $result = $this->sendMessage($channel, $caption, null, $replyMarkup);
        } else {
            $result = $this->sendMedia($channel, $messageData['type'], $messageData['file_id'], $caption, $replyMarkup);
        }
        
        if ($result && isset($result['ok']) && $result['ok']) {
            $this->sendMessage($this->chatId, "✅ پیام با موفقیت به کانال ارسال شد.");
        } else {
            $this->sendMessage($this->chatId, "❌ ارسال به کانال ناموفق بود. لطفا از ادمین بودن ربات در کانال مطمئن شوید.");
        }
    }
    
    // --- گزارش پیام ---
    private function askReportConfirmation($messageId) {
        $keyboard = [
            [
                ['text' => '👮🏻‍♂ ارسال گزارش', 'callback_data' => 'confirm_report_' . $messageId],
                ['text' => '❌ لغو ارسال', 'callback_data' => 'cancel_report_' . $messageId]
            ]
        ];
        $replyMarkup = ['inline_keyboard' => $keyboard];
        $this->sendMessage($this->chatId, "⚠️ با ثبت گزارش برای این پیام محتویات پیام و اطلاعات فرستنده پیام و اطلاعات شما برای ادمین ارسال خواهد شد\n\n⁉️ از ارسال گزارش برای این پیام اطمینان دارید ؟", null, $replyMarkup);
    }
    
    private function sendReport($messageId) {
        $user = $this->data['users'][$this->userId];
        
        // یافتن پیام در صندوق ورودی
        $messageData = null;
        foreach ($user['messages']['inbox'] as $msg) {
            if ($msg['id'] === $messageId) {
                $messageData = $msg;
                break;
            }
        }
        if (!$messageData) {
            $this->sendMessage($this->chatId, "❌ پیام یافت نشد.");
            return;
        }
        
        $senderId = $messageData['from'];
        $sender = $this->data['users'][$senderId];
        
        // ساخت گزارش
        $reportId = 'report_' . time() . '_' . $this->userId;
        $this->data['reports'][$reportId] = [
            'id' => $reportId,
            'reporter_id' => $this->userId,
            'reported_message_id' => $messageId,
            'reported_user_id' => $senderId,
            'timestamp' => time(),
            'handled' => false
        ];
        $this->saveData();
        
        // ارسال گزارش به ادمین‌ها
        $reportText = "⚠️ گزارش جدید پیام\n\n";
        $reportText .= "👤 گزارش‌دهنده: " . $user['first_name'] . " @" . ($user['username'] ?: 'ندارد') . " (ID: {$this->userId})\n";
        $reportText .= "👤 فرستنده: " . $sender['first_name'] . " @" . ($sender['username'] ?: 'ندارد') . " (ID: {$senderId})\n";
        $reportText .= "📅 زمان: " . date('Y-m-d H:i:s') . "\n";
        $reportText .= "📎 نوع پیام: " . $messageData['type'] . "\n";
        $reportText .= "💬 متن: " . $this->decryptMessage($messageData['content']) . "\n\n";
        
        $keyboard = [
            [
                ['text' => 'پاسخ به گزارش‌دهنده', 'callback_data' => 'admin_reply_report_' . $reportId . '_reporter'],
                ['text' => 'پاسخ به فرستنده', 'callback_data' => 'admin_reply_report_' . $reportId . '_sender']
            ]
        ];
        $replyMarkup = ['inline_keyboard' => $keyboard];
        
        foreach ($this->data['admins'] as $adminId) {
            if ($messageData['type'] === 'text') {
                $this->sendMessage($adminId, $reportText, null, $replyMarkup);
            } else {
                $this->sendMedia($adminId, $messageData['type'], $messageData['file_id'], $reportText, $replyMarkup);
            }
        }
        
        $this->sendMessage($this->chatId, "✅ گزارش شما با موفقیت ارسال شد. بررسی و نتیجه اعلام میگردد.");
    }
    
    private function handleAdminReplyReport($reportId, $target) {
        if (!isset($this->data['reports'][$reportId])) {
            $this->sendMessage($this->chatId, "❌ گزارش یافت نشد.");
            return;
        }
        $report = $this->data['reports'][$reportId];
        $targetUserId = ($target === 'reporter') ? $report['reporter_id'] : $report['reported_user_id'];
        
        $this->data['users'][$this->userId]['pending_action'] = 'admin_reply_report';
        $this->data['users'][$this->userId]['pending_data'] = ['target_user' => $targetUserId, 'report_id' => $reportId];
        $this->saveData();
        
        $this->sendMessage($this->chatId, "لطفا پاسخ خود را برای کاربر ارسال کنید:");
    }
    
    private function handleAdminReplyReportMessage() {
        $pending = $this->data['users'][$this->userId]['pending_data'];
        $targetUserId = $pending['target_user'];
        
        if ($this->messageType === 'text') {
            $this->sendMessage($targetUserId, "📩 پاسخ ادمین به گزارش:\n\n" . $this->text);
        } else {
            $this->sendMedia($targetUserId, $this->messageType, $this->getFileId(), "📩 پاسخ ادمین به گزارش:\n\n" . $this->caption);
        }
        
        $this->sendMessage($this->chatId, "✅ پاسخ ارسال شد.");
        $this->showAdminPanel();
    }
    
    // --- ادامه handlePendingAction ---
    private function handlePendingAction() {
        $user = &$this->data['users'][$this->userId];
        $action = $user['pending_action'];
        
        switch ($action) {
            case 'set_selective_link':
                $this->handleSelectiveLink();
                break;
            case 'change_name':
                $this->handleNameChange();
                break;
            case 'change_bio':
                $this->handleBioChange();
                break;
            case 'add_channel':
                $this->handleChannelAdd();
                break;
            case 'set_ad_text':
                $this->handleAdText();
                break;
            case 'set_signature':
                $this->handleSignature();
                break;
            case 'send_without_link':
                $this->handleSendWithoutLink();
                break;
            case 'support_message':
                $this->handleSupportMessage();
                break;
            case 'send_post':
                $this->handlePostSubmission();
                break;
            case 'reply_message':
                $this->handleReplyMessage();
                break;
            case 'reject_reason':
                $this->handleRejectReason();
                break;
            case 'admin_add_force':
                $this->handleAdminAddForce();
                break;
            case 'admin_block_user':
                $this->handleAdminBlockUser();
                break;
            case 'admin_unblock_user':
                $this->handleAdminUnblockUser();
                break;
            case 'admin_warn_user':
                $this->handleAdminWarnUser();
                break;
            case 'admin_broadcast':
                $this->handleAdminBroadcast();
                break;
            case 'admin_search_user':
                $this->handleAdminSearchUser();
                break;
            case 'admin_set_channel':
                $this->handleAdminSetChannel();
                break;
            case 'admin_set_start':
                $this->handleAdminSetStart();
                break;
            case 'admin_set_help':
                $this->handleAdminSetHelp();
                break;
            case 'admin_set_support':
                $this->handleAdminSetSupport();
                break;
            case 'admin_set_rules':
                $this->handleAdminSetRules();
                break;
            case 'admin_set_advertisement':
                $this->handleAdminSetAdvertisement();
                break;
            case 'admin_reply_support':
                $this->handleAdminReplySupport();
                break;
            case 'admin_add_badword':
                $this->handleAdminAddBadWord();
                break;
            case 'admin_social_ban_user':
                $this->handleAdminSocialBanUser();
                break;
            case 'admin_social_unban_user':
                $this->handleAdminSocialUnbanUser();
                break;
            case 'forward_add_channel_verify':
                $this->handleForwardChannelVerify();
                break;
            case 'forward_set_signature':
                $this->handleForwardSetSignature();
                break;
            case 'admin_reply_report':
                $this->handleAdminReplyReportMessage();
                break;
            case 'broadcast_message':
                $this->handleBroadcastMessage();
                break;
            case 'set_profile_photo':
                $this->handleSetProfilePhoto();
                break;
            // موارد جدید
            case 'redirect_person_input':
                $this->redirectPersonInput();
                break;
            case 'redirect_person_verify':
                $this->redirectPersonVerify();
                break;
            case 'redirect_channel_verify':
                $this->redirectChannelVerify();
                break;
            case 'gift_comment':
                $this->handleGiftComment();
                break;
            // موارد جدید برای ادمین گیفت
            case 'admin_gift_user_input':
                $this->adminGiftUserInput();
                break;
            case 'admin_gift_type_input':
                $this->adminGiftTypeInput();
                break;
        }
        
        $user['pending_action'] = null;
        $this->saveData();
    }
    
    // --- توابع جدید برای ارسال گیفت توسط ادمین ---
    private function adminSendGiftStart() {
        if (!$this->isAdmin($this->userId)) {
            $this->sendMessage($this->chatId, "❌ دسترسی denied!");
            return;
        }
        $this->data['users'][$this->userId]['pending_action'] = 'admin_gift_user_input';
        $this->saveData();
        $this->sendMessage($this->chatId, "لطفا آیدی عددی کاربری که می‌خواهید به او گیفت ارسال کنید را وارد کنید:");
    }
    
    private function adminGiftUserInput() {
        $target = trim($this->text);
        $targetUserId = $this->findUserId($target);
        if (!$targetUserId) {
            $this->sendMessage($this->chatId, "❌ کاربر یافت نشد.");
            return;
        }
        $this->data['users'][$this->userId]['pending_data'] = ['target_user' => $targetUserId];
        $this->data['users'][$this->userId]['pending_action'] = 'admin_gift_type_input';
        $this->saveData();
        
        $keyboard = [
            [
                ['text' => '🧸 تدی', 'callback_data' => 'admin_gift_choose_teddy'],
                ['text' => '💝 قلب', 'callback_data' => 'admin_gift_choose_heart']
            ]
        ];
        $replyMarkup = ['inline_keyboard' => $keyboard];
        $this->sendMessage($this->chatId, "لطفا نوع گیفت را انتخاب کنید:", null, $replyMarkup);
    }
    
    private function adminGiftChooseType($gift) {
        $pending = $this->data['users'][$this->userId]['pending_data'];
        $targetUserId = $pending['target_user'];
        
        // FIX: پیدا کردن شناسه گیفت
        $giftId = $this->getGiftIdByName($gift);
        if (!$giftId) {
            $this->sendMessage($this->chatId, "❌ گیفت مورد نظر یافت نشد.");
            return;
        }
        
        $comment = "🎁 این یک هدیه از طرف ادمین است.";
        $response = $this->sendGift($targetUserId, $giftId, $comment);
        $result = json_decode($response, true);
        
        if ($result && isset($result['ok']) && $result['ok']) {
            $this->sendMessage($this->chatId, "✅ گیفت با موفقیت برای کاربر ارسال شد.");
        } else {
            $error = isset($result['description']) ? $result['description'] : 'خطای ناشناخته';
            $this->sendMessage($this->chatId, "❌ ارسال گیفت ناموفق بود: " . $error);
        }
        
        // پاک کردن pending
        unset($this->data['users'][$this->userId]['pending_action']);
        unset($this->data['users'][$this->userId]['pending_data']);
        $this->saveData();
    }
    
    // --- بقیه توابع ---
    private function changeLinkMenu() {
        $message = "🔐 رمز گذاری (حالت ایمن): در این حالت یک لینک با حروف پسوندی لینک شامل اعداد و حروف رندوم ساخته میشود.\nمانند : http://t.me/CROW_MASSAGER_bot?start=7eb64fd18917\n\n❇️ انتخابی : حالتی که پسوند لینک با خود شما است و انتخاب کامل آن بر عهده شماست که میتوانید حروف کوچک و بزرگ و اعداد با _ را به کار ببرید.\nمانند yourname http://t.me/CROW_MASSAGER_bot?start=yourname";
        $keyboard = [
            [
                ['text' => EMOJI_ENCRYPTED . " رمز گذاری (حالت ایمن)", 'callback_data' => 'encrypted_link'],
                ['text' => EMOJI_SELECTIVE . " انتخابی", 'callback_data' => 'selective_link']
            ],
            [
                ['text' => EMOJI_BACK . " بازگشت", 'callback_data' => 'settings']
            ]
        ];
        $replyMarkup = ['inline_keyboard' => $keyboard];
        $this->sendMessage($this->chatId, $message, null, $replyMarkup);
    }
    
    private function changeToEncryptedLink() {
        $newLink = $this->generateEncryptedLink();
        $this->data['users'][$this->userId]['link'] = $newLink;
        $this->saveData();
        $this->sendMessage($this->chatId, "✅ لینک شما با موفقیت تغییر کرد!");
        $this->showMyLink();
    }
    
    private function requestSelectiveLink() {
        $this->data['users'][$this->userId]['pending_action'] = 'set_selective_link';
        $this->saveData();
        $message = "لطفا پسوند لینک مورد نظر خود را ارسال کنید (فقط حروف انگلیسی، اعداد و _ مجاز است):\n⚠️ توجه: این روش به دلیل رمزگذاری نشدن، ناشناس و ایمن نیست!";
        $this->sendMessage($this->chatId, $message);
    }
    
    private function handleSelectiveLink() {
        $link = preg_replace('/[^a-zA-Z0-9_]/', '', $this->text);
        if (empty($link)) {
            $this->sendMessage($this->chatId, "❌ لینک نامعتبر است. فقط حروف انگلیسی، اعداد و _ مجاز هستند.");
            return;
        }
        foreach ($this->data['users'] as $user) {
            if ($user['link'] === $link) {
                $this->sendMessage($this->chatId, "❌ این لینک قبلاً استفاده شده است. لطفا لینک دیگری انتخاب کنید.");
                return;
            }
        }
        $this->data['users'][$this->userId]['link'] = $link;
        $this->saveData();
        $this->sendMessage($this->chatId, "✅ لینک شما با موفقیت تغییر کرد!");
        $this->showMyLink();
    }
    
    private function requestNameChange() {
        $this->data['users'][$this->userId]['pending_action'] = 'change_name';
        $this->saveData();
        $currentName = $this->data['users'][$this->userId]['first_name'];
        $this->sendMessage($this->chatId, "لطفا نام جدید خود را ارسال کنید:\nنام فعلی: {$currentName}");
    }
    
    private function handleNameChange() {
        $name = trim($this->text);
        if (empty($name)) {
            $this->sendMessage($this->chatId, "❌ نام نمی‌تواند خالی باشد.");
            return;
        }
        $this->data['users'][$this->userId]['first_name'] = $name;
        $this->saveData();
        $this->sendMessage($this->chatId, "✅ نام شما با موفقیت تغییر کرد!");
        $this->showSettings();
    }
    
    private function showReceiveSettings() {
        $user = $this->data['users'][$this->userId];
        $receiveMode = $user['settings']['receive_mode'];
        $displayMode = $user['settings']['display_mode'];
        $directCheck = ($receiveMode === 'direct') ? '✅' : '';
        $notificationCheck = ($receiveMode === 'notification') ? '✅' : '';
        $hiddenCheck = ($displayMode === 'hidden') ? '✅' : '';
        $visibleCheck = ($displayMode === 'visible') ? '✅' : '';
        
        $message = "به بخش تنظیمات دریافت و نمایش اطلاعات شما خوشامدید 📮\n\n🔰حالات دریافت پیام\n✉️ دریافت مستقیم : پیام هایی که دریافت خواهید کرد به همان شکل برای شما ارسال خواهد شد،\n🔔 دریافت اعلان : پیامی برای شما با تیتر پیام جدیدی دارید لطفا صندوق پیام های خود را چک کنید /newmsg به نمایش در می آید و پس از کلیک بر بروی /newmsg تمامی پیام ها برایتان به نمایش در خواهد آمد،\n\n🔰حالات نمایش اکانت شما \n👤حالت پنهان: هیچ اطلاعاتی از شما به جز بیو گرافی برای فرستندگان پیام به شما به نمایش در نخواهد امد،\n🧔🏻‍♀️حالت قابل نمایش: ایدی و نام و ایدی عددی اکانت و بیوگرافی قابل نمایش خواهد بود و در صورتی که پیامی ارسال کنید شخص متوجه میشود شما چه کسی هستید،\n\nحالت مورد نظر خود را انتخاب نمایید 👇🏻";
        
        $keyboard = [
            [
                ['text' => '📮 نوع دریافت پیام', 'callback_data' => 'none']
            ],
            [
                ['text' => $directCheck . ' دریافت پیام مستقیم', 'callback_data' => 'direct_mode'],
                ['text' => $notificationCheck . ' دریاف پیام اعلان', 'callback_data' => 'notification_mode']
            ],
            [
                ['text' => '🔮حالت نمایش اطلاعات شما', 'callback_data' => 'none']
            ],
            [
                ['text' => $hiddenCheck . ' پنهان', 'callback_data' => 'hidden_mode'],
                ['text' => $visibleCheck . ' قابل نمایش', 'callback_data' => 'visible_mode']
            ],
            [
                ['text' => EMOJI_BACK . " بازگشت", 'callback_data' => 'settings']
            ]
        ];
        $replyMarkup = ['inline_keyboard' => $keyboard];
        $this->sendMessage($this->chatId, $message, null, $replyMarkup);
    }
    
    private function setReceiveMode($mode) {
        $this->data['users'][$this->userId]['settings']['receive_mode'] = $mode;
        $this->saveData();
        $modeText = ($mode === 'direct') ? 'مستقیم' : 'اعلان';
        $this->sendMessage($this->chatId, "✅ حالت دریافت پیام به {$modeText} تغییر یافت.");
        $this->showReceiveSettings();
    }
    
    private function showDisplaySettings() {
        $user = $this->data['users'][$this->userId];
        $displayMode = $user['settings']['display_mode'];
        $hiddenCheck = ($displayMode === 'hidden') ? '✅' : '';
        $visibleCheck = ($displayMode === 'visible') ? '✅' : '';
        $keyboard = [
            [
                ['text' => $hiddenCheck . ' پنهان', 'callback_data' => 'hidden_mode'],
                ['text' => $visibleCheck . ' قابل نمایش', 'callback_data' => 'visible_mode']
            ],
            [
                ['text' => EMOJI_BACK . " بازگشت", 'callback_data' => 'receive_settings']
            ]
        ];
        $replyMarkup = ['inline_keyboard' => $keyboard];
        $this->sendMessage($this->chatId, "حالت نمایش اطلاعات خود را انتخاب کنید:", null, $replyMarkup);
    }
    
    private function setDisplayMode($mode) {
        $this->data['users'][$this->userId]['settings']['display_mode'] = $mode;
        $this->saveData();
        $modeText = ($mode === 'hidden') ? 'پنهان' : 'قابل نمایش';
        $this->sendMessage($this->chatId, "✅ حالت نمایش اطلاعات به {$modeText} تغییر یافت.");
        $this->showReceiveSettings();
    }
    
    private function toggleSeenNotification() {
        $user = &$this->data['users'][$this->userId];
        $current = $user['settings']['seen_notification'];
        $user['settings']['seen_notification'] = !$current;
        $status = $user['settings']['seen_notification'] ? 'فعال' : 'غیرفعال';
        $message = "اعلان دیده شدن پیام {$status} شد.";
        $keyboard = [
            [
                ['text' => $user['settings']['seen_notification'] ? '❌ مخفی کردن اعلان مشاهده پیام' : '✅ فعال کردن اعلان مشاهده پیام', 
                 'callback_data' => 'seen_notification']
            ],
            [
                ['text' => EMOJI_BACK . " بازگشت", 'callback_data' => 'settings']
            ]
        ];
        $replyMarkup = ['inline_keyboard' => $keyboard];
        $this->sendMessage($this->chatId, $message, null, $replyMarkup);
        $this->saveData();
    }
    
    private function requestBioChange() {
        $currentBio = $this->data['users'][$this->userId]['settings']['bio'];
        $message = "📝 بیوگرافی فعلی شما:\n{$currentBio}\n\nلطفا بیوگرافی جدید خود را ارسال کنید:";
        $this->data['users'][$this->userId]['pending_action'] = 'change_bio';
        $this->saveData();
        $this->sendMessage($this->chatId, $message);
    }
    
    private function handleBioChange() {
        $bio = trim($this->text);
        if (empty($bio)) {
            $this->sendMessage($this->chatId, "❌ بیوگرافی نمی‌تواند خالی باشد.");
            return;
        }
        $this->data['users'][$this->userId]['settings']['bio'] = $bio;
        $this->saveData();
        $this->sendMessage($this->chatId, "✅ بیوگرافی شما با موفقیت تغییر کرد!");
        $this->showSettings();
    }
    
    private function showStats() {
        $user = $this->data['users'][$this->userId];
        $stats = $user['stats'];
        $contactsCount = count($user['contacts']);
        $joined = date('Y-m-d H:i:s', $user['joined_at']);
        $message = "📊 آمار فعالیت شما:\n\n";
        $message .= "📤 پیام‌های ارسال شده: " . $stats['sent'] . "\n";
        $message .= "📥 پیام‌های دریافت شده: " . $stats['received'] . "\n";
        $message .= "👥 تعداد افرادی که با آنها صحبت کرده‌اید: " . $contactsCount . "\n";
        $message .= "📅 تاریخ عضویت: " . $joined . "\n";
        $message .= "⛔ افراد بلاک شده: " . count($user['settings']['blocked_users']) . "\n";
        $keyboard = [
            [
                ['text' => EMOJI_BACK . " بازگشت", 'callback_data' => 'settings']
            ]
        ];
        $replyMarkup = ['inline_keyboard' => $keyboard];
        $this->sendMessage($this->chatId, $message, null, $replyMarkup);
    }
    
    private function showChannelSettings() {
        $user = $this->data['users'][$this->userId];
        $channel = $user['settings']['ad_channel'] ?: 'تنظیم نشده';
        $adText = $user['settings']['ad_text'] ?: 'تنظیم نشده';
        $message = "🎩 شما میتوانید یک متن تبلیغاتی و کانالی تلگرامی برای جوین اجباری لینک خودتات اضافه نمایید از آن پس هر زمان شخصی بخواهد به شما پیام ارسال کند باید در کانال تلگرامی شما عضو شده باشد.\n⚠️ توجه داشته باشید که حتما این ربات را باید در داخل کانال تلگرامی خودتان که جوین اجباری را میخواهید روی آن قرار دهید بگذارید\n\nکانال فعلی: {$channel}\nتبلیغ فعلی: {$adText}";
        $keyboard = [
            [
                ['text' => EMOJI_ADD_CHANNEL . " افزودن کانال", 'callback_data' => 'add_channel'],
                ['text' => EMOJI_DELETE_CHANNEL . " حذف کانال", 'callback_data' => 'delete_channel']
            ],
            [
                ['text' => EMOJI_SET_AD . " تنظیم تبلیغ", 'callback_data' => 'set_ad'],
                ['text' => EMOJI_DELETE_AD . " حذف تبلیغ", 'callback_data' => 'delete_ad']
            ],
            [
                ['text' => EMOJI_BACK . " بازگشت", 'callback_data' => 'settings']
            ]
        ];
        $replyMarkup = ['inline_keyboard' => $keyboard];
        $this->sendMessage($this->chatId, $message, null, $replyMarkup);
    }
    
    private function requestChannelAdd() {
        $this->data['users'][$this->userId]['pending_action'] = 'add_channel';
        $this->saveData();
        $this->sendMessage($this->chatId, "لطفا لینک یا @ایدی کانال خود را ارسال کنید:\n⚠️ توجه: ربات باید در این کانال ادمین باشد!");
    }
    
    private function handleChannelAdd() {
        $channel = trim($this->text);
        if (!preg_match('/^(@[a-zA-Z0-9_]+|https:\/\/t\.me\/[a-zA-Z0-9_+]+)$/', $channel)) {
            $this->sendMessage($this->chatId, "❌ فرمت کانال نامعتبر است. لطفا از @channelname یا لینک کامل استفاده کنید.");
            return;
        }
        if (strpos($channel, 'https://t.me/') === 0) {
            $channel = '@' . str_replace('https://t.me/', '', $channel);
        }
        if (!$this->checkBotAdminInChannel($channel)) {
            $this->sendMessage($this->chatId, "❌ ربات در کانال {$channel} ادمین نیست. لطفا ابتدا ربات را به عنوان ادمین به کانال اضافه کنید.");
            return;
        }
        $this->data['users'][$this->userId]['settings']['ad_channel'] = $channel;
        $this->saveData();
        $this->sendMessage($this->chatId, "✅ کانال {$channel} با موفقیت تنظیم شد.");
        $this->showChannelSettings();
    }
    
    private function deleteChannel() {
        $this->data['users'][$this->userId]['settings']['ad_channel'] = null;
        $this->saveData();
        $this->sendMessage($this->chatId, "✅ کانال با موفقیت حذف شد.");
        $this->showChannelSettings();
    }
    
    private function requestAdText() {
        $this->data['users'][$this->userId]['pending_action'] = 'set_ad_text';
        $this->saveData();
        $this->sendMessage($this->chatId, "لطفا متن تبلیغاتی خود را ارسال کنید:");
    }
    
    private function handleAdText() {
        $adText = trim($this->text);
        if (empty($adText)) {
            $this->sendMessage($this->chatId, "❌ متن تبلیغ نمی‌تواند خالی باشد.");
            return;
        }
        $this->data['users'][$this->userId]['settings']['ad_text'] = $adText;
        $this->saveData();
        $this->sendMessage($this->chatId, "✅ متن تبلیغ با موفقیت تنظیم شد.");
        $this->showChannelSettings();
    }
    
    private function deleteAd() {
        $this->data['users'][$this->userId]['settings']['ad_text'] = '';
        $this->saveData();
        $this->sendMessage($this->chatId, "✅ تبلیغ با موفقیت حذف شد.");
        $this->showChannelSettings();
    }
    
    private function showSignatureSettings() {
        $user = $this->data['users'][$this->userId];
        $signature = $user['settings']['signature'] ?: 'تنظیم نشده';
        $message = "🖊 امضا متنیه که در انتهای *هر پیام* که برای تو ارسال می‌شه، نمایش داده می‌شه.\nاگر امضا تنظیم نکنی، پیام‌ها بدون امضا نمایش داده می‌شن.\n\nامضای فعلی: {$signature}";
        $keyboard = [
            [
                ['text' => EMOJI_SET_SIGNATURE . " تنظیم امضا", 'callback_data' => 'set_signature']
            ]
        ];
        if (!empty($user['settings']['signature'])) {
            $keyboard[0][] = ['text' => EMOJI_DELETE_SIGNATURE . "حذف امضا", 'callback_data' => 'delete_signature'];
        }
        $keyboard[] = [
            ['text' => EMOJI_BACK . " بازگشت", 'callback_data' => 'settings']
        ];
        $replyMarkup = ['inline_keyboard' => $keyboard];
        $this->sendMessage($this->chatId, $message, null, $replyMarkup);
    }
    
    private function requestSignature() {
        $this->data['users'][$this->userId]['pending_action'] = 'set_signature';
        $this->saveData();
        $this->sendMessage($this->chatId, "لطفا امضای خود را ارسال کنید (حداکثر ۲۰۰ کاراکتر):");
    }
    
    private function handleSignature() {
        $signature = trim($this->text);
        if (empty($signature)) {
            $this->sendMessage($this->chatId, "❌ امضا نمی‌تواند خالی باشد.");
            return;
        }
        if (strlen($signature) > 200) {
            $this->sendMessage($this->chatId, "❌ امضا نباید بیشتر از ۲۰۰ کاراکتر باشد.");
            return;
        }
        $this->data['users'][$this->userId]['settings']['signature'] = $signature;
        $this->saveData();
        $this->sendMessage($this->chatId, "✅ امضای شما با موفقیت تنظیم شد.");
        $this->showSignatureSettings();
    }
    
    private function deleteSignature() {
        $this->data['users'][$this->userId]['settings']['signature'] = '';
        $this->saveData();
        $this->sendMessage($this->chatId, "✅ امضا با موفقیت حذف شد.");
        $this->showSignatureSettings();
    }
    
    private function deleteAllBlocks() {
        $this->data['users'][$this->userId]['settings']['blocked_users'] = [];
        $this->data['users'][$this->userId]['stats']['blocked_count'] = 0;
        $this->saveData();
        $this->sendMessage($this->chatId, "✅ تمامی بلاک‌ها با موفقیت حذف شدند.");
        $this->showSettings();
    }
    
    private function showSupportMenu() {
        $message = $this->data['support_text'] . "\n\nبرای ارتباط با پشتیبانی، لطفا پیام خود را ارسال کنید (متن، عکس، ویدیو و ...):";
        $keyboard = [
            [
                ['text' => EMOJI_BACK . " بازگشت", 'callback_data' => 'settings']
            ]
        ];
        $replyMarkup = ['inline_keyboard' => $keyboard];
        $this->sendMessage($this->chatId, $message, null, $replyMarkup);
        $this->data['users'][$this->userId]['pending_action'] = 'support_message';
        $this->saveData();
    }
    
    private function handleSupportMessage() {
        if ($this->messageType === 'text' && trim($this->text) === '') {
            $this->sendMessage($this->chatId, "❌ لطفا پیام معتبری ارسال کنید.");
            return;
        }
        $user = $this->data['users'][$this->userId];
        $messageId = 'support_' . time() . '_' . $this->userId;
        $supportMessage = [
            'id' => $messageId,
            'user_id' => $this->userId,
            'type' => $this->messageType,
            'message' => $this->messageType === 'text' ? $this->text : ($this->caption ?: ''),
            'file_id' => $this->messageType !== 'text' ? $this->getFileId() : null,
            'timestamp' => time(),
            'answered' => false
        ];
        $this->data['support_messages'][$messageId] = $supportMessage;
        $this->saveData();
        
        $adminMessage = "📩 پیام پشتیبانی جدید:\n\n";
        $adminMessage .= "👤 از کاربر: " . $user['first_name'] . "\n";
        $adminMessage .= "🆔 آیدی: " . $this->userId . "\n";
        $adminMessage .= "📛 یوزرنیم: @" . ($user['username'] ?: 'ندارد') . "\n";
        $adminMessage .= "📊 آمار: ارسال: {$user['stats']['sent']} | دریافت: {$user['stats']['received']}\n";
        
        if ($this->messageType === 'text') {
            $adminMessage .= "💬 پیام: " . $this->text . "\n";
        } else {
            $adminMessage .= "📎 نوع: " . $this->messageType . "\n";
            if ($this->caption) $adminMessage .= "📝 کپشن: " . $this->caption . "\n";
        }
        $adminMessage .= "\nبرای پاسخ: /reply_" . $messageId;
        
        foreach ($this->data['admins'] as $adminId) {
            if ($this->messageType === 'text') {
                $this->sendMessage($adminId, $adminMessage);
            } else {
                $this->sendMedia($adminId, $this->messageType, $supportMessage['file_id'], $adminMessage);
            }
        }
        
        $this->sendMessage($this->chatId, "✅ پیام شما به پشتیبانی ارسال شد. به زودی پاسخ دریافت خواهید کرد.");
        $this->showSettings();
    }
    
    private function requestPost() {
        if ($this->data['users'][$this->userId]['settings']['social_ban']) {
            $this->sendMessage($this->chatId, "⚠️ شما قادر به انتشار محتوا در این شبکه نیستید، به علت نقض قوانین ما انجمن ما تصمیم گرفته تا انتشار پست در شبکه اجتماعی کلاغ پیامرسان را ممنوع کند.");
            return;
        }
        $this->data['users'][$this->userId]['pending_action'] = 'send_post';
        $this->saveData();
        $this->sendMessage($this->chatId, "لطفا پست خود را ارسال کنید (متن، عکس، ویدیو یا ترکیبی از آنها):");
    }
    
    private function handlePostSubmission() {
        $user = $this->data['users'][$this->userId];
        $postId = 'post_' . time() . '_' . $this->userId;
        $postData = [
            'id' => $postId,
            'user_id' => $this->userId,
            'type' => $this->messageType,
            'content' => $this->messageType === 'text' ? $this->text : ($this->caption ?: ''),
            'file_id' => $this->messageType !== 'text' ? $this->getFileId() : null,
            'timestamp' => time(),
            'status' => 'pending',
            'reject_reason' => null
        ];
        $this->data['pending_posts'][$postId] = $postData;
        $this->saveData();
        
        $adminMessage = "📝 پست جدید برای شبکه اجتماعی:\n\n";
        $adminMessage .= "👤 از کاربر: " . $user['first_name'] . " " . $user['last_name'] . "\n";
        $adminMessage .= "🆔 آیدی عددی: " . $this->userId . "\n";
        $adminMessage .= "📛 یوزرنیم: @" . ($user['username'] ?: 'ندارد') . "\n";
        $adminMessage .= "📊 آمار کاربر: ارسال: {$user['stats']['sent']} | دریافت: {$user['stats']['received']}\n";
        $adminMessage .= "⛔ وضعیت بلاک: " . ($user['settings']['social_ban'] ? 'محدود شده' : 'عادی') . "\n";
        $adminMessage .= "━━━━━━━━━━━━━━\n";
        if ($this->messageType === 'text') {
            $adminMessage .= "📄 متن: " . $this->text . "\n";
        } else {
            $adminMessage .= "📎 نوع: " . $this->messageType . "\n";
            if ($this->caption) $adminMessage .= "📝 کپشن: " . $this->caption . "\n";
        }
        $keyboard = [
            [
                ['text' => '✅ تایید و انتشار', 'callback_data' => 'approve_post_' . $postId],
                ['text' => '⛔ رد و پاسخ', 'callback_data' => 'reject_post_' . $postId]
            ]
        ];
        $replyMarkup = ['inline_keyboard' => $keyboard];
        foreach ($this->data['admins'] as $adminId) {
            if ($this->messageType === 'text') {
                $this->sendMessage($adminId, $adminMessage, null, $replyMarkup);
            } else {
                $caption = $adminMessage;
                $this->sendMedia($adminId, $this->messageType, $postData['file_id'], $caption, $replyMarkup);
            }
        }
        $this->sendMessage($this->chatId, "✅ پست شما برای بررسی به ادمین‌ها ارسال شد. پس از تایید در کانال منتشر خواهد شد.");
        $this->showSocialNetwork();
    }
    
    private function viewSocialNetwork() {
        if (!$this->data['social_channel']) {
            $this->sendMessage($this->chatId, "❌ کانال شبکه اجتماعی تنظیم نشده است.");
            return;
        }
        $channel = $this->data['social_channel'];
        $channelLink = str_replace('@', 'https://t.me/', $channel);
        $message = "📢 کانال شبکه اجتماعی:\n{$channelLink}";
        $this->sendMessage($this->chatId, $message);
    }
    
    private function approvePost($data) {
        if (is_string($data) && strpos($data, 'approve_post_') === 0) {
            $postId = str_replace('approve_post_', '', $data);
        } else {
            $postId = $data;
        }
        if (!isset($this->data['pending_posts'][$postId])) {
            $this->sendMessage($this->chatId, "❌ پست یافت نشد!");
            return;
        }
        $post = $this->data['pending_posts'][$postId];
        $userId = $post['user_id'];
        $user = $this->data['users'][$userId];
        if (!$this->data['social_channel']) {
            $this->sendMessage($this->chatId, "❌ کانال شبکه اجتماعی تنظیم نشده است!");
            return;
        }
        $channelMessage = "";
        if ($post['type'] === 'text') {
            $channelMessage .= $post['content'] . "\n\n";
        } else if ($post['content']) {
            $channelMessage .= $post['content'] . "\n\n";
        }
        $channelMessage .= "-" . $user['first_name'] . "\n";
        $channelMessage .= EMOJI_CROW . " شبکه اجتماعی کلاغ پیامرسان\n";
        $channelMessage .= $this->data['social_channel'];
        $keyboard = [
            [
                ['text' => '🗨️ ارسال پیام به ناشر', 
                 'url' => "https://t.me/" . BOT_USERNAME . "?start=" . $user['link']]
            ]
        ];
        $replyMarkup = ['inline_keyboard' => $keyboard];
        if ($post['type'] === 'text') {
            $this->sendMessage($this->data['social_channel'], $channelMessage, null, $replyMarkup);
        } else {
            $this->sendMedia($this->data['social_channel'], $post['type'], $post['file_id'], $channelMessage, $replyMarkup);
        }
        $this->sendMessage($userId, "✅ پست شما در شبکه اجتماعی منتشر شد!");
        unset($this->data['pending_posts'][$postId]);
        $this->saveData();
        $this->sendMessage($this->chatId, "✅ پست با موفقیت منتشر شد!");
    }
    
    private function rejectPost($data) {
        if (is_string($data) && strpos($data, 'reject_post_') === 0) {
            $postId = str_replace('reject_post_', '', $data);
        } else {
            $postId = $data;
        }
        if (!isset($this->data['pending_posts'][$postId])) {
            $this->sendMessage($this->chatId, "❌ پست یافت نشد!");
            return;
        }
        $this->data['pending_posts'][$postId]['status'] = 'rejected';
        $this->data['users'][$this->userId]['pending_action'] = 'reject_reason';
        $this->data['users'][$this->userId]['pending_data'] = $postId;
        $this->saveData();
        $this->sendMessage($this->chatId, "لطفا دلیل رد پست را بنویسید:");
    }
    
    private function handleRejectReason() {
        $postId = $this->data['users'][$this->userId]['pending_data'];
        $reason = $this->text;
        if (!isset($this->data['pending_posts'][$postId])) {
            $this->sendMessage($this->chatId, "❌ پست یافت نشد!");
            return;
        }
        $post = $this->data['pending_posts'][$postId];
        $userId = $post['user_id'];
        $rejectMessage = "❌ متأسفیم! پست شما رد شد.\n📝 دلیل: {$reason}";
        $this->sendMessage($userId, $rejectMessage);
        unset($this->data['pending_posts'][$postId]);
        $this->saveData();
        $this->sendMessage($this->chatId, "✅ دلیل رد پست ارسال شد.");
    }
    
    private function handleReplyMessage() {
        $messageId = $this->data['users'][$this->userId]['pending_data'];
        $originalMessage = null;
        $targetUserId = null;
        $user = &$this->data['users'][$this->userId];
        foreach ($user['messages']['inbox'] as $msg) {
            if ($msg['id'] === $messageId) {
                $originalMessage = $msg;
                $targetUserId = $msg['from'];
                break;
            }
        }
        if (!$originalMessage) {
            foreach ($user['messages']['outbox'] as $msg) {
                if ($msg['id'] === $messageId) {
                    $originalMessage = $msg;
                    $targetUserId = $msg['to'];
                    break;
                }
            }
        }
        if (!$originalMessage) {
            $this->sendMessage($this->chatId, "❌ پیام مورد نظر یافت نشد.");
            return;
        }
        $newMessageId = 'msg_' . time() . '_' . $this->data['message_counter']++;
        $replyData = [
            'id' => $newMessageId,
            'from' => $this->userId,
            'type' => $this->messageType,
            'content' => $this->encryptMessage($this->messageType === 'text' ? $this->text : ($this->caption ?: '')),
            'timestamp' => time(),
            'read' => false,
            'replied' => false,
            'reactions' => [],
            'ad_sent' => false,
            'reply_to' => $messageId,
            'deleted' => false,
            'saved' => false
        ];
        if ($this->messageType != 'text') {
            $replyData['file_id'] = $this->getFileId();
        }
        $this->data['users'][$targetUserId]['messages']['inbox'][] = $replyData;
        $outboxReply = $replyData;
        $outboxReply['to'] = $targetUserId;
        $this->data['users'][$this->userId]['messages']['outbox'][] = $outboxReply;
        $this->data['users'][$this->userId]['stats']['sent']++;
        $this->data['users'][$targetUserId]['stats']['received']++;
        
        // به‌روزرسانی contacts
        if (!in_array($targetUserId, $this->data['users'][$this->userId]['contacts'])) {
            $this->data['users'][$this->userId]['contacts'][] = $targetUserId;
        }
        if (!in_array($this->userId, $this->data['users'][$targetUserId]['contacts'])) {
            $this->data['users'][$targetUserId]['contacts'][] = $this->userId;
        }
        
        foreach ($this->data['users'][$this->userId]['messages']['inbox'] as &$msg) {
            if ($msg['id'] === $messageId) {
                $msg['replied'] = true;
                break;
            }
        }
        $this->saveData();
        $this->sendMessage($this->chatId, "✅ پاسخ شما ارسال شد!");
        $this->notifyReceiver($targetUserId, $newMessageId);
    }
    
    private function handleSendWithoutLink() {
        $target = trim($this->text);
        $targetUserId = null;
        if (is_numeric($target)) {
            if (isset($this->data['users'][$target])) $targetUserId = $target;
        } elseif (strpos($target, '@') === 0) {
            foreach ($this->data['users'] as $userId => $user) {
                if ($user['username'] === substr($target, 1)) {
                    $targetUserId = $userId;
                    break;
                }
            }
        }
        if (!$targetUserId) {
            $this->sendMessage($this->chatId, "❌ کاربر یافت نشد. لطفا آیدی عددی یا @username معتبر وارد کنید.");
            return;
        }
        if (in_array($this->userId, $this->data['users'][$targetUserId]['settings']['blocked_users'])) {
            $this->sendMessage($this->chatId, "⚠️شما توسط این کاربر بلاک شده‌اید و نمی‌توانید پیام دهید!⛔");
            $this->showMainMenu();
            return;
        }
        $this->targetUserIdFromLink = $targetUserId;
        $this->isFromLink = true;
        $this->data['users'][$this->userId]['sending_to'] = $targetUserId;
        $this->saveData();
        if (!$this->checkForcedJoinChannels($this->userId, true)) {
            return;
        }
        $targetUser = $this->data['users'][$targetUserId];
        $targetName = $targetUser['first_name'];
        $bio = $targetUser['settings']['bio'];
        $message = "درحال ارسال پیام به {$targetName} هستی :)\nمی‌تونی هر حرف یا هر چیزی که دوست داری براش بفرستی؛ فقط یادت باشه این ربات یه پیام‌رسانه و اسمتو میبینه.";
        $keyboard = [
            [
                ['text' => EMOJI_CANCEL . " لغو ارسال پیام", 'callback_data' => 'cancel_send']
            ],
            [
                ['text' => EMOJI_BIO_PREVIEW . " مشاهده بیوگرافی", 'callback_data' => "viewbio_{$targetUserId}"]
            ]
        ];
        $replyMarkup = ['inline_keyboard' => $keyboard];
        
        if (!empty($targetUser['settings']['profile_photo'])) {
            $this->sendMedia($this->chatId, 'photo', $targetUser['settings']['profile_photo'], $message, $replyMarkup);
        } else {
            $this->sendMessage($this->chatId, $message, null, $replyMarkup);
        }
    }
    
    // --- توابع پنل مدیریت ---
    private function showAdminPanel() {
        if (!$this->isAdmin($this->userId)) {
            $this->sendMessage($this->chatId, "❌ دسترسی denied!");
            return;
        }
        $totalUsers = count($this->data['users']);
        $activeToday = 0;
        $today = strtotime('today');
        foreach ($this->data['users'] as $user) {
            if ($user['last_activity'] >= $today) $activeToday++;
        }
        $pendingPosts = count($this->data['pending_posts']);
        $pendingSupport = 0;
        foreach ($this->data['support_messages'] as $msg) {
            if (!$msg['answered']) $pendingSupport++;
        }
        $message = "🛠 پنل مدیریت ربات\n\n";
        $message .= "👥 کل کاربران: {$totalUsers}\n";
        $message .= "📊 کاربران فعال امروز: {$activeToday}\n";
        $message .= "📝 پست‌های در انتظار: {$pendingPosts}\n";
        $message .= "📩 پیام‌های پشتیبانی: {$pendingSupport}\n";
        $message .= "📢 تبلیغ همگانی: " . ($this->data['advertisement']['active'] ? '✅ فعال' : '❌ غیرفعال') . "\n";
        $message .= "🔧 وضعیت ربات: " . ($this->data['bot_active'] ? '✅ فعال' : '❌ غیرفعال') . "\n";
        $message .= "📢 کانال شبکه اجتماعی: " . ($this->data['social_channel'] ?: 'تنظیم نشده') . "\n";
        $message .= "🔗 کانال‌های جوین اجباری: " . count($this->data['forced_join']) . "\n";
        $message .= "🛂 کلمات ممنوعه: " . count($this->data['bad_words']) . "\n\n";
        $message .= "لطفا گزینه مورد نظر را انتخاب کنید:";
        $keyboard = [
            [
                ['text' => '➕ افزودن عضویت اجباری', 'callback_data' => 'admin_add_force'],
                ['text' => '➖ حذف عضویت اجباری', 'callback_data' => 'admin_remove_force']
            ],
            [
                ['text' => '⛔ بلاک کاربر', 'callback_data' => 'admin_block_user'],
                ['text' => '✅ آنبلاک کاربر', 'callback_data' => 'admin_unblock_user']
            ],
            [
                ['text' => '⚠️ ارسال اخطار', 'callback_data' => 'admin_warn_user'],
                ['text' => '📢 ارسال همگانی', 'callback_data' => 'admin_broadcast']
            ],
            [
                ['text' => '📢 تبلیغ همگانی', 'callback_data' => 'admin_advertisement'],
                ['text' => '📊 مشاهده آمار', 'callback_data' => 'admin_stats']
            ],
            [
                ['text' => '🔍 جستجوی کاربر', 'callback_data' => 'admin_search'],
                ['text' => '📩 پاسخ پشتیبانی', 'callback_data' => 'admin_support']
            ],
            [
                ['text' => '🎬 تنظیم کانال شبکه', 'callback_data' => 'admin_set_channel'],
                ['text' => '📝 تایید/رد پست‌ها', 'callback_data' => 'admin_posts']
            ],
            [
                ['text' => '⚙️ تنظیمات متنی', 'callback_data' => 'admin_text_settings'],
                ['text' => '🛂 تنظیم توهین و تحدید', 'callback_data' => 'admin_bad_words']
            ],
            [
                ['text' => EMOJI_SOCIAL_BAN . " محدودیت شبکه اجتماعی", 'callback_data' => 'admin_social_ban_menu']
            ],
            [
                ['text' => EMOJI_GIFT . " ارسال گیفت به کاربر", 'callback_data' => 'admin_send_gift'] // دکمه جدید
            ],
            [
                ['text' => $this->data['bot_active'] ? '❌ خاموش کردن ربات' : '✅ روشن کردن ربات', 
                 'callback_data' => 'admin_toggle_bot']
            ],
            [
                ['text' => EMOJI_BACK . " بازگشت", 'callback_data' => 'main_menu']
            ]
        ];
        $replyMarkup = ['inline_keyboard' => $keyboard];
        $this->sendMessage($this->chatId, $message, null, $replyMarkup);
    }
    
    private function handleAdminCallback($data) {
        if (!$this->isAdmin($this->userId)) {
            $this->sendMessage($this->chatId, "❌ دسترسی denied!");
            return;
        }
        $action = str_replace('admin_', '', $data);
        switch ($action) {
            case 'add_force':
                $this->adminAddForceJoin();
                break;
            case 'remove_force':
                $this->adminRemoveForceJoin();
                break;
            case 'block_user':
                $this->adminRequestBlockUser();
                break;
            case 'unblock_user':
                $this->adminRequestUnblockUser();
                break;
            case 'warn_user':
                $this->adminRequestWarnUser();
                break;
            case 'broadcast':
                $this->adminRequestBroadcast();
                break;
            case 'advertisement':
                $this->adminAdvertisement();
                break;
            case 'stats':
                $this->adminShowStats();
                break;
            case 'search':
                $this->adminRequestSearch();
                break;
            case 'support':
                $this->adminShowSupport();
                break;
            case 'set_channel':
                $this->adminRequestSetChannel();
                break;
            case 'posts':
                $this->adminShowPendingPosts();
                break;
            case 'text_settings':
                $this->adminTextSettings();
                break;
            case 'toggle_bot':
                $this->adminToggleBot();
                break;
            case 'bad_words':
                $this->adminBadWordsMenu();
                break;
            case 'social_ban_menu':
                $this->adminSocialBanMenu();
                break;
            case 'social_ban_user':
                $this->adminSocialBanUser();
                break;
            case 'social_unban_user':
                $this->adminSocialUnbanUser();
                break;
            case 'reply_report':
                break;
            case 'send_gift':
                $this->adminSendGiftStart();
                break;
        }
    }
    
    private function adminSocialBanMenu() {
        $message = "📵 مدیریت محدودیت انتشار پست در شبکه اجتماعی\n\n";
        $message .= "با استفاده از این بخش می‌توانید کاربران را از ارسال پست منع یا رفع محدودیت کنید.";
        $keyboard = [
            [
                ['text' => '🛑 محدود کردن کاربر', 'callback_data' => 'admin_social_ban_user']
            ],
            [
                ['text' => '🕊 لغو محدودیت کاربر', 'callback_data' => 'admin_social_unban_user']
            ],
            [
                ['text' => EMOJI_BACK . " بازگشت", 'callback_data' => 'admin_panel']
            ]
        ];
        $replyMarkup = ['inline_keyboard' => $keyboard];
        $this->sendMessage($this->chatId, $message, null, $replyMarkup);
    }
    
    private function adminSocialBanUser() {
        $this->data['users'][$this->userId]['pending_action'] = 'admin_social_ban_user';
        $this->saveData();
        $this->sendMessage($this->chatId, "لطفا آیدی عددی یا @username کاربر مورد نظر را ارسال کنید:");
    }
    
    private function handleAdminSocialBanUser() {
        $target = trim($this->text);
        $targetUserId = $this->findUserId($target);
        if (!$targetUserId) {
            $this->sendMessage($this->chatId, "❌ کاربر یافت نشد.");
            return;
        }
        $this->data['users'][$targetUserId]['settings']['social_ban'] = true;
        $this->saveData();
        $this->sendMessage($this->chatId, "✅ کاربر با موفقیت از ارسال پست در شبکه اجتماعی محدود شد.");
        $this->adminSocialBanMenu();
    }
    
    private function adminSocialUnbanUser() {
        $this->data['users'][$this->userId]['pending_action'] = 'admin_social_unban_user';
        $this->saveData();
        $this->sendMessage($this->chatId, "لطفا آیدی عددی یا @username کاربر مورد نظر را ارسال کنید:");
    }
    
    private function handleAdminSocialUnbanUser() {
        $target = trim($this->text);
        $targetUserId = $this->findUserId($target);
        if (!$targetUserId) {
            $this->sendMessage($this->chatId, "❌ کاربر یافت نشد.");
            return;
        }
        $this->data['users'][$targetUserId]['settings']['social_ban'] = false;
        $this->saveData();
        $this->sendMessage($this->chatId, "✅ محدودیت کاربر با موفقیت لغو شد.");
        $this->adminSocialBanMenu();
    }
    
    private function findUserId($input) {
        if (is_numeric($input)) {
            return isset($this->data['users'][$input]) ? $input : null;
        } elseif (strpos($input, '@') === 0) {
            $username = substr($input, 1);
            foreach ($this->data['users'] as $uid => $user) {
                if ($user['username'] === $username) return $uid;
            }
        }
        return null;
    }
    
    private function showReceiveFiltersMenu() {
        $user = $this->data['users'][$this->userId];
        $filters = $user['settings']['receive_filters'];
        $message = "🗃 در این بخش شما میتوانید تنظیم کنید که فقط چه پیام هایی را دریافت کنید\n";
        $message .= "⚠️ هر سبک را محدود کنید دیگر هیچکس قادر به ارسال ان سبک پیام برای شما نخواهد بود.\n\n";
        $typeNames = [
            'text' => '📝 دریافت متن',
            'voice' => '🎙 دریافت ویس',
            'video_note' => '📢 دریافت ویدیو مسیج',
            'video' => '🎞 دریافت ویدیو',
            'photo' => '🌄 دریافت عکس',
            'audio' => '🎶 دریافت اهنگ',
            'document' => '📁 دریافت فایل'
        ];
        $keyboard = [];
        foreach ($filters as $type => $enabled) {
            $status = $enabled ? '✅ قابل دریافت' : '❌ غیر قابل دریافت';
            $callback = 'toggle_filter_' . $type;
            $keyboard[] = [
                ['text' => $typeNames[$type] . ' [' . $status . ']', 'callback_data' => $callback]
            ];
        }
        $keyboard[] = [
            ['text' => EMOJI_BACK . " بازگشت", 'callback_data' => 'settings']
        ];
        $replyMarkup = ['inline_keyboard' => $keyboard];
        $this->sendMessage($this->chatId, $message, null, $replyMarkup);
    }
    
    private function toggleReceiveFilter($data) {
        $type = str_replace('toggle_filter_', '', $data);
        $user = &$this->data['users'][$this->userId];
        if (isset($user['settings']['receive_filters'][$type])) {
            $user['settings']['receive_filters'][$type] = !$user['settings']['receive_filters'][$type];
            $this->saveData();
        }
        $this->showReceiveFiltersMenu();
    }
    
    private function showReceiveStatusMenu() {
        $user = $this->data['users'][$this->userId];
        $status = $user['settings']['receive_active'] ? 'روشن' : 'خاموش';
        $message = "‼️ در اینجا میتوانید دریافت پیام را خاموش کنید و دیگر پیامی برای شما نخواهد آمد همچنین میتوانید دوباره انرا روشن کنید ولی دیگر پیام های دریافت شده در زمان خاموشی قابل مشاهده نیست\n\n";
        $message .= "وضعیت فعلی: {$status}";
        $buttonText = $user['settings']['receive_active'] ? '🔕 خاموش کردن دریافت پیام' : '🔔 روشن کردن دریافت پیام';
        $keyboard = [
            [
                ['text' => $buttonText, 'callback_data' => 'toggle_receive_active']
            ],
            [
                ['text' => EMOJI_BACK . " بازگشت", 'callback_data' => 'settings']
            ]
        ];
        $replyMarkup = ['inline_keyboard' => $keyboard];
        $this->sendMessage($this->chatId, $message, null, $replyMarkup);
    }
    
    private function toggleReceiveActive() {
        $user = &$this->data['users'][$this->userId];
        $user['settings']['receive_active'] = !$user['settings']['receive_active'];
        $this->saveData();
        $this->showReceiveStatusMenu();
    }
    
    private function adminAdvertisement() {
        $message = "📢 مدیریت تبلیغ همگانی\n\n";
        $message .= "وضعیت: " . ($this->data['advertisement']['active'] ? '✅ فعال' : '❌ غیرفعال') . "\n";
        $message .= "نوع: " . ($this->data['advertisement']['type'] ?: 'تنظیم نشده') . "\n";
        $message .= "تعداد دریافت‌کنندگان: " . count($this->data['advertisement']['sent_to']) . "\n\n";
        $message .= "گزینه مورد نظر را انتخاب کنید:";
        $keyboard = [
            [
                ['text' => '📝 تنظیم تبلیغ جدید', 'callback_data' => 'admin_set_advertisement']
            ]
        ];
        if ($this->data['advertisement']['active']) {
            $keyboard[0][] = ['text' => '❌ غیرفعال کردن', 'callback_data' => 'admin_disable_advertisement'];
        }
        $keyboard[] = [
            ['text' => '🔄 پاک کردن تاریخچه', 'callback_data' => 'admin_clear_advertisement']
        ];
        $keyboard[] = [
            ['text' => EMOJI_BACK . " بازگشت", 'callback_data' => 'admin_panel']
        ];
        $replyMarkup = ['inline_keyboard' => $keyboard];
        $this->sendMessage($this->chatId, $message, null, $replyMarkup);
    }
    
    private function adminSetAdvertisement() {
        $this->data['users'][$this->userId]['pending_action'] = 'admin_set_advertisement';
        $this->saveData();
        $this->sendMessage($this->chatId, "لطفا تبلیغ همگانی را ارسال کنید (متن، عکس، ویدیو و ...):\n\n⚠️ توجه: این تبلیغ برای کاربرانی که /newmsg را بزنند نمایش داده می‌شود.");
    }
    
    private function handleAdminSetAdvertisement() {
        $this->data['advertisement'] = [
            'active' => true,
            'type' => $this->messageType,
            'content' => $this->messageType === 'text' ? $this->text : ($this->caption ?: ''),
            'file_id' => $this->messageType !== 'text' ? $this->getFileId() : null,
            'sent_to' => []
        ];
        $this->saveData();
        $sent = 0; $failed = 0;
        foreach ($this->data['users'] as $userId => $user) {
            if ($userId == $this->userId) continue;
            $result = $this->sendMessage($userId, "کلاغ پیام های جدیدی برایتان اورده 🐦‍⬛\nبرای مشاهده /newmsg");
            if ($result) $sent++; else $failed++;
            usleep(100000);
        }
        $this->sendMessage($this->chatId, "✅ تبلیغ همگانی با موفقیت تنظیم شد و فعال گردید.\nاعلان به {$sent} کاربر ارسال شد.\nناموفق: {$failed}");
        $this->adminAdvertisement();
    }
    
    private function adminDisableAdvertisement() {
        $this->data['advertisement']['active'] = false;
        $this->saveData();
        $this->sendMessage($this->chatId, "✅ تبلیغ همگانی غیرفعال شد.");
        $this->adminAdvertisement();
    }
    
    private function adminClearAdvertisement() {
        $this->data['advertisement']['sent_to'] = [];
        $this->data['advertisement']['active'] = false;
        $this->data['advertisement']['type'] = '';
        $this->data['advertisement']['content'] = '';
        $this->data['advertisement']['file_id'] = null;
        $this->saveData();
        $this->sendMessage($this->chatId, "✅ تاریخچه و تنظیمات تبلیغ همگانی پاک شد.");
        $this->adminAdvertisement();
    }
    
    private function adminAddForceJoin() {
        $this->data['users'][$this->userId]['pending_action'] = 'admin_add_force';
        $this->saveData();
        $this->sendMessage($this->chatId, "لطفا @username کانال را برای افزودن به عضویت اجباری ارسال کنید:\n⚠️ توجه: ربات باید در این کانال ادمین باشد!");
    }
    
    private function handleAdminAddForce() {
        $channel = trim($this->text);
        if (!preg_match('/^@[a-zA-Z0-9_]+$/', $channel)) {
            $this->sendMessage($this->chatId, "❌ فرمت کانال نامعتبر است. لطفا از @channelname استفاده کنید.");
            return;
        }
        if (!$this->checkBotAdminInChannel($channel)) {
            $this->sendMessage($this->chatId, "❌ ربات در کانال {$channel} ادمین نیست. لطفا ابتدا ربات را به عنوان ادمین به کانال اضافه کنید.");
            return;
        }
        if (!in_array($channel, $this->data['forced_join'])) {
            $this->data['forced_join'][] = $channel;
            $this->saveData();
            $this->sendMessage($this->chatId, "✅ کانال {$channel} به لیست عضویت اجباری اضافه شد.");
        } else {
            $this->sendMessage($this->chatId, "این کانال قبلاً اضافه شده است.");
        }
        $this->showAdminPanel();
    }
    
    private function adminRemoveForceJoin() {
        if (empty($this->data['forced_join'])) {
            $this->sendMessage($this->chatId, "هیچ کانالی برای عضویت اجباری تنظیم نشده است.");
            return;
        }
        $keyboard = [];
        foreach ($this->data['forced_join'] as $channel) {
            $keyboard[] = [
                ['text' => "حذف {$channel}", 'callback_data' => "admin_force_remove_{$channel}"]
            ];
        }
        $keyboard[] = [
            ['text' => EMOJI_BACK . " بازگشت", 'callback_data' => 'admin_panel']
        ];
        $replyMarkup = ['inline_keyboard' => $keyboard];
        $this->sendMessage($this->chatId, "کانال‌های عضویت اجباری:", null, $replyMarkup);
    }
    
    private function adminForceRemove($data) {
        $channel = str_replace('admin_force_remove_', '', $data);
        $key = array_search($channel, $this->data['forced_join']);
        if ($key !== false) {
            unset($this->data['forced_join'][$key]);
            $this->data['forced_join'] = array_values($this->data['forced_join']);
            $this->saveData();
            $this->sendMessage($this->chatId, "✅ کانال {$channel} از لیست عضویت اجباری حذف شد.");
            $this->showAdminPanel();
        } else {
            $this->sendMessage($this->chatId, "❌ کانال یافت نشد!");
        }
    }
    
    private function adminRequestBlockUser() {
        $this->data['users'][$this->userId]['pending_action'] = 'admin_block_user';
        $this->saveData();
        $this->sendMessage($this->chatId, "لطفا آیدی عددی کاربری که می‌خواهید بلاک کنید را ارسال کنید:");
    }
    
    private function handleAdminBlockUser() {
        $userId = intval($this->text);
        if (!isset($this->data['users'][$userId])) {
            $this->sendMessage($this->chatId, "❌ کاربر یافت نشد.");
            return;
        }
        $this->data['users'][$userId]['blocked'] = true;
        $this->saveData();
        $this->sendMessage($userId, "⚠️ شما توسط ادمین از ربات بلاک شده‌اید.");
        $this->sendMessage($this->chatId, "✅ کاربر بلاک شد.");
        $this->showAdminPanel();
    }
    
    private function adminRequestUnblockUser() {
        $this->data['users'][$this->userId]['pending_action'] = 'admin_unblock_user';
        $this->saveData();
        $this->sendMessage($this->chatId, "لطفا آیدی عددی کاربری که می‌خواهید آنبلاک کنید را ارسال کنید:");
    }
    
    private function handleAdminUnblockUser() {
        $userId = intval($this->text);
        if (!isset($this->data['users'][$userId])) {
            $this->sendMessage($this->chatId, "❌ کاربر یافت نشد.");
            return;
        }
        unset($this->data['users'][$userId]['blocked']);
        $this->saveData();
        $this->sendMessage($userId, "✅ شما توسط ادمین آنبلاک شده‌اید.");
        $this->sendMessage($this->chatId, "✅ کاربر آنبلاک شد.");
        $this->showAdminPanel();
    }
    
    private function adminRequestWarnUser() {
        $this->data['users'][$this->userId]['pending_action'] = 'admin_warn_user';
        $this->saveData();
        $this->sendMessage($this->chatId, "لطفا آیدی عددی کاربر و متن اخطار را به فرمت زیر ارسال کنید:\nآیدی|متن اخطار\n\nمثال:\n123456789|لطفا قوانین ربات را رعایت کنید.");
    }
    
    private function handleAdminWarnUser() {
        $parts = explode('|', $this->text, 2);
        if (count($parts) < 2) {
            $this->sendMessage($this->chatId, "❌ فرمت نامعتبر. لطفا از فرمت گفته شده استفاده کنید.");
            return;
        }
        $userId = intval(trim($parts[0]));
        $warning = trim($parts[1]);
        if (!isset($this->data['users'][$userId])) {
            $this->sendMessage($this->chatId, "❌ کاربر یافت نشد.");
            return;
        }
        $warningMessage = "⚠️ اخطار از ادمین:\n\n{$warning}";
        $this->sendMessage($userId, $warningMessage);
        $this->sendMessage($this->chatId, "✅ اخطار ارسال شد.");
        $this->showAdminPanel();
    }
    
    private function adminRequestBroadcast() {
        $this->data['users'][$this->userId]['pending_action'] = 'admin_broadcast';
        $this->saveData();
        $this->sendMessage($this->chatId, "لطفا پیام همگانی را ارسال کنید (متن، عکس، ویدیو و ...):");
    }
    
    private function handleAdminBroadcast() {
        $message = $this->messageType === 'text' ? $this->text : ($this->caption ?: '');
        $sent = 0; $failed = 0;
        foreach ($this->data['users'] as $userId => $user) {
            if ($userId == $this->userId) continue;
            $result = false;
            if ($this->messageType === 'text') {
                $result = $this->sendMessage($userId, "📢 پیام همگانی از ادمین:\n\n{$message}");
            } else {
                $result = $this->sendMedia($userId, $this->messageType, $this->getFileId(), "📢 پیام همگانی از ادمین:\n\n{$message}");
            }
            if ($result) $sent++; else $failed++;
            usleep(100000);
        }
        $this->sendMessage($this->chatId, "✅ ارسال همگانی انجام شد.\nارسال موفق: {$sent}\nارسال ناموفق: {$failed}");
        $this->showAdminPanel();
    }
    
    private function adminShowStats() {
        $totalUsers = count($this->data['users']);
        $totalMessages = 0;
        $activeUsers = 0;
        $blockedUsers = 0;
        $today = strtotime('today');
        $weekAgo = time() - 604800;
        foreach ($this->data['users'] as $user) {
            $totalMessages += $user['stats']['sent'] + $user['stats']['received'];
            $blockedUsers += count($user['settings']['blocked_users']);
            if ($user['last_activity'] >= $weekAgo) $activeUsers++;
        }
        $message = "📊 آمار کامل ربات:\n\n";
        $message .= "👥 کل کاربران: {$totalUsers}\n";
        $message .= "📈 کاربران فعال (۷ روز): {$activeUsers}\n";
        $message .= "📤📥 کل پیام‌ها: {$totalMessages}\n";
        $message .= "⛔ کل بلاک‌ها: {$blockedUsers}\n";
        $message .= "📝 پست‌های در انتظار: " . count($this->data['pending_posts']) . "\n";
        $message .= "📩 پیام‌های پشتیبانی: " . count($this->data['support_messages']) . "\n";
        $message .= "🔗 کانال‌های عضویت اجباری: " . count($this->data['forced_join']) . "\n";
        $message .= "📢 تبلیغ همگانی: " . ($this->data['advertisement']['active'] ? '✅ فعال' : '❌ غیرفعال') . "\n";
        $message .= "🛂 کلمات ممنوعه: " . count($this->data['bad_words']) . "\n";
        $keyboard = [
            [
                ['text' => EMOJI_BACK . " بازگشت", 'callback_data' => 'admin_panel']
            ]
        ];
        $replyMarkup = ['inline_keyboard' => $keyboard];
        $this->sendMessage($this->chatId, $message, null, $replyMarkup);
    }
    
    private function adminRequestSearch() {
        $this->data['users'][$this->userId]['pending_action'] = 'admin_search_user';
        $this->saveData();
        $this->sendMessage($this->chatId, "لطفا آیدی عددی، @username یا نام کاربری که می‌خواهید جستجو کنید را ارسال کنید:");
    }
    
    private function handleAdminSearchUser() {
        $query = trim($this->text);
        $results = [];
        foreach ($this->data['users'] as $userId => $user) {
            if (strpos($userId, $query) !== false || 
                strpos($user['username'], $query) !== false ||
                strpos($user['first_name'], $query) !== false ||
                strpos($user['last_name'], $query) !== false) {
                $results[] = ['id' => $userId, 'user' => $user];
            }
        }
        if (empty($results)) {
            $this->sendMessage($this->chatId, "❌ هیچ کاربری یافت نشد.");
            return;
        }
        $message = "🔍 نتایج جستجو:\n\n";
        foreach ($results as $result) {
            $user = $result['user'];
            $message .= "🆔: {$result['id']}\n";
            $message .= "👤: {$user['first_name']} {$user['last_name']}\n";
            $message .= "📛: @{$user['username']}\n";
            $message .= "📊 پیام‌ها: {$user['stats']['sent']}/{$user['stats']['received']}\n";
            $message .= "━━━━━━━━━━━━━━\n";
        }
        $this->sendMessage($this->chatId, $message);
        $this->showAdminPanel();
    }
    
    private function adminShowSupport() {
        $pendingMessages = [];
        foreach ($this->data['support_messages'] as $id => $msg) {
            if (!$msg['answered']) $pendingMessages[$id] = $msg;
        }
        if (empty($pendingMessages)) {
            $this->sendMessage($this->chatId, "📭 هیچ پیام پشتیبانی در انتظار پاسخ وجود ندارد.");
            return;
        }
        $message = "📩 پیام‌های پشتیبانی در انتظار:\n\n";
        foreach ($pendingMessages as $id => $msg) {
            $user = $this->data['users'][$msg['user_id']];
            $message .= "🆔: {$msg['user_id']}\n";
            $message .= "👤: {$user['first_name']}\n";
            $message .= "💬: " . substr($msg['message'], 0, 50) . "...\n";
            $message .= "⏰: " . date('Y-m-d H:i', $msg['timestamp']) . "\n";
            $message .= "🔗 پاسخ: /reply_{$id}\n";
            $message .= "━━━━━━━━━━━━━━\n";
        }
        $keyboard = [
            [
                ['text' => EMOJI_SOCIAL_BAN . " محدودیت شبکه اجتماعی", 'callback_data' => 'admin_social_ban_menu']
            ],
            [
                ['text' => EMOJI_BACK . " بازگشت", 'callback_data' => 'admin_panel']
            ]
        ];
        $replyMarkup = ['inline_keyboard' => $keyboard];
        $this->sendMessage($this->chatId, $message, null, $replyMarkup);
    }
    
    private function handleAdminReply($messageId) {
        if (!isset($this->data['support_messages'][$messageId])) {
            $this->sendMessage($this->chatId, "❌ پیام پشتیبانی یافت نشد.");
            return;
        }
        $this->data['users'][$this->userId]['pending_action'] = 'admin_reply_support';
        $this->data['users'][$this->userId]['pending_data'] = $messageId;
        $this->saveData();
        $supportMsg = $this->data['support_messages'][$messageId];
        $user = $this->data['users'][$supportMsg['user_id']];
        $this->sendMessage($this->chatId, "پاسخ به پیام پشتیبانی کاربر {$user['first_name']}:\n\n{$supportMsg['message']}\n\nلطفا پاسخ خود را ارسال کنید:");
    }
    
    private function handleAdminReplySupport() {
        $messageId = $this->data['users'][$this->userId]['pending_data'];
        if (!isset($this->data['support_messages'][$messageId])) {
            $this->sendMessage($this->chatId, "❌ پیام پشتیبانی یافت نشد.");
            return;
        }
        $supportMsg = $this->data['support_messages'][$messageId];
        $userId = $supportMsg['user_id'];
        if ($this->messageType === 'text') {
            $this->sendMessage($userId, "📩 پاسخ پشتیبانی:\n\n{$this->text}");
        } else {
            $this->sendMedia($userId, $this->messageType, $this->getFileId(), "📩 پاسخ پشتیبانی:\n\n{$this->caption}");
        }
        $this->data['support_messages'][$messageId]['answered'] = true;
        $this->saveData();
        $this->sendMessage($this->chatId, "✅ پاسخ ارسال شد.");
        $this->showAdminPanel();
    }
    
    private function adminRequestSetChannel() {
        $this->data['users'][$this->userId]['pending_action'] = 'admin_set_channel';
        $this->saveData();
        $current = $this->data['social_channel'] ?: 'تنظیم نشده';
        $this->sendMessage($this->chatId, "کانال فعلی شبکه اجتماعی: {$current}\n\nلطفا @username کانال جدید را ارسال کنید:");
    }
    
    private function handleAdminSetChannel() {
        $channel = trim($this->text);
        if (!preg_match('/^@[a-zA-Z0-9_]+$/', $channel)) {
            $this->sendMessage($this->chatId, "❌ فرمت کانال نامعتبر است. لطفا از @channelname استفاده کنید.");
            return;
        }
        $this->data['social_channel'] = $channel;
        $this->saveData();
        $this->sendMessage($this->chatId, "✅ کانال شبکه اجتماعی به {$channel} تغییر یافت.");
        $this->showAdminPanel();
    }
    
    private function adminShowPendingPosts() {
        if (empty($this->data['pending_posts'])) {
            $this->sendMessage($this->chatId, "📭 هیچ پستی در انتظار تایید وجود ندارد.");
            return;
        }
        $message = "📝 پست‌های در انتظار تایید:\n\n";
        foreach ($this->data['pending_posts'] as $id => $post) {
            $user = $this->data['users'][$post['user_id']];
            $message .= "🆔: {$post['user_id']}\n";
            $message .= "👤: {$user['first_name']}\n";
            $message .= "📛 یوزرنیم: @" . ($user['username'] ?: 'ندارد') . "\n";
            $message .= "📄 نوع: {$post['type']}\n";
            $message .= "⏰: " . date('Y-m-d H:i', $post['timestamp']) . "\n";
            $message .= "✅ تایید: /approve_{$id}\n";
            $message .= "❌ رد: /reject_{$id}\n";
            $message .= "━━━━━━━━━━━━━━\n";
        }
        $keyboard = [
            [
                ['text' => EMOJI_BACK . " بازگشت", 'callback_data' => 'admin_panel']
            ]
        ];
        $replyMarkup = ['inline_keyboard' => $keyboard];
        $this->sendMessage($this->chatId, $message, null, $replyMarkup);
    }
    
    private function adminTextSettings() {
        $message = "⚙️ تنظیمات متنی ربات:\n\n";
        $message .= "📝 متن استارت: " . substr($this->data['start_text'], 0, 30) . "...\n";
        $message .= "ℹ️ متن راهنما: " . substr($this->data['help_text'], 0, 30) . "...\n";
        $message .= "📞 متن پشتیبانی: " . substr($this->data['support_text'], 0, 30) . "...\n";
        $message .= "📜 متن قوانین: " . substr($this->data['rules_text'], 0, 30) . "...\n\n";
        $message .= "لطفا گزینه مورد نظر را انتخاب کنید:";
        $keyboard = [
            [
                ['text' => '📝 تنظیم متن استارت', 'callback_data' => 'admin_set_start'],
                ['text' => 'ℹ️ تنظیم متن راهنما', 'callback_data' => 'admin_set_help']
            ],
            [
                ['text' => '📞 تنظیم متن پشتیبانی', 'callback_data' => 'admin_set_support'],
                ['text' => '📜 تنظیم متن قوانین', 'callback_data' => 'admin_set_rules']
            ],
            [
                ['text' => EMOJI_BACK . " بازگشت", 'callback_data' => 'admin_panel']
            ]
        ];
        $replyMarkup = ['inline_keyboard' => $keyboard];
        $this->sendMessage($this->chatId, $message, null, $replyMarkup);
    }
    
    private function adminSetStart() {
        $this->data['users'][$this->userId]['pending_action'] = 'admin_set_start';
        $this->saveData();
        $current = $this->data['start_text'];
        $this->sendMessage($this->chatId, "متن فعلی دستور /start:\n{$current}\n\nلطفا متن جدید را ارسال کنید:");
    }
    
    private function handleAdminSetStart() {
        $this->data['start_text'] = $this->text;
        $this->saveData();
        $this->sendMessage($this->chatId, "✅ متن دستور /start با موفقیت تغییر یافت.");
        $this->adminTextSettings();
    }
    
    private function adminSetHelp() {
        $this->data['users'][$this->userId]['pending_action'] = 'admin_set_help';
        $this->saveData();
        $current = $this->data['help_text'];
        $this->sendMessage($this->chatId, "متن فعلی دستور /help:\n{$current}\n\nلطفا متن جدید را ارسال کنید:");
    }
    
    private function handleAdminSetHelp() {
        $this->data['help_text'] = $this->text;
        $this->saveData();
        $this->sendMessage($this->chatId, "✅ متن دستور /help با موفقیت تغییر یافت.");
        $this->adminTextSettings();
    }
    
    private function adminSetSupport() {
        $this->data['users'][$this->userId]['pending_action'] = 'admin_set_support';
        $this->saveData();
        $current = $this->data['support_text'];
        $this->sendMessage($this->chatId, "متن فعلی دستور /support:\n{$current}\n\nلطفا متن جدید را ارسال کنید:");
    }
    
    private function handleAdminSetSupport() {
        $this->data['support_text'] = $this->text;
        $this->saveData();
        $this->sendMessage($this->chatId, "✅ متن دستور /support با موفقیت تغییر یافت.");
        $this->adminTextSettings();
    }
    
    private function showRules() {
        $rulesText = $this->data['rules_text'];
        $this->sendMessage($this->chatId, $rulesText);
        $this->showMainMenu();
    }
    
    private function adminSetRules() {
        $this->data['users'][$this->userId]['pending_action'] = 'admin_set_rules';
        $this->saveData();
        $current = $this->data['rules_text'];
        $this->sendMessage($this->chatId, "متن فعلی دستور /rules:\n{$current}\n\nلطفا متن جدید را ارسال کنید:");
    }
    
    private function handleAdminSetRules() {
        $this->data['rules_text'] = $this->text;
        $this->saveData();
        $this->sendMessage($this->chatId, "✅ متن دستور /rules با موفقیت تغییر یافت.");
        $this->adminTextSettings();
    }
    
    private function adminToggleBot() {
        $this->data['bot_active'] = !$this->data['bot_active'];
        $this->saveData();
        $status = $this->data['bot_active'] ? 'روشن' : 'خاموش';
        $this->sendMessage($this->chatId, "✅ ربات {$status} شد.");
        $this->showAdminPanel();
    }
    
    private function adminBadWordsMenu() {
        $message = "🛂 مدیریت کلمات ممنوعه (توهین و تحدید)\n\n";
        $message .= "تعداد کلمات فعلی: " . count($this->data['bad_words']);
        $keyboard = [
            [
                ['text' => '❌ افزودن کلمه', 'callback_data' => 'admin_add_badword'],
                ['text' => '📑 لیست کلمات', 'callback_data' => 'admin_list_badwords']
            ],
            [
                ['text' => EMOJI_BACK . " بازگشت", 'callback_data' => 'admin_panel']
            ]
        ];
        $replyMarkup = ['inline_keyboard' => $keyboard];
        $this->sendMessage($this->chatId, $message, null, $replyMarkup);
    }
    
    private function adminRequestAddBadWord() {
        $this->data['users'][$this->userId]['pending_action'] = 'admin_add_badword';
        $this->saveData();
        $this->sendMessage($this->chatId, "لطفا کلمه مورد نظر را ارسال کنید:");
    }
    
    private function handleAdminAddBadWord() {
        $word = trim($this->text);
        if (empty($word)) {
            $this->sendMessage($this->chatId, "❌ کلمه نمی‌تواند خالی باشد.");
            return;
        }
        $word = mb_strtolower($word, 'UTF-8');
        if (!in_array($word, $this->data['bad_words'])) {
            $this->data['bad_words'][] = $word;
            $this->saveData();
            $this->sendMessage($this->chatId, "✅ کلمه «{$word}» به لیست ممنوعه اضافه شد.");
        } else {
            $this->sendMessage($this->chatId, "❌ این کلمه قبلاً اضافه شده است.");
        }
        $this->adminBadWordsMenu();
    }
    
    private function adminListBadWords() {
        if (empty($this->data['bad_words'])) {
            $this->sendMessage($this->chatId, "📭 لیست کلمات ممنوعه خالی است.");
            return;
        }
        $message = "📑 لیست کلمات ممنوعه:\n\n";
        $keyboard = [];
        foreach ($this->data['bad_words'] as $index => $word) {
            $message .= ($index + 1) . ". {$word}\n";
            $keyboard[] = [
                ['text' => "❌ حذف {$word}", 'callback_data' => 'admin_remove_badword_' . $word]
            ];
        }
        $keyboard[] = [
            ['text' => EMOJI_BACK . " بازگشت", 'callback_data' => 'admin_bad_words']
        ];
        $replyMarkup = ['inline_keyboard' => $keyboard];
        $this->sendMessage($this->chatId, $message, null, $replyMarkup);
    }
    
    private function adminRemoveBadWord($data) {
        $word = substr($data, strlen('admin_remove_badword_'));
        $key = array_search($word, $this->data['bad_words']);
        if ($key !== false) {
            unset($this->data['bad_words'][$key]);
            $this->data['bad_words'] = array_values($this->data['bad_words']);
            $this->saveData();
            $this->sendMessage($this->chatId, "✅ کلمه «{$word}» از لیست حذف شد.");
        } else {
            $this->sendMessage($this->chatId, "❌ کلمه یافت نشد.");
        }
        $this->adminListBadWords();
    }
    
    private function showHelp() {
        $helpText = $this->data['help_text'];
        $this->sendMessage($this->chatId, $helpText);
        $this->showMainMenu();
    }
    
    private function showSupport() {
        $supportText = $this->data['support_text'];
        $this->sendMessage($this->chatId, $supportText);
        $this->showMainMenu();
    }
    
    // --- توابع کمکی API ---
    private function sendMessage($chatId, $text, $replyTo = null, $replyMarkup = null) {
        $url = $this->apiUrl . "sendMessage";
        $data = [
            'chat_id' => $chatId,
            'text' => $text,
            'parse_mode' => 'HTML'
        ];
        if ($replyTo) $data['reply_to_message_id'] = $replyTo;
        if ($replyMarkup) $data['reply_markup'] = json_encode($replyMarkup);
        $result = $this->sendRequest($url, $data);
        return json_decode($result, true);
    }
    
    private function sendMedia($chatId, $type, $fileId, $caption = null, $replyMarkup = null) {
        $method = ''; $field = '';
        switch ($type) {
            case 'photo': $method = 'sendPhoto'; $field = 'photo'; break;
            case 'video': $method = 'sendVideo'; $field = 'video'; break;
            case 'voice': $method = 'sendVoice'; $field = 'voice'; break;
            case 'document': $method = 'sendDocument'; $field = 'document'; break;
            case 'audio': $method = 'sendAudio'; $field = 'audio'; break;
            case 'video_note': $method = 'sendVideoNote'; $field = 'video_note'; break;
            default: return false;
        }
        $url = $this->apiUrl . $method;
        $data = [
            'chat_id' => $chatId,
            $field => $fileId
        ];
        if ($caption) {
            $data['caption'] = $caption;
            $data['parse_mode'] = 'HTML';
        }
        if ($replyMarkup) $data['reply_markup'] = json_encode($replyMarkup);
        $result = $this->sendRequest($url, $data);
        return json_decode($result, true);
    }
    
    private function deleteMessage($chatId, $messageId) {
        $url = $this->apiUrl . "deleteMessage";
        $data = [
            'chat_id' => $chatId,
            'message_id' => $messageId
        ];
        $this->sendRequest($url, $data);
    }
    
    private function forwardMessage($chatId, $fromChatId, $messageId) {
        if (!$messageId) return false;
        $url = $this->apiUrl . "forwardMessage";
        $data = [
            'chat_id' => $chatId,
            'from_chat_id' => $fromChatId,
            'message_id' => $messageId
        ];
        $result = $this->sendRequest($url, $data);
        return $result;
    }
    
    private function editMessageReplyMarkup($chatId, $messageId, $replyMarkup) {
        $url = $this->apiUrl . "editMessageReplyMarkup";
        $data = [
            'chat_id' => $chatId,
            'message_id' => $messageId
        ];
        if ($replyMarkup !== null) {
            $data['reply_markup'] = json_encode($replyMarkup);
        }
        $this->sendRequest($url, $data);
    }
    
    private function answerCallback($callbackId, $text = null, $showAlert = false) {
        $url = $this->apiUrl . "answerCallbackQuery";
        $data = ['callback_query_id' => $callbackId];
        if ($text) $data['text'] = $text;
        if ($showAlert) $data['show_alert'] = true;
        $this->sendRequest($url, $data);
    }
    
    private function sendRequest($url, $data) {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
        $result = curl_exec($ch);
        curl_close($ch);
        return $result;
    }
}

// اجرای ربات
$bot = new CrowMasBot(BOT_TOKEN);
?>