logged_in == 1) { $username = $user->login_username; $stmt = $pdo->prepare("SELECT balance FROM accounts WHERE username = ? LIMIT 1"); $stmt->execute([$username]); $acc = $stmt->fetch(); if (!$acc || $acc->balance <= 0) { sendMessage($from_id, "⚠️ موجودی کافی برای برداشت ندارید.", $backToMainKeyboard); die; } $balanceFormatted = number_format($acc->balance); $responseText = "📤 *درخواست برداشت*\n\n" . "💰 موجودی قابل برداشت: `{$balanceFormatted}` تومان\n\n" . "لطفاً مبلغ مورد نظر را انتخاب کنید:"; $amounts = [ 500000, 1000000, 1500000, 2000000, 2500000, 3000000, 3500000, 4000000, 4500000, 5000000, 6000000, 7000000, 8000000, 9000000, 10000000, 15000000, 20000000 ]; $buttons = []; for ($i = 0; $i < count($amounts); $i += 2) { $row = []; $row[] = ["text" => number_format($amounts[$i]) . " ت"]; if (isset($amounts[$i + 1])) { $row[] = ["text" => number_format($amounts[$i + 1]) . " ت"]; } $buttons[] = $row; } $buttons[] = [["text" => "↩️ بازگشت به منو اصلی"]]; $keyboard = json_encode([ "resize_keyboard" => true, "keyboard" => $buttons ]); setStep($from_id, "withdraw:enter-amount"); sendMessage($from_id, $responseText, $keyboard); die; } if ($user->step == "withdraw:enter-amount" && $user->logged_in == 1) { $clean = str_replace(["ت", ",", " "], "", $text); if (!is_numeric($clean)) { sendMessage($from_id, "⚠️ لطفاً یک مبلغ معتبر از لیست انتخاب کنید."); die; } $amount = intval($clean); $validAmounts = [ 500000, 1000000, 1500000, 2000000, 2500000, 3000000, 3500000, 4000000, 4500000, 5000000, 6000000, 7000000, 8000000, 9000000, 10000000, 15000000, 20000000 ]; if (!in_array($amount, $validAmounts)) { sendMessage($from_id, "❌ مبلغ انتخاب‌شده معتبر نیست."); die; } $stmt = $pdo->prepare("SELECT balance FROM accounts WHERE username = ? LIMIT 1"); $stmt->execute([$user->login_username]); $acc = $stmt->fetch(); if ($amount > $acc->balance) { sendMessage($from_id, "❌ مبلغ انتخاب‌شده بیشتر از موجودی شماست.", $backToMainKeyboard); die; } $stmt = $pdo->prepare("SELECT card_number, full_name FROM cards WHERE username = ?"); $stmt->execute([$user->login_username]); $cards = $stmt->fetchAll(); if (!$cards) { setStep($from_id, "home"); sendMessage($from_id, "⚠️ هیچ کارت بانکی ثبت نشده است.\nابتدا کارت اضافه کنید.", $userAccountKeyboard); die; } $btns = []; foreach ($cards as $c) { $btns[] = [["text" => "{$c->card_number} - {$c->full_name}"]]; } $btns[] = [["text" => "↩️ بازگشت به منو اصلی"]]; $keyboard = json_encode([ "resize_keyboard" => true, "keyboard" => $btns ]); setStep($from_id, "withdraw:select-card:$amount"); $response = "💳 *انتخاب کارت برای برداشت*\n\n" . "مبلغ برداشت: `" . number_format($amount) . "` تومان\n\n" . "یکی از کارت‌های زیر را انتخاب کنید:"; sendMessage($from_id, $response, $keyboard); die; } if (strpos($user->step, "withdraw:select-card:") === 0 && $user->logged_in == 1) { $amount = str_replace("withdraw:select-card:", "", $user->step); $selected = trim($text); $stmt = $pdo->prepare(" SELECT card_number, full_name FROM cards WHERE username = ? AND CONCAT(card_number, ' - ', full_name) = ? LIMIT 1 "); $stmt->execute([$user->login_username, $selected]); $card = $stmt->fetch(); if (!$card) { sendMessage($from_id, "⚠️ کارت انتخاب‌شده معتبر نیست."); die; } $response = "📥 *تایید برداشت*\n\n" . "💰 مبلغ برداشت: `" . number_format($amount) . "` تومان\n" . "💳 کارت مقصد: `{$card->card_number}`\n*{$card->full_name}*\n\n" . "آیا تایید می‌کنید؟"; $keyboard = json_encode([ "resize_keyboard" => true, "keyboard" => [ [["text" => "✔️ تایید برداشت"]], [["text" => "❌ لغو عملیات"]] ] ]); setStep($from_id, "withdraw:confirm:$amount:{$card->card_number}"); sendMessage($from_id, $response, $keyboard); die; } if (strpos($user->step, "withdraw:confirm:") === 0 && $user->logged_in == 1) { list($amount, $cardNumber) = explode(":", str_replace("withdraw:confirm:", "", $user->step)); if ($text == "❌ لغو عملیات") { setStep($from_id, "home"); sendMessage($from_id, "🚫 عملیات برداشت لغو شد.", $userMainKeyboard); die; } if ($text != "✔️ تایید برداشت") { sendMessage($from_id, "⚠️ لطفاً از دکمه‌های موجود استفاده کنید."); die; } $username = $user->login_username; $stmt = $pdo->prepare("SELECT balance FROM accounts WHERE username = ? LIMIT 1"); $stmt->execute([$username]); $acc = $stmt->fetch(); if (!$acc || $acc->balance < $amount) { sendMessage($from_id, "❌ موجودی کافی برای برداشت وجود ندارد.", $backToMainKeyboard); die; } $pdo->prepare("UPDATE accounts SET balance = balance - ? WHERE username = ?") ->execute([$amount, $username]); $trackingId = generateTrackingId(); $pdo->prepare(" INSERT INTO withdrawals (tracking_id, telegram_id, username, amount_irt, card_number, status) VALUES (?, ?, ?, ?, ?, 'pending') ")->execute([$trackingId, $from_id, $username, $amount, $cardNumber]); $rTime = jdate("H:i:s - Y/m/d", strtotime(date("Y/m/d H:i:s")), tr_num: 'en'); $msg = "✅ *درخواست برداشت با موفقیت ثبت شد*\n\n" . "🔢 شناسه پیگیری: `{$trackingId}`\n" . "💰 مبلغ: `" . number_format($amount) . "` تومان\n" . "💳 کارت مقصد: `{$cardNumber}`\n" . "📅 زمان درخواست: {$rTime}\n\n" . "⏳ درخواست شما در صف بررسی قرار گرفت."; sendMessage($from_id, $msg, $userMainKeyboard); setStep($from_id, "home"); $stmt = $pdo->prepare("SELECT channel_id FROM channels WHERE type='withdraw_channel'"); $stmt->execute(); $withdrawChannels = $stmt->fetchAll(); if ($withdrawChannels) { foreach ($withdrawChannels as $c) { $cid = "@" . $c->channel_id; $rTime = jdate("H:i:s - Y/m/d", strtotime(date("Y/m/d H:i:s")), tr_num: 'en'); $adminMessage = "📤 *درخواست برداشت جدید*\n\n" . "👤 کاربر: `{$username}`\n" . "🆔 تلگرام: `{$from_id}`\n" . "🔢 کد پیگیری: `{$trackingId}`\n" . "💰 مبلغ: `" . number_format($amount) . "` تومان\n" . "💳 کارت: `{$cardNumber}`\n" . "📅 زمان درخواست: {$rTime}\n\n" . "⚙️ *وضعیت فعلی:* `در انتظار بررسی`\n\n" . "لطفاً یکی از گزینه‌های زیر را انتخاب کنید:"; $inlineKeyboard = json_encode([ "inline_keyboard" => [ [ ["text" => "📤 ارسال به بانک", "callback_data" => "wd_status:processing:$trackingId"], ], [ ["text" => "❌ رد شد", "callback_data" => "wd_status:rejected:$trackingId"], ["text" => "✅ واریز شد", "callback_data" => "wd_status:paid:$trackingId"] ] ] ]); sendMessage($cid, $adminMessage, $inlineKeyboard); } } die; } if (isset($update->callback_query)) { $cid = $update->callback_query->message->chat->id; $mid = $update->callback_query->message->message_id; $data = $update->callback_query->data; $callbackId = $update->callback_query->id; if (strpos($data, "wd_status:") === 0) { [, $statusFlag, $trackingId] = explode(":", $data); $stmt = $pdo->prepare("SELECT * FROM withdrawals WHERE tracking_id = ? LIMIT 1"); $stmt->execute([$trackingId]); $wd = $stmt->fetch(); if (!$wd) { answerCallback($callbackId, "❌ خطا: درخواست یافت نشد."); die; } if ($wd->status == "rejected") { answerCallback($callbackId, "❌ این تراکنش قبلاً رد شده و قابل تغییر نیست."); die; } if ($wd->status == "done") { answerCallback($callbackId, "❌ این تراکنش قبلاً تسویه شده و قابل تغییر نیست."); die; } if ($statusFlag == "processing") { $newStatus = "sent"; $statusFa = "📤 درحال واریز"; } elseif ($statusFlag == "paid") { $newStatus = "done"; $statusFa = "✅ تسویه شده"; } elseif ($statusFlag == "rejected") { $newStatus = "rejected"; $statusFa = "❌ رد شده"; } else { $newStatus = "pending"; $statusFa = "⏳ در انتظار بررسی"; } $pdo->prepare("UPDATE withdrawals SET status = ? WHERE tracking_id = ?") ->execute([$newStatus, $trackingId]); $amountFormatted = number_format($wd->amount_irt); $cardNumber = $wd->card_number; if ($newStatus == "sent") { $userMsg = "📤 برداشت شما به بانک ارسال شد\n\n" . "💳 کارت مقصد: `{$cardNumber}`\n" . "💰 مبلغ: `{$amountFormatted}` تومان\n" . "🔢 کد پیگیری: `{$trackingId}`"; } elseif ($newStatus == "done") { $userMsg = "✅ برداشت شما تسویه شد\n\n" . "💳 کارت مقصد: `{$cardNumber}`\n" . "💰 مبلغ: `{$amountFormatted}` تومان\n" . "🔢 کد پیگیری: `{$trackingId}`"; } elseif ($newStatus == "rejected") { $pdo->prepare("UPDATE accounts SET balance = balance + ? WHERE username = ?") ->execute([$wd->amount_irt, $wd->username]); $userMsg = "❌ درخواست برداشت شما رد شد و مبلغ به حساب‌تان بازگردانده شد\n\n" . "💳 کارت مقصد: `{$cardNumber}`\n" . "💰 مبلغ بازگشتی: `{$amountFormatted}` تومان\n" . "🔢 کد پیگیری: `{$trackingId}`"; } sendMessage($wd->telegram_id, $userMsg); $rTime = jdate("H:i:s - Y/m/d", strtotime($wd->created_at), tr_num: 'en'); $newText = "📤 درخواست برداشت\n\n" . "👤 کاربر: `{$wd->username}`\n" . "🆔 تلگرام: `{$wd->telegram_id}`\n" . "🔢 کد پیگیری: `{$trackingId}`\n" . "💰 مبلغ: `" . number_format($wd->amount_irt) . "` تومان\n" . "💳 کارت: `{$cardNumber}`\n" . "📅 زمان درخواست: {$rTime}\n\n" . "⚙️ وضعیت جدید: {$statusFa}"; $star_processing = ($statusFlag == "processing") ? " ⭐" : ""; $star_paid = ($statusFlag == "paid") ? " ⭐" : ""; $star_rejected = ($statusFlag == "rejected") ? " ⭐" : ""; $inlineKeyboard = json_encode([ "inline_keyboard" => [ [ ["text" => "📤 ارسال به بانک$star_processing", "callback_data" => "wd_status:processing:$trackingId"] ], [ ["text" => "❌ رد شد$star_rejected", "callback_data" => "wd_status:rejected:$trackingId"], ["text" => "✅ واریز شد$star_paid", "callback_data" => "wd_status:paid:$trackingId"] ] ] ]); editMessage($cid, $mid, $newText, $inlineKeyboard); answerCallback($callbackId, "✔️ وضعیت بروزرسانی شد."); die; } }