logged_in == 1) { $stmt = $pdo->prepare("SELECT * FROM `accounts` WHERE `username` = ?"); $stmt->execute([$user->login_username]); $account = $stmt->fetch(); if (!$account) { $pdo->prepare("UPDATE `users` SET `logged_in` = 0, `login_username` = NULL WHERE `telegram_id` = ?") ->execute([$from_id]); setStep($from_id, "home"); $responseText = "⚠️ *خطا در دسترسی به حساب کاربری*\n\n" . "متأسفانه اطلاعات حساب کاربری شما در سیستم یافت نشد یا ممکن است توسط مدیریت حذف شده باشد.\n\n" . "🔐 لطفاً برای ادامه کار، مجدداً وارد حساب کاربری خود شوید.\n\n" . "📞 در صورت بروز مشکل، با پشتیبانی تماس حاصل فرمایید."; sendMessage($from_id, $responseText, $enterUserKeyboard); die; } $queryCards = "SELECT `full_name`, `card_number` FROM `cards` WHERE `username` = ? ORDER BY id DESC"; $stmtCards = $pdo->prepare($queryCards); $stmtCards->execute([$user->login_username]); $cards = $stmtCards->fetchAll(); $cardsText = ""; if (!empty($cards)) { $cardsText .= "\n\n💳 *کارت‌های ثبت‌شده شما:*\n"; foreach ($cards as $index => $c) { $cardsText .= "\n*#" . ($index + 1) . "*\n"; $cardsText .= "👤 نام صاحب حساب: *{$c->full_name}*\n"; $cardsText .= "💳 شماره کارت: `{$c->card_number}`\n"; } } else { $cardsText .= "\n\n💳 *هنوز هیچ کارت بانکی ثبت نکرده‌اید.*"; } setStep($from_id, "cards"); $responseText = "💳 *مدیریت کارت‌های بانکی*\n\n" . "در این بخش می‌توانید کارت‌های بانکی خود را مدیریت کنید:\n\n" . "➕ افزودن کارت بانکی جدید\n" . "🗑 حذف کارت بانکی ثبت شده\n\n" . $cardsText; sendMessage($from_id, $responseText, $cardsKeyboard); die; } // مشاهده اطلاعات کارت‌ها با دکمه‌های اینلاین if ($text == "💳 اطلاعات کارت‌ها" && $user->logged_in == 1) { $stmt = $pdo->prepare("SELECT * FROM `accounts` WHERE `username` = ?"); $stmt->execute([$user->login_username]); $account = $stmt->fetch(); if (!$account) { $pdo->prepare("UPDATE `users` SET `logged_in` = 0, `login_username` = NULL WHERE `telegram_id` = ?") ->execute([$from_id]); setStep($from_id, "home"); $responseText = "⚠️ *خطا در دسترسی به حساب کاربری*\n\n" . "متأسفانه اطلاعات حساب کاربری شما در سیستم یافت نشد.\n\n" . "🔐 لطفاً برای ادامه کار، مجدداً وارد حساب کاربری خود شوید."; sendMessage($from_id, $responseText, $enterUserKeyboard); die; } $queryCards = "SELECT `id`, `full_name`, `card_number` FROM `cards` WHERE `username` = ? ORDER BY id DESC"; $stmtCards = $pdo->prepare($queryCards); $stmtCards->execute([$user->login_username]); $cards = $stmtCards->fetchAll(); if (empty($cards)) { $responseText = "💳 *اطلاعات کارت‌ها*\n\n" . "❌ هیچ کارت بانکی ثبت نشده است.\n\n" . "➕ می‌توانید از بخش *کارت‌های من* کارت جدید اضافه کنید."; sendMessage($from_id, $responseText, $cardsKeyboard); die; } $responseText = "💳 *اطلاعات کارت‌های شما*\n\n"; $responseText .= "📊 تعداد کارت‌ها: *" . count($cards) . "*\n\n"; $inlineKeyboard = []; foreach ($cards as $index => $c) { $cardDisplay = substr($c->card_number, -4); $responseText .= "*#" . ($index + 1) . "*\n"; $responseText .= "👤 نام: *{$c->full_name}*\n"; $responseText .= "💳 شماره: `****{$cardDisplay}`\n\n"; $inlineKeyboard[] = [ [ "text" => "💳 {$c->full_name} - ****{$cardDisplay}", "callback_data" => "view_card:{$c->id}" ] ]; } $keyboard = json_encode([ "inline_keyboard" => $inlineKeyboard ]); sendMessage($from_id, $responseText, $keyboard); die; } // مدیریت callback های کارت‌ها if (isset($callback_query) && isset($data) && strpos($data, "view_card:") === 0) { $cardId = (int) str_replace("view_card:", "", $data); $checkUser = $pdo->prepare("SELECT * FROM `users` WHERE `telegram_id` = ?"); $checkUser->execute([$from_id]); $user = $checkUser->fetch(); if (!$user || $user->logged_in != 1) { answerCallback($callback_query->id, "⚠️ لطفاً مجدداً وارد حساب کاربری شوید.", true); die; } $queryCard = "SELECT `id`, `full_name`, `card_number` FROM `cards` WHERE `id` = ? AND `username` = ?"; $stmtCard = $pdo->prepare($queryCard); $stmtCard->execute([$cardId, $user->login_username]); $card = $stmtCard->fetch(); if (!$card) { answerCallback($callback_query->id, "❌ کارت یافت نشد.", true); die; } $cardDisplay = substr($card->card_number, -4); $responseText = "💳 *جزئیات کارت*\n\n" . "👤 نام صاحب کارت: *{$card->full_name}*\n" . "💳 شماره کارت: `{$card->card_number}`\n" . "🔹 ۴ رقم آخر: `****{$cardDisplay}`\n\n" . "لطفاً عملیات مورد نظر را انتخاب کنید:"; $inlineKeyboard = [ [ [ "text" => "✏️ ویرایش نام", "callback_data" => "edit_card_name:{$card->id}" ], [ "text" => "🗑 حذف کارت", "callback_data" => "delete_card_confirm:{$card->id}" ] ] ]; $keyboard = json_encode([ "inline_keyboard" => $inlineKeyboard ]); answerCallback($callback_query->id, "💳 جزئیات کارت", false); editMessage($chat_id, $message_id, $responseText, $keyboard); die; } // ویرایش نام کارت if (isset($callback_query) && isset($data) && strpos($data, "edit_card_name:") === 0) { $cardId = (int) str_replace("edit_card_name:", "", $data); $checkUser = $pdo->prepare("SELECT * FROM `users` WHERE `telegram_id` = ?"); $checkUser->execute([$from_id]); $user = $checkUser->fetch(); if (!$user || $user->logged_in != 1) { answerCallback($callback_query->id, "⚠️ لطفاً مجدداً وارد حساب کاربری شوید.", true); die; } $queryCard = "SELECT `id` FROM `cards` WHERE `id` = ? AND `username` = ?"; $stmtCard = $pdo->prepare($queryCard); $stmtCard->execute([$cardId, $user->login_username]); $card = $stmtCard->fetch(); if (!$card) { answerCallback($callback_query->id, "❌ کارت یافت نشد.", true); die; } setStep($from_id, "edit_card_name:{$cardId}"); answerCallback($callback_query->id, "✏️ لطفاً نام جدید را وارد کنید.", false); $responseText = "✏️ *ویرایش نام کارت*\n\nلطفاً نام و نام خانوادگی جدید صاحب کارت را وارد نمایید:"; sendMessage($from_id, $responseText, $backToMainKeyboard); die; } if (strpos($user->step, "edit_card_name:") === 0 && $user->logged_in == 1) { $cardId = (int) str_replace("edit_card_name:", "", $user->step); $newName = trim($text); if (mb_strlen($newName) < 3) { sendMessage($from_id, "⚠️ نام باید حداقل ۳ کاراکتر باشد.", $backToMainKeyboard); die; } $queryCard = "SELECT `id` FROM `cards` WHERE `id` = ? AND `username` = ?"; $stmtCard = $pdo->prepare($queryCard); $stmtCard->execute([$cardId, $user->login_username]); $card = $stmtCard->fetch(); if (!$card) { sendMessage($from_id, "❌ کارت یافت نشد.", $backToMainKeyboard); die; } $pdo->prepare("UPDATE `cards` SET `full_name` = ? WHERE `id` = ?")->execute([$newName, $cardId]); setStep($from_id, "cards"); sendMessage($from_id, "✅ نام کارت با موفقیت تغییر یافت.", $cardsKeyboard); die; } // تایید حذف کارت if (isset($callback_query) && isset($data) && strpos($data, "delete_card_confirm:") === 0) { $cardId = (int) str_replace("delete_card_confirm:", "", $data); $checkUser = $pdo->prepare("SELECT * FROM `users` WHERE `telegram_id` = ?"); $checkUser->execute([$from_id]); $user = $checkUser->fetch(); if (!$user || $user->logged_in != 1) { answerCallback($callback_query->id, "⚠️ لطفاً مجدداً وارد حساب کاربری شوید.", true); die; } $queryCard = "SELECT `id`, `full_name`, `card_number` FROM `cards` WHERE `id` = ? AND `username` = ?"; $stmtCard = $pdo->prepare($queryCard); $stmtCard->execute([$cardId, $user->login_username]); $card = $stmtCard->fetch(); if (!$card) { answerCallback($callback_query->id, "❌ کارت یافت نشد.", true); die; } $cardDisplay = substr($card->card_number, -4); $responseText = "⚠️ *تأیید حذف کارت*\n\n" . "💳 کارت: `****{$cardDisplay}`\n" . "👤 صاحب کارت: *{$card->full_name}*\n\n" . "⚠️ آیا مطمئن هستید که می‌خواهید این کارت را حذف کنید؟"; $confirmKeyboard = json_encode([ "inline_keyboard" => [ [ [ "text" => "✅ تایید", "callback_data" => "delete_card_yes:{$cardId}" ], [ "text" => "❌ لغو", "callback_data" => "delete_card_no" ] ] ] ]); answerCallback($callback_query->id, "⚠️ لطفاً تأیید کنید", false); editMessage($chat_id, $message_id, $responseText, $confirmKeyboard); die; } // حذف کارت if (isset($callback_query) && isset($data) && strpos($data, "delete_card_yes:") === 0) { $cardId = (int) str_replace("delete_card_yes:", "", $data); $checkUser = $pdo->prepare("SELECT * FROM `users` WHERE `telegram_id` = ?"); $checkUser->execute([$from_id]); $user = $checkUser->fetch(); if (!$user || $user->logged_in != 1) { answerCallback($callback_query->id, "⚠️ لطفاً مجدداً وارد حساب کاربری شوید.", true); die; } $queryCard = "SELECT `id` FROM `cards` WHERE `id` = ? AND `username` = ?"; $stmtCard = $pdo->prepare($queryCard); $stmtCard->execute([$cardId, $user->login_username]); $card = $stmtCard->fetch(); if (!$card) { answerCallback($callback_query->id, "❌ کارت یافت نشد.", true); die; } $pdo->prepare("DELETE FROM `cards` WHERE `id` = ?")->execute([$cardId]); answerCallback($callback_query->id, "✅ کارت با موفقیت حذف شد.", false); $responseText = "✅ *کارت حذف شد*\n\nکارت شما با موفقیت از سیستم حذف شد."; editMessage($chat_id, $message_id, $responseText); die; } // لغو حذف کارت if (isset($callback_query) && isset($data) && $data == "delete_card_no") { $checkUser = $pdo->prepare("SELECT * FROM `users` WHERE `telegram_id` = ?"); $checkUser->execute([$from_id]); $user = $checkUser->fetch(); if (!$user || $user->logged_in != 1) { answerCallback($callback_query->id, "⚠️ لطفاً مجدداً وارد حساب کاربری شوید.", true); die; } answerCallback($callback_query->id, "❌ عملیات لغو شد.", false); $responseText = "❌ *عملیات لغو شد*\n\nحذف کارت لغو شد."; editMessage($chat_id, $message_id, $responseText); die; } if ($text == "➕ افزودن کارت" && $user->logged_in == 1) { setStep($from_id, "card-add:number"); $responseText = "➕ *افزودن کارت بانکی جدید*\n\n" . "💳 لطفاً *شماره کارت ۱۶ رقمی* را بدون خط تیره و فاصله وارد نمایید.\n\n" . "📝 *مثال:* `6037991234567890`\n\n" . "⚠️ توجه: شماره کارت باید دقیقاً ۱۶ رقم باشد."; sendMessage($from_id, $responseText, $backToMainKeyboard); die; } if ($user->step == "card-add:number" && $user->logged_in == 1) { $cardNumber = trim($text); if (!preg_match('/^[0-9]{16}$/', $cardNumber)) { $responseText = "⚠️ *شماره کارت نامعتبر*\n\n" . "شماره کارت باید دقیقاً *۱۶ رقم* و فقط شامل اعداد باشد.\n\n" . "💳 لطفاً شماره کارت صحیح را مجدداً وارد نمایید.\n\n" . "📝 *فرمت صحیح:* ۱۶ رقم بدون خط تیره و فاصله"; sendMessage($from_id, $responseText, $backToMainKeyboard); die; } $queryCheckCard = "SELECT `id` FROM `cards` WHERE `card_number` = ? AND `username` = ?"; $stmtCheckCard = $pdo->prepare($queryCheckCard); $stmtCheckCard->execute([$cardNumber, $user->login_username]); $cardExists = $stmtCheckCard->fetch(); if ($cardExists) { $responseText = "❌ *کارت قبلاً ثبت شده است*\n\n" . "این شماره کارت قبلاً توسط شما در سیستم ثبت شده است.\n\n" . "⚠️ هر کاربر می‌تواند هر شماره کارت را فقط *یک بار* ثبت نماید.\n\n" . "💳 لطفاً شماره کارت دیگری وارد نمایید یا از منوی اصلی بازگردید."; sendMessage($from_id, $responseText, $backToMainKeyboard); die; } setStep($from_id, "card-add:name:$cardNumber"); $responseText = "✅ *شماره کارت تأیید شد*\n\n" . "👤 لطفاً *نام و نام خانوادگی صاحب کارت* را وارد نمایید.\n\n" . "📝 *مثال:* علی احمدی"; sendMessage($from_id, $responseText, $backToMainKeyboard); die; } if (strpos($user->step, "card-add:name:") === 0 && $user->logged_in == 1) { $parts = explode(":", $user->step); $cardNumber = trim($parts[2]); $fullName = trim($text); if (mb_strlen($fullName) < 3) { $responseText = "⚠️ *نام وارد شده نامعتبر است*\n\n" . "نام و نام خانوادگی باید حداقل *۳ کاراکتر* باشد.\n\n" . "👤 لطفاً نام و نام خانوادگی صحیح را مجدداً وارد نمایید.\n\n" . "📝 *مثال:* علی احمدی"; sendMessage($from_id, $responseText, $backToMainKeyboard); die; } $queryInsertCard = "INSERT INTO `cards` (`full_name`, `card_number`, `telegram_id`, `username`) VALUES (?, ?, ?, ?)"; $stmtInsert = $pdo->prepare($queryInsertCard); $stmtInsert->execute([$fullName, $cardNumber, $from_id, $user->login_username]); setStep($from_id, "cards"); $responseText = "✅ *کارت جدید ثبت شد*\n\n" . "📋 *اطلاعات کارت*\n\n" . "💳 شماره کارت: `{$cardNumber}`\n" . "👤 نام صاحب: *{$fullName}*\n\n" . "✅ کارت شما در سیستم ثبت شد و آماده استفاده است.\n\n" . "💸 اکنون می‌توانید از این کارت برای درخواست برداشت استفاده نمایید."; sendMessage($from_id, $responseText, $cardsKeyboard); die; } if ($text == "🗑 حذف کارت" && $user->logged_in == 1) { setStep($from_id, "card-delete:number"); $responseText = "🗑 *حذف کارت بانکی*\n\n" . "💳 لطفاً *شماره کارت ۱۶ رقمی* که می‌خواهید حذف کنید را وارد نمایید.\n\n" . "⚠️ توجه: پس از حذف، این کارت از سیستم شما حذف خواهد شد."; sendMessage($from_id, $responseText, $backToMainKeyboard); die; } if ($user->step == "card-delete:number" && $user->logged_in == 1) { $cardNumber = trim($text); if (!preg_match('/^[0-9]{16}$/', $cardNumber)) { $responseText = "⚠️ *شماره کارت نامعتبر*\n\n" . "شماره کارت باید *۱۶ رقم* و فقط شامل اعداد باشد.\n\n" . "💳 لطفاً شماره کارت صحیح را مجدداً وارد نمایید.\n\n" . "📝 *فرمت صحیح:* ۱۶ رقم بدون خط تیره و فاصله"; sendMessage($from_id, $responseText, $backToMainKeyboard); die; } $queryCheckCard = "SELECT `id` FROM `cards` WHERE `card_number` = ? AND `username` = ?"; $stmtCheckCard = $pdo->prepare($queryCheckCard); $stmtCheckCard->execute([$cardNumber, $user->login_username]); $card = $stmtCheckCard->fetch(); if (!$card) { $responseText = "❌ *کارت یافت نشد*\n\n" . "این شماره کارت در حساب کاربری شما ثبت نشده است.\n\n" . "💳 لطفاً شماره کارت ثبت‌شده دیگری وارد نمایید یا از منوی اصلی بازگردید.\n\n" . "📋 برای مشاهده کارت‌های ثبت شده، از منوی *کارت‌های من* استفاده کنید."; sendMessage($from_id, $responseText, $backToMainKeyboard); die; } $queryDeleteCard = "DELETE FROM `cards` WHERE `id` = ?"; $stmtDeleteCard = $pdo->prepare($queryDeleteCard); $stmtDeleteCard->execute([$card->id]); setStep($from_id, "cards"); $responseText = "✅ *کارت حذف شد*\n\n" . "📋 *اطلاعات کارت حذف شده*\n\n" . "💳 شماره کارت: `{$cardNumber}`\n\n" . "✅ کارت شما از سیستم حذف شد.\n\n" . "💡 در صورت نیاز، می‌توانید مجدداً کارت جدید اضافه نمایید."; sendMessage($from_id, $responseText, $cardsKeyboard); die; }