ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
ini_set('log_errors', 1);
ini_set('error_log', __DIR__ . '/error_log.txt');
include_once 'config.php';
$update = json_decode(file_get_contents('php://input'));
if (!$update) {
exit;
}
// استخراج آیدی چت و کاربر در حالتهای مختلف پیام و کالبک
$chat_id = $update->message->chat->id ?? $update->callback_query->message->chat->id ?? null;
$from_id = $update->message->from->id ?? $update->callback_query->from->id ?? null;
if (!$chat_id || !$from_id) {
exit;
}
// دکمههای منوهای اصلی ربات
$main_menu = [
["🛍 خرید کانفیگ", "🎁 اکانت تست"],
["💎 تبدیل رفرال به کانفیگ", "👥 زیرمجموعهگیری"],
["👤 حساب کاربری", "🆘 پشتیبانی"]
];
$admin_menu = [
["📊 آمار", "➕ تعریف پلن"],
["📥 افزودن لینک انبار", "📢 ارسال همگانی"],
["پنل مدیریت"]
];
// ۱. قفل جوین اجباری کانال (استثنا برای ادمین)
if (!isMember($from_id) && $from_id != ADMIN_ID) {
if (isset($update->callback_query) && $update->callback_query->data == "check_join") {
// اجازه عبور برای بررسی در بخش کالبک
} else {
// اگر کاربر جدید با لینک رفرال آمده، آیدی دعوتکننده را موقت ذخیره میکنیم
if (isset($update->message->text) && strpos($update->message->text, "/start") === 0) {
$parts = explode(" ", $update->message->text);
if (count($parts) > 1) {
$inviter_id = trim($parts[1]);
if (is_numeric($inviter_id) && $inviter_id != $from_id) {
file_put_contents(__DIR__ . "/temp_ref_$from_id.txt", $inviter_id);
}
}
}
$channel_url = "https://t.me/" . str_replace('@', '', CHANNEL_ID);
$text = "⚠️ برای استفاده از ربات، ابتدا باید عضو کانال شوید!\n\nپس از عضویت روی دکمه زیر کلیک کنید:";
$btn = [
[["text" => "📢 عضویت در کانال", "url" => $channel_url]],
[["text" => "✅ تایید عضویت", "callback_data" => "check_join"]]
];
sendMessage($chat_id, $text, $btn, true);
exit;
}
}
// ۲. پردازش دکمههای شیشهای (Callback Queries)
if (isset($update->callback_query)) {
$callback = $update->callback_query;
$data = $callback->data;
// تایید عضویت و اعمال رفرال
if ($data == "check_join") {
if (isMember($from_id)) {
checkUser($from_id); // ایجاد کاربر در دیتابیس در صورت عدم وجود
$temp_file = __DIR__ . "/temp_ref_$from_id.txt";
if (file_exists($temp_file)) {
$inviter_id = file_get_contents($temp_file);
$stmt = $db->prepare("SELECT has_inviter FROM `users` WHERE `user_id` = ?");
$stmt->execute([$from_id]);
$userData = $stmt->fetch();
if ($userData && $userData['has_inviter'] == 0 && $inviter_id != $from_id) {
$db->prepare("UPDATE `users` SET `referral_count` = referral_count + 1 WHERE `user_id` = ?")->execute([$inviter_id]);
$db->prepare("UPDATE `users` SET `has_inviter` = 1 WHERE `user_id` = ?")->execute([$from_id]);
sendMessage($inviter_id, "🎉 یک نفر با لینک شما عضو ربات شد و امتیاز آن برای شما ثبت گردید.");
}
@unlink($temp_file);
}
sendMessage($chat_id, "✅ عضویت شما تایید شد. به نئونت خوش آمدید!", $main_menu);
} else {
$url = "https://api.telegram.org/bot" . TOKEN . "/answerCallbackQuery?callback_query_id=" . $callback->id . "&text=" . urlencode("❌ هنوز عضو کانال نشدهاید!") . "&show_alert=true";
@file_get_contents($url);
}
}
// تبدیل ۲۵ رفرال به کانفیگ ۱ گیگابایتی
elseif ($data == "claim_ref_1gb") {
$stmt = $db->prepare("SELECT referral_count, used_referrals FROM `users` WHERE `user_id` = ?");
$stmt->execute([$from_id]);
$uData = $stmt->fetch();
$available = ($uData['referral_count'] ?? 0) - ($uData['used_referrals'] ?? 0);
if ($available >= 25) {
// پیدا کردن کانفیگ هدیه از انبار (محصولی که نامش شامل 1 گیگ یا تست باشد برحسب ساختار دیتابیس شما)
$confStmt = $db->prepare("SELECT cp.id, cp.link FROM `config_pool` cp JOIN `products` p ON cp.product_id = p.id WHERE p.name LIKE '%1 گیگ%' AND cp.is_used = 0 LIMIT 1");
$confStmt->execute();
$config = $confStmt->fetch();
if ($config) {
$db->prepare("UPDATE `config_pool` SET `is_used` = 1 WHERE `id` = ?")->execute([$config['id']]);
$db->prepare("UPDATE `users` SET `used_referrals` = used_referrals + 25 WHERE `user_id` = ?")->execute([$from_id]);
$formatted = preg_replace('/(vless:\/\/[^\s]+|http[^\s]+)/', '$1', $config['link']);
sendMessage($chat_id, "🎉 پکیج هدیه ۱ گیگابایتی شما صادر شد:\n\n$formatted");
} else {
sendMessage($chat_id, "❌ انبار پکیجهای ۱ گیگابایتی هدیه فعلاً خالی است. لطفاً به مدیریت اطلاع دهید.");
}
} else {
sendMessage($chat_id, "❌ تعداد رفرالهای مجاز شما کافی نیست (نیاز به ۲۵ عدد، موجودی فعلی: $available).");
}
@file_get_contents("https://api.telegram.org/bot" . TOKEN . "/answerCallbackQuery?callback_query_id=" . $callback->id);
}
// انتخاب پلن خرید
elseif (strpos($data, 'buy_') === 0) {
$prod_id = str_replace('buy_', '', $data);
file_put_contents(__DIR__ . "/temp_buy_id_$from_id.txt", $prod_id);
$stmt = $db->prepare("SELECT * FROM `products` WHERE `id` = ?");
$stmt->execute([$prod_id]);
$p = $stmt->fetch();
$text = "🛒 پلن انتخابی: {$p['name']}\n💰 قیمت: " . number_format($p['price']) . " تومان\n\nلطفاً روش پرداخت را انتخاب کنید:";
$btn = [
[["text" => "💳 کارت به کارت", "callback_data" => "pay_card"], ["text" => "💎 ارز دیجیتال", "callback_data" => "pay_crypto"]],
[["text" => "❌ انصراف", "callback_data" => "home"]]
];
sendMessage($chat_id, $text, $btn, true);
}
// روشهای پرداخت
elseif ($data == "pay_card" || $data == "pay_crypto") {
if ($data == "pay_card") {
$pay_info = "💳 واریز کارت به کارت:\n\nشماره کارت: 6219861456118115\nبه نام: ارشان سعادت نیا\n\n";
} else {
$pay_info = "💎 واریز ارز دیجیتال (TRC20):\n\nآدرس ولت ترون:\nTWwpNxuVgKv8LLwRZV6ifGuqBVTXZqnF1d\n\n";
}
$pay_info .= "⚠️ لطفاً پس از واریز، تصویر فیش یا رسید واریز خود را ارسال کنید:";
setStep($from_id, 'wait_proof');
sendMessage($chat_id, $pay_info, [["انصراف"]]);
}
// تایید فیش توسط ادمین و تحویل خودکار
elseif ($from_id == ADMIN_ID && strpos($data, 'confirm_') === 0) {
$parts = explode('_', $data);
$u_id = $parts[1];
$p_id = $parts[2];
$stmt = $db->prepare("SELECT id, link FROM `config_pool` WHERE `product_id` = ? AND `is_used` = 0 LIMIT 1");
$stmt->execute([$p_id]);
$config = $stmt->fetch();
if ($config) {
$db->prepare("UPDATE `config_pool` SET `is_used` = 1 WHERE `id` = ?")->execute([$config['id']]);
$db->prepare("UPDATE `products` SET `quantity` = quantity - 1 WHERE `id` = ?")->execute([$p_id]);
$formatted = preg_replace('/(vless:\/\/[^\s]+|http[^\s]+)/', '$1', $config['link']);
sendMessage($u_id, "✅ پرداخت شما تایید شد!\n🎯 کانفیگ اختصاصی شما:\n\n$formatted");
sendMessage($chat_id, "✅ اکانت با موفقیت صادر و برای کاربر ارسال شد.");
} else {
sendMessage($chat_id, "❌ خطا: انبار برای این پلن خالی است! ابتدا انبار را شارژ کنید.");
}
}
// افزودن کانفیگ به انبار توسط ادمین
elseif ($from_id == ADMIN_ID && strpos($data, 'addstock_') === 0) {
$prod_id = str_replace('addstock_', '', $data);
file_put_contents(__DIR__ . "/temp_stock_id_$from_id.txt", $prod_id);
setStep($from_id, 'send_bulk_configs');
sendMessage($chat_id, "🚀 لیست کانفیگها را بفرستید.\n⚠️ هر کانفیگ را در یک خط قرار داده و بین کانفیگها علامت *** بگذارید:", [["انصراف"]]);
}
elseif ($data == "home") {
setStep($from_id, 'home');
sendMessage($chat_id, "منوی اصلی:", $main_menu);
}
exit;
}
// ۳. پردازش پیامهای ورودی (متن، عکس و تیکتها)
if (isset($update->message)) {
$message = $update->message;
$text = $message->text ?? '';
// دریافت اطلاعات کاربر از دیتابیس
$user = checkUser($from_id);
// دستورات بازنشانی عمومی
if (strpos($text, "/start") === 0 || $text == "برگشت 🔙" || $text == "انصراف") {
setStep($from_id, 'home');
// بررسی مجدد رفرال برای کاربرانی که قبلاً عضو دیتابیس نبودند
$parts = explode(" ", $text);
if (count($parts) > 1) {
$inviter_id = trim($parts[1]);
if (is_numeric($inviter_id) && $inviter_id != $from_id && $user['has_inviter'] == 0) {
file_put_contents(__DIR__ . "/temp_ref_$from_id.txt", $inviter_id);
}
}
sendMessage($chat_id, "🦾 به نئونت خوش آمدید. لطفاً گزینه مورد نظر خود را انتخاب کنید:", $main_menu);
}
// بخش حساب کاربری
elseif ($text == "👤 حساب کاربری") {
$total_ref = $user['referral_count'] ?? 0;
$used_ref = $user['used_referrals'] ?? 0;
$available_ref = $total_ref - $used_ref;
if ($available_ref < 0) $available_ref = 0;
$msg = "👤 اطلاعات حساب کاربری شما:\n\n" .
"🆔 آیدی عددی شما: $from_id\n" .
"👥 کل زیرمجموعههای شما: $total_ref نفر\n" .
"🪙 رفرالهای مصرف شده: $used_ref عدد\n" .
"🔋 رفرالهای قابل استفاده فعلی: $available_ref عدد";
sendMessage($chat_id, $msg);
}
// بخش تبدیل رفرال
elseif ($text == "💎 تبدیل رفرال به کانفیگ") {
$total_ref = $user['referral_count'] ?? 0;
$used_ref = $user['used_referrals'] ?? 0;
$available_ref = $total_ref - $used_ref;
if ($available_ref < 0) $available_ref = 0;
$msg = "💎 فروشگاه رفرال نئونت\n\n" .
"تعداد رفرالهای آزاد شما: $available_ref عدد\n\n" .
"🛍 پله فعلی:\n" .
"🎁 دریافت کانفیگ ۱ گیگابایتی رایگان در قبال خرُج ۲۵ رفرال فعال.";
$btn = [[["text" => "🎁 دریافت پکیج ۱ گیگابایتی (کسر ۲۵ رفرال)", "callback_data" => "claim_ref_1gb"]]];
sendMessage($chat_id, $msg, $btn, true);
}
// بخش زیرمجموعهگیری
elseif ($text == "👥 زیرمجموعهگیری") {
$bot_user = str_replace('@', '', BOT_USER);
$ref_link = "https://t.me/$bot_user?start=$from_id";
$total_ref = $user['referral_count'] ?? 0;
$used_ref = $user['used_referrals'] ?? 0;
$available_ref = $total_ref - $used_ref;
if ($available_ref < 0) $available_ref = 0;
$msg = "🤝 سیستم زیرمجموعهگیری پلهای نئونت\n\n" .
"با دعوت از دوستان خود به صورت پلهای هدایای پرحجم بگیرید:\n" .
"🎁 پکیج تست ۱ گیگابایتی رایگان ⇽ فقط با گرفتن ۲۵ رفرال!\n\n" .
"📊 آمار دعوتهای شما: $total_ref نفر\n" .
"🔋 رفرالهای موجود شما: $available_ref عدد\n\n" .
"🔗 لینک دعوت اختصاصی شما:\n$ref_link";
$btn = [[["text" => "🚀 ارسال لینک برای دوستان", "url" => "https://t.me/share/url?url=" . urlencode($ref_link)]]];
sendMessage($chat_id, $msg, $btn, true);
}
// سیستم اکانت تست هوشمند پلهای
elseif ($text == "🎁 اکانت تست") {
$ref_count = $user['referral_count'] ?? 0;
$free_test_status = $user['free_test'] ?? 0;
$target_plan = '';
$current_level = 0;
if ($free_test_status == 0) { $target_plan = "تست 20 مگ"; $current_level = 1; }
elseif ($ref_count >= 2 && $free_test_status < 2) { $target_plan = "تست 40 مگ"; $current_level = 2; }
elseif ($ref_count >= 5 && $free_test_status < 5) { $target_plan = "تست 100 مگ"; $current_level = 5; }
elseif ($ref_count >= 10 && $free_test_status < 10) { $target_plan = "تست 200 مگ"; $current_level = 10; }
elseif ($ref_count >= 15 && $free_test_status < 15) { $target_plan = "تست 350 مگ"; $current_level = 15; }
elseif ($ref_count >= 20 && $free_test_status < 20) { $target_plan = "تست 700 مگ"; $current_level = 20; }
elseif ($ref_count >= 25 && $free_test_status < 25) { $target_plan = "تست 1 گیگ"; $current_level = 25; }
if (empty($target_plan)) {
if ($free_test_status == 25) {
sendMessage($chat_id, "❌ شما تمام اکانتهای تست رایگان پلهای را تا سطح نهایی (۱ گیگابایت) دریافت کردهاید!");
} else {
$next_req = 2;
if ($free_test_status == 1) $next_req = 2;
elseif ($free_test_status == 2) $next_req = 5;
elseif ($free_test_status == 5) $next_req = 10;
elseif ($free_test_status == 10) $next_req = 15;
elseif ($free_test_status == 15) $next_req = 20;
elseif ($free_test_status == 20) $next_req = 25;
$needed = $next_req - $ref_count;
$bot_user = str_replace('@', '', BOT_USER);
$ref_link = "https://t.me/$bot_user?start=$from_id";
$msg = "🔒 اکانت تست سطح بعدی قفل است!\n\nبرای باز کردن سطح جدید هدایا، باید $needed کاربر جدید دیگر دعوت کنید.\n\n👥 وضعیت فعلی: $ref_count دعوت از $next_req مورد نیاز.\n\n🔗 لینک دعوت شما:\n$ref_link";
sendMessage($chat_id, $msg, [[["text" => "🚀 ارسال لینک برای دوستان", "url" => "https://t.me/share/url?url=" . urlencode($ref_link)]]], true);
}
} else {
$stmt = $db->prepare("SELECT cp.id, cp.link FROM `config_pool` cp JOIN `products` p ON cp.product_id = p.id WHERE p.type = 'test' AND p.name = ? AND cp.is_used = 0 LIMIT 1");
$stmt->execute([$target_plan]);
$conf = $stmt->fetch();
if ($conf) {
$db->prepare("UPDATE `config_pool` SET `is_used` = 1 WHERE `id` = ?")->execute([$conf['id']]);
$db->prepare("UPDATE `users` SET `free_test` = ? WHERE `user_id` = ?")->execute([$current_level, $from_id]);
$formatted = preg_replace('/(vless:\/\/[^\s]+|http[^\s]+)/', '$1', $conf['link']);
sendMessage($chat_id, "🎁 اکانت تست سطح {$target_plan} شما صادر شد:\n\n$formatted\n\n👥 کل زیرمجموعههای شما: $ref_count نفر");
} else {
sendMessage($chat_id, "😔 انبار اکانتهای تست مربوط به پلن «{$target_plan}» در حال حاضر خالی است. لطفاً به مدیریت اطلاع دهید.");
}
}
}
// منوی خرید کانفیگ پرمیوم
elseif ($text == "🛍 خرید کانفیگ") {
$stmt = $db->query("SELECT * FROM `products` WHERE `type` = 'premium' AND `quantity` > 0");
$prods = $stmt->fetchAll();
if ($prods) {
$btns = [];
foreach ($prods as $p) {
$btns[] = [["text" => $p['name'] . " | " . number_format($p['price']) . " ت", "callback_data" => "buy_" . $p['id']]];
}
sendMessage($chat_id, "👇 لطفا یکی از پلنهای زیر را جهت خرید انتخاب کنید:", $btns, true);
} else {
sendMessage($chat_id, "❌ در حال حاضر موجودی کانفیگهای فروشی تمام شده است. به زودی شارژ خواهد شد.");
}
}
// بخش پشتیبانی و تیکتینگ
elseif ($text == "🆘 پشتیبانی") {
setStep($from_id, 'wait_ticket');
sendMessage($chat_id, "💬 پیام پشتیبانی خود را (به صورت متن یا فرمتهای دیگر) بنویسید تا مستقیماً به دست مدیریت برسد:", [["برگشت 🔙"]]);
}
// ذخیره تیکت کاربران و ارسال به ادمین
elseif ($user['step'] == 'wait_ticket' && $text != "برگشت 🔙") {
sendMessage(ADMIN_ID, "📩 پیام پشتیبانی جدید!\n👤 فرستنده: $from_id\n\n📝 متن پیام:\n$text");
sendMessage($chat_id, "✅ پیام شما با موفقیت برای مدیریت ارسال شد. به زودی پاسخ شما داده خواهد شد.", $main_menu);
setStep($from_id, 'home');
}
// دریافت فیش واریزی کاربران و فوروارد به ادمین برای تایید
elseif ($user['step'] == 'wait_proof' && $text != "انصراف") {
$p_id = @file_get_contents(__DIR__ . "/temp_buy_id_$from_id.txt");
$admin_msg = "💰 رسید پرداخت جدید واصل شد!\n👤 آیدی خریدار: $from_id\n📦 آیدی پلن درخواستی: $p_id";
$admin_btn = [[["text" => "✅ تایید فیش و تحویل خودکار کانفیگ", "callback_data" => "confirm_{$from_id}_{$p_id}"]]];
if (isset($message->photo)) {
$photo_id = end($message->photo)->file_id;
sendPhoto(ADMIN_ID, $photo_id, $admin_msg, $admin_btn);
} else {
sendMessage(ADMIN_ID, $admin_msg . "\n📝 متن همراه: $text", $admin_btn, true);
}
@unlink(__DIR__ . "/temp_buy_id_$from_id.txt");
sendMessage($chat_id, "✅ رسید شما برای ادمین ارسال شد. پس از تایید نهایی، کانفیگ اختصاصی شما به صورت خودکار همینجا برایتان صادر خواهد شد.", $main_menu);
setStep($from_id, 'home');
}
// -----------------------------------------------------
// ⚙️ کلیدها و تسکهای اختصاصی ادمین ربات (ADMIN_ID)
// -----------------------------------------------------
if ($from_id == ADMIN_ID) {
if ($text == "/admin" || $text == "پنل مدیریت") {
setStep($from_id, 'home');
sendMessage($chat_id, "🔧 به کنترل پنل مدیریت نئونت خوش آمدید:", $admin_menu);
}
elseif ($text == "📊 آمار") {
$u_c = $db->query("SELECT COUNT(*) FROM `users`")->fetchColumn();
$s_c = $db->query("SELECT COUNT(*) FROM `config_pool` WHERE `is_used` = 0")->fetchColumn();
sendMessage($chat_id, "📊 آمار زنده ربات شما:\n\n👤 کل کاربران ثبتشده: $u_c نفر\n💾 کانفیگهای موجود و آماده در انبار: $s_c اکانت");
}
elseif ($text == "➕ تعریف پلن") {
setStep($from_id, 'add_type');
sendMessage($chat_id, "نوع پلنی که میخواهید ایجاد کنید را تعیین کنید:", [["فروشی 💰", "تست 🎁"], ["انصراف"]]);
}
elseif ($user['step'] == 'add_type' && $text != "انصراف") {
file_put_contents(__DIR__ . "/temp_type_$from_id.txt", ($text == "تست 🎁" ? "test" : "premium"));
setStep($from_id, 'add_name');
sendMessage($chat_id, "🏷 نام پلن را وارد کنید (مثال: تست 40 مگ یا پرمیوم یکماهه):");
}
elseif ($user['step'] == 'add_name' && $text != "انصراف") {
file_put_contents(__DIR__ . "/temp_name_$from_id.txt", $text);
setStep($from_id, 'add_price');
sendMessage($chat_id, "💰 قیمت پلن را به عدد و واحد تومان وارد کنید (برای پلن تست عدد 0 بزنید):");
}
elseif ($user['step'] == 'add_price' && $text != "انصراف") {
$stmt = $db->prepare("INSERT INTO `products` (name, type, price, quantity) VALUES (?, ?, ?, 0)");
$stmt->execute([file_get_contents(__DIR__ . "/temp_name_$from_id.txt"), file_get_contents(__DIR__ . "/temp_type_$from_id.txt"), (int)$text]);
@unlink(__DIR__ . "/temp_name_$from_id.txt");
@unlink(__DIR__ . "/temp_type_$from_id.txt");
setStep($from_id, 'home');
sendMessage($chat_id, "✅ پلن جدید با موفقیت در دیتابیس ثبت شد.", $admin_menu);
}
elseif ($text == "📥 افزودن لینک انبار") {
$stmt = $db->query("SELECT id, name FROM `products`");
$btns = [];
foreach ($stmt->fetchAll() as $p) {
$btns[] = [["text" => $p['name'], "callback_data" => "addstock_" . $p['id']]];
}
sendMessage($chat_id, "👇 مایلید به کدام پکیج، لینک کانفیگ اضافه کنید؟", $btns, true);
}
elseif ($user['step'] == 'send_bulk_configs' && $text != "انصراف") {
$prod_id = file_get_contents(__DIR__ . "/temp_stock_id_$from_id.txt");
$configs = explode("***", $text);
$counter = 0;
foreach ($configs as $cfg) {
$cfg = trim($cfg);
if (!empty($cfg)) {
$db->prepare("INSERT INTO `config_pool` (product_id, link, is_used) VALUES (?, ?, 0)")->execute([$prod_id, $cfg]);
$counter++;
}
}
$db->prepare("UPDATE `products` SET `quantity` = quantity + ? WHERE `id` = ?")->execute([$counter, $prod_id]);
@unlink(__DIR__ . "/temp_stock_id_$from_id.txt");
setStep($from_id, 'home');
sendMessage($chat_id, "✅ تعداد $counter کانفیگ با موفقیت به انبار پکیج متصل شد.", $admin_menu);
}
elseif ($text == "📢 ارسال همگانی") {
setStep($from_id, 'send_to_all_users');
sendMessage($chat_id, "✍️ پیام خود را بفرستید (متن خالی، یا عکس به همراه متن زیر آن):\n\nبرای لغو دستور کلمه انصراف را بفرستید.", [["انصراف"]]);
}
elseif ($user['step'] == 'send_to_all_users' && $text != "انصراف") {
sendMessage($chat_id, "⏳ فرآیند ارسال همگانی به کل دیتابیس آغاز شد. لطفاً صبور باشید...", $admin_menu);
setStep($from_id, 'home');
$all_users = $db->query("SELECT user_id FROM `users`")->fetchAll();
$success = 0; $failed = 0;
foreach ($all_users as $u) {
$target_id = $u['user_id'];
if (isset($message->photo)) {
$photo_id = end($message->photo)->file_id;
$caption = $message->caption ?? "";
$url = "https://api.telegram.org/bot" . TOKEN . "/sendPhoto";
$data = ['chat_id' => $target_id, 'photo' => $photo_id, 'caption' => $caption, 'parse_mode' => 'HTML'];
$res = curlRequest($url, $data);
} else {
$url = "https://api.telegram.org/bot" . TOKEN . "/sendMessage";
$data = ['chat_id' => $target_id, 'text' => $text, 'parse_mode' => 'HTML'];
$res = curlRequest($url, $data);
}
if ($res && $res->ok) { $success++; } else { $failed++; }
usleep(40000); // تاخیر ۴۰ میلیثانیهای استاندارد برای جلوگیری از بلاک ترافیک توسط تلگرام
}
$report = "📢 نتیجه نهایی ارسال همگانی:\n\n🟢 ارسال موفق: $success کاربر\n🔴 ناموفق (بلاک/لغو عضویت): $failed کاربر";
sendMessage($chat_id, $report, $admin_menu);
}
}
}