prepare('SELECT COUNT(*) FROM users WHERE user_id = ?'); $checkQuery->execute([$user_id]); $count = $checkQuery->fetchColumn(); if ($count > 0) { return "شما قبلاً ثبت‌نام کرده‌اید."; } // افزودن کاربر جدید با مقدار اولیه سکه $insertQuery = $db->prepare('INSERT INTO users (user_id, username,ref_id) VALUES (?,?,?)'); $result = $insertQuery->execute([$user_id, $username,$ref_id]); return "ثبت‌نام با موفقیت انجام شد."; } catch (PDOException $e) { return 'خطا در ثبت اطلاعات: ' . $e->getMessage(); } } function delay(int $second) { if (\function_exists('litespeed_finish_request')) { litespeed_finish_request(); sleep($second); } } function startpanel(): string { return json_encode([ 'inline_keyboard' => [ [ ['text' => "شرکت در بازی 🟢", 'callback_data' => "joingame"], ['text' => "انصراف از بازی 🟡", 'callback_data' => "leftgame"], ], [ ['text' => "شروع بازی 🔵", 'callback_data' => "startgame"], ], [ ['text' => "لغو بازی 🔴", 'callback_data' => "cancelgame"], ], ] ], JSON_UNESCAPED_UNICODE); } function Senariop(): string { return json_encode([ 'inline_keyboard' => [ [ ['text' => "رولت روسی 🔫", 'callback_data' => "senario_1"],['text' => "باکشات رولت ⚔", 'callback_data' => "senario_2"], ], [ ['text' => "بستن ❌", 'callback_data' => "bastp"], ], ] ], JSON_UNESCAPED_UNICODE); } function sharyet(): string { return json_encode([ 'inline_keyboard' => [ [['text' => "دوستانه 🤝", 'callback_data' => "make_1"],['text' => "رقابتی 🗡", 'callback_data' => "make_2"]], [['text' => "بستن ❌", 'callback_data' => "bastp"],['text' => "بازگشت 🔙", 'callback_data' => "bargs"]], ] ], JSON_UNESCAPED_UNICODE); } function admin_group() { return json_encode([ 'inline_keyboard' => [ [ ['text' => "کیک بازیکن ⭕", 'callback_data' => 'kick'], ], [ ['text' => "لغو بازی 🛑", 'callback_data' => 'stop'], ], ] ], JSON_UNESCAPED_UNICODE); } function button_pv() { return json_encode([ 'inline_keyboard' => [ [ ['text' => "برگشت 🔙", 'callback_data' => 'back'], ], ] ], JSON_UNESCAPED_UNICODE); } function pvpanel() { return json_encode([ 'inline_keyboard' => [ [ ['text' => "تعیین نام 📄", 'callback_data' => "sabtnam"],['text' => "پروفایل شما ☄", 'callback_data' => "profile"], ], [ ['text' => "رنکینگ 📊", 'callback_data' => "rank"],['text' => "برترین بازیکنان 🎩", 'callback_data' => "best"], ], [ ['text' => "دعوت از دوستان 🥰", 'callback_data' => "davat"],['text' => "مدیریت سکه 🪙", 'callback_data' => "moseke"], ], [ ['text' => "مدیریت ایموجی 🎭", 'callback_data' => "moemoji"],['text' => "قوانین ربات 📕", 'callback_data' => "ghanon"] ], [ ['text' => "خرید اکانت vip 📀", 'callback_data' => "vip"],['text' => "گردونه شانس 🎋", 'callback_data' => "dayp"] ], [ ['text' => "مشاهده رمز اکانت 🔐", 'callback_data' => "passwordak"] ], ] ]); } function playerslist($db, $chat_id) { $query = $db->prepare("SELECT id_pin FROM games WHERE chat_id = ?"); $query->execute([$chat_id]); $message_id = $query->fetchColumn(); // دریافت لیست بازیکنان همراه با ایموجی و ایموجی دوم $query = $db->prepare(" SELECT p.first_name, p.user_id, u.emoji, u.emoji2 FROM players p LEFT JOIN users u ON p.user_id = u.user_id WHERE p.chat_id = ? "); $query->execute([$chat_id]); $players = $query->fetchAll(PDO::FETCH_ASSOC); $query = $db->prepare("SELECT senario FROM games WHERE chat_id = ?"); $query->execute([$chat_id]); $senario_id = (int)$query->fetchColumn(); $scenario = getScenarioInfo($senario_id); if (!$scenario) return false; $playerList = ""; foreach ($players as $index => $player) { $emoji1 = trim($player['emoji'] ?? ''); $emoji2 = trim($player['emoji2'] ?? ''); $emojiCombo = trim($emoji1 . ' ' . $emoji2); $emojiText = $emojiCombo ? " $emojiCombo" : ""; $name = htmlspecialchars($player['first_name']); $playerList .= ($index + 1) . ". 👤 {$name}$emojiText\n"; } $info = info_gap($db, $chat_id); $group_name = $info['group_name']; $count_game = $info['count_game']; $count = $info['count']; $halat = ""; switch($senario_id){ case 1 : $halat = $count > 1 ? "شمار نفرات : " . $count . " ✅" : "شمار نفرات :" . $count . " ❌"; $tech = base_site . "rolet"; break; case 2 : $allowed_counts = [2, 4, 6, 8]; $halat = in_array($count, $allowed_counts) ? "شمار نفرات : " . $count . " ✅" : "شمار نفرات :" . $count . " ❌"; $tech = base_site . "bokshot"; break; } $model = $info['model']; $newText = "سناریو {$scenario['name']} (آموزش سناریو) \n\n⚜ $model \n\n🧩 شماره بازی :$count_game \n\n👥 نام گروه : $group_name \n\n📜 کسانی که شرکت کردند :\n\n" . $playerList . "\n" . $halat; bot('editMessageMedia', [ 'chat_id' => $chat_id, 'message_id' => $message_id, 'media' => json_encode([ 'type' => 'animation', 'media' => $scenario['start_gif_url'], 'caption' => $newText, 'parse_mode' => 'HTML', ]), 'reply_markup' => startpanel() ]); } function checkjoin($db, $user_id, $channels) { // بررسی عضویت کاربر در کانال‌ها $notJoinedChannels = checkismember($user_id, $channels); if (!empty($notJoinedChannels)) { // ایجاد دکمه‌های عضویت برای کانال‌ها $buttons = []; foreach ($notJoinedChannels as $channel) { $chatId = ltrim($channel, '@'); $buttons[] = [ ['text' => "📢 عضویت در کانال", 'url' => "https://t.me/$chatId"] ]; } // اضافه کردن دکمه "عضو شدم" $buttons[] = [ ['text' => "✅ عضو شدم", 'callback_data' => "join"] ]; // ارسال پیام به کاربر bot('sendMessage', [ 'chat_id' => $user_id, 'text' => "⚠️ برای ادامه فعالیت، باید در کانال‌های زیر عضو شوید:", 'reply_markup' => json_encode([ 'inline_keyboard' => $buttons ]) ]); exit; } } function checkIsMember($user_id, $channels) { $notJoined = []; foreach ($channels as $channel) { if (strpos($channel, '@') === 0) { // درخواست بررسی عضویت کاربر در کانال $result = bot('getChatMember', [ 'chat_id' => $channel, 'user_id' => $user_id ]); // اطمینان از اینکه درخواست موفق بوده و `result` مقدار دارد if (isset($result['result']['status']) && !in_array($result['result']['status'], ['member', 'administrator', 'creator'])) { $notJoined[] = $channel; } } } return $notJoined; } function nextTurn($db, $chat_id, $message_id) { $query = $db->prepare("SELECT senario FROM games WHERE chat_id = ?"); $query->execute([$chat_id]); $senario_id = (int)$query->fetchColumn(); switch($senario_id){ case 1 : rolet_russi($db,$chat_id,$message_id,$senario_id); break; case 2 : buck_shot($db,$chat_id,$message_id,$senario_id); break; } } function playerpanel($senario_id) { $keyboard = []; if ($senario_id == 1) { $keyboard = [ [ ['text' => "شلیک 🔫", 'callback_data' => "shoot"], ['text' => "چرخش خشاب 🎰", 'callback_data' => "charkhesh"] ], [ ['text' => "موقعیت گلوله 🔍", 'callback_data' => "arehads"], ['text' => "ذهن برنده 👁️‍🗨️", 'callback_data' => "zehn"] ], [ ['text' => "بازی با شیطان 😈", 'callback_data' => "moshetan"], ['text' => "معامله با ارتور 🤠", 'callback_data' => "moartor"] ], [ ['text' => "حدس نیت 🧿", 'callback_data' => "hdasniat"], ['text' => "هوش برتر 🧠", 'callback_data' => "hosh"] ], [ ['text' => "🤛بازی با عمو حسن🤜", 'callback_data' => "amohasan"] ], [ ['text' => "حس ششم 🪔", 'callback_data' => "hessh"] ], ]; } elseif ($senario_id == 2) { $keyboard = [ [ ['text' => "شلیک به خود 🔫👤", 'callback_data' => "shot_me"], ], [ ['text' => "شلیک به دیگران 🔫👥", 'callback_data' => "shot_another"] ], [ ['text' => "چاقو 🔪", 'callback_data' => "chagho"], ['text' => "دستبند ⛓", 'callback_data' => "dastband"] ], [ ['text' => "سیگار 🚬", 'callback_data' => "sigar"], ['text' => "نوشابه 🥤", 'callback_data' => "noshabe"] ], [ ['text' => "قرص 💊", 'callback_data' => "ghorse"], ['text' => "معکوس کننده 🔄", 'callback_data' => "makos"] ], [ ['text' => "شوکر ⚡️", 'callback_data' => "shoker"], ['text' => "ذره بین 🔍", 'callback_data' => "zarebin"] ], [ ['text' => "تلفن ☎️", 'callback_data' => "phone"], ] ]; } else { // سناریوهای دیگر یا پیش‌فرض $keyboard = [ [ ['text' => "شلیک 🔫", 'callback_data' => "shoot"], ['text' => "چرخش خشاب 🎰", 'callback_data' => "charkhesh"] ] ]; } return json_encode([ 'inline_keyboard' => $keyboard ]); } function checkUserIsAdmin($from_id, $chat_id) { $result = bot('getChatMember', [ 'chat_id' => $chat_id, 'user_id' => $from_id ]); // اطمینان از اینکه پاسخ به صورت آرایه است if (is_string($result)) { $result = json_decode($result, true); } // بررسی وضعیت عضویت if (isset($result['result']['status']) && ($result['result']['status'] == 'administrator' || $result['result']['status'] == 'creator')) { return true; } return false; } function checkUserTurn($db, $chat_id, $user_id, $callback_query_id = null): bool { $query = $db->prepare("SELECT current_turn FROM games WHERE chat_id = ?"); $query->execute([$chat_id]); $data = $query->fetch(PDO::FETCH_ASSOC); if (!$data || $data['current_turn'] != $user_id) { if ($callback_query_id) { bot('answerCallbackQuery', [ 'callback_query_id' => $callback_query_id, 'text' => 'نوبت تو نیست', 'show_alert' => false ]); } return false; } return true; } function GuidanceMessage($is_safe, $show_truth) { $truth_safe_messages = [ "همه‌چیز آرومه، می‌تونی با خیال راحت نفس بکشی.", "یه حس سبکی توی وجودته... انگار امنی.", "همه‌چی طبیعی و عادیه، جای نگرانی نیست.", "نبضت نرماله، تپش قلبت مثل همیشه‌ست.", "دلت آرومه، بدون اینکه دلیلش رو بدونی.", "ذهنت شفافه، حس خطر ازت دوره.", "بدنت هیچ واکنشی به تهدید نشون نمی‌ده.", "هوایی که نفس می‌کشی سبک‌تره.", "هیچ صدای عجیبی نمیشنوی فقط سکوت خوب.", "همه‌چی مثل روال عادی خودش پیش میره.", "مثل نسیم صبح، همه‌چی آروم و دل‌پذیره.", "نگرانی‌هات محو شدن، فقط آرامش مونده.", "یه احساس خوب، بی‌دلیل توی وجودته.", "همه‌چی سر جاشه، همه‌چی تحت کنترله.", "هیچ نشونه‌ای از خطر دیده نمی‌شه.", "دل‌ت پر از حس اطمینانه، مثل بچگی.", "همه‌چی انگار به نفع تو پیش میره.", "مثل یه پناهگاه وسط طوفان، در امانی.", "چشم‌هات بدون استرس می‌درخشن.", "صدایی از درونت میگه: ادامه بده، امنی.", "نفست سبک و راحته، مثل لحظه‌ی پیروزی.", "ذهنت خلوت و راحته، پر از اعتماد.", "یه انرژی خوب دورت رو گرفته.", "نگاه بقیه پر از آرامشه، مثل خودت.", "هیچی در اطرافت نگران‌کننده نیست.", "مثل وقتی که همه‌چی طبق برنامه‌ست.", "احساس میکنی وقت خنده‌ست، نه ترس.", "هیچی توی فضا تهدیدآمیز نیست.", "دل‌تنگ چیزی نیستی، یعنی امنی.", "احساس امنیت مثل یه بغل گرم دورته." ]; $truth_danger_messages = [ "یه حس مبهم از خطر توی دلت افتاده.", "بدنت یه اخطار داده، حتی اگه کوچیک باشه.", "نفس‌ت سنگین‌تر شده، یه چیزی در جریانه.", "ذهنت درگیر یه نگرانی ناشناخته‌ست.", "یه لرزش خفیف توی انگشت‌هات حس می‌کنی.", "یه صدای بی‌دلیل تو گوشت پیچیده.", "یه تصویر تیره از ذهن‌ت رد شده.", "یه حس عجیب می‌گه شاید امن نباشی.", "دلت یه لحظه خالی شد، انگار چیزی نزدیکه.", "یه سایه از گوشه‌ی چشم دیدی... یا فکر کردی دیدی.", "قلبت یه لحظه ریتمش رو تغییر داده.", "همچی کند شده، مثل قبل از یه اتفاق.", "یه چیزی توی فضا غیرعادیه، حتی اگه نبینی.", "صدای اطرافت عجیب شده، یا شاید فقط حسشه.", "نگاه بقیه تغییر کرده، شاید متوجه چیزی شدن.", "بدنت یه لحظه منجمد شد، مثل واکنش غریزی.", "یه صدایی توی ذهنت میگه: وایسا، یه چیزی اشتباهه.", "حست میگه نرو جلو... یه حس درونی.", "ذهنت نمیتونه تمرکز کنه، همه‌چی مبهمه.", "یه چیزی خلاف عادت داره اتفاق میوفته." ]; // اگر بخوایم راست بگیم if ($show_truth) { return $is_safe ? $truth_safe_messages[array_rand($truth_safe_messages)] : $truth_danger_messages[array_rand($truth_danger_messages)]; } // اگه بخوایم دروغ بگیم (برعکس واقعیت) return $is_safe ? $truth_danger_messages[array_rand($truth_danger_messages)] : $truth_safe_messages[array_rand($truth_safe_messages)]; } function getPersianOrdinal($number) { // واحدها و ده‌ها $units = ["", "یکم", "دوم", "سوم", "چهارم", "پنجم", "ششم", "هفتم", "هشتم", "نهم"]; $tens = ["دهم", "یازدهم", "دوازدهم", "سیزدهم", "چهاردهم", "پانزدهم", "شانزدهم", "هفدهم", "هجدهم", "نوزدهم"]; $tens_multiple = ["", "", "بیست", "سی", "چهل", "پنجاه", "شصت", "هفتاد", "هشتاد", "نود", "صد"]; // صدگان $hundreds = ["", "صد و", "دویست و", "سیصد و", "چهارصد و", "پانصد و", "ششصد و", "هفتصد و", "هشتصد و", "نهصد و"]; if ($number < 10) { return $units[$number]; } elseif ($number < 20) { return $tens[$number - 10]; } elseif ($number < 100) { $ten = intval($number / 10); $unit = $number % 10; // اگر بخش واحد وجود نداشت (مثل 30)، پس "سی‌ام" if ($unit == 0) { return $tens_multiple[$ten] . "‌ام"; // نیم‌فاصله + ام } else { return $tens_multiple[$ten] . " و " . $units[$unit]; } } elseif ($number < 1000) { $hundred_part = $hundreds[intval($number / 100)]; $remainder = $number % 100; if ($remainder == 0) { return rtrim($hundred_part, " و "); } else { return $hundred_part . getPersianOrdinal($remainder); } } elseif ($number < 10000) { $thousand_part = intval($number / 1000); $hundred_part = intval(($number % 1000) / 100); $remainder = $number % 100; $result = ""; if ($thousand_part > 0) { $result .= $units[$thousand_part] . " هزار"; } if ($hundred_part > 0 || $remainder > 0) { $result .= " و "; } if ($hundred_part > 0) { $result .= $hundreds[$hundred_part]; } if ($remainder > 0) { $result .= getPersianOrdinal($remainder); } return rtrim($result); } return "نامشخص"; } function kart(PDO $db,$chat_id): string { $karts = array('nefrin', 'do', 'se'); shuffle($karts); $buttons = []; $row = []; foreach ($karts as $kart) { // تولید توکن یکتا برای این کارت $tokencode = bin2hex(random_bytes(8)); $stmt = $db->prepare("INSERT INTO kart_tokens (token,value,chat_id) VALUES(?,?,?)"); $stmt->execute([$tokencode, $kart,$chat_id]); $row[] = [ 'text' => count($row) + 1, 'callback_data' => "kart_$tokencode" ]; if (count($row) === 2) { $buttons[] = $row; $row = []; } } if (!empty($row)) { $buttons[] = $row; } return json_encode(['inline_keyboard' => $buttons], JSON_UNESCAPED_UNICODE); } function getUserTitle($point) { // لیست اصلی تایتل‌ها طبق امتیاز $titles = array( 300000 => ['title' => "تور ⚡️ - خدای رعد و برق", 'gif' => 'Thor.mp4'], 250000 => ['title' => "مرد آهنی 🤖 - هوش والا", 'gif' => 'ironman.mp4'], 200000 => ['title' => "کاپیتان امریکا 🛡️ - سرباز وفادار", 'gif' => 'Capitan America.mp4'], 180000 => ['title' => "هالک 🧟‍♂️ - قدرت خشم", 'gif' => 'Hulk.mp4'], 170000 => ['title' => "بتمن 🦇 - شوالیه تاریکی", 'gif' => 'Batman.mp4'], 160000 => ['title' => "تانوس 🧤 - قدرت بی‌نهایت", 'gif' => 'Tanos.mp4'], 140000 => ['title' => "جوکر 🃏 - خنده‌ی مرگبار", 'gif' => 'Joker.mp4'], 125000 => ['title' => "جان ویک 🎯 - شکارچی مرگ", 'gif' => 'Janvik.mp4'], 110000 => ['title' => "مرد عنکبوتی 🕸️ - قهرمان دوستانه محله شما", 'gif' => 'Spiderman.mp4'], 95000 => ['title' => "ددپول 🔫 - جوک کشنده", 'gif' => 'Deadpool.mp4'], 85000 => ['title' => "لوگان 🐾 - گرگینه‌ی خشمگین", 'gif' => 'Logan.mp4'], 75000 => ['title' => "جیمز باند 🍸 - جاسوس حرفه‌ای", 'gif' => 'Jamesband.mp4'], 65000 => ['title' => "دارث ویدر 🛸 - ارباب تاریکی", 'gif' => 'Darsvider.mp4'], 55000 => ['title' => "تامی شلبی 🧥 - رئیس شجاع", 'gif' => 'Tomshelbi.mp4'], 45000 => ['title' => "والتر وایت ⚗️ - سازنده دراگ", 'gif' => 'walter.mp4'], 40000 => ['title' => "مایکل اسکافیلد 🧱 - فراری نابغه", 'gif' => 'Micelscafild.mp4'], 35000 => ['title' => "تونی مونتانا 🚬 - پادشاه خیابان‌ها", 'gif' => 'Tonimontona.mp4'], 30000 => ['title' => "نیگان 🩸 - چوب‌به‌دست خطرناک", 'gif' => 'Wdb.mp4'], 25000 => ['title' => "پانیشر 💀 - مجازات مرگ", 'gif' => 'Panisher.mp4'], 23000 => ['title' => "ریک گرایمز - رهبر هدایتگر 🤠", 'gif' => 'Wdg.mp4'], 20000 => ['title' => "پدرخوانده ♟️ - دُن مافیا", 'gif' => 'Don.mp4'], 15000 => ['title' => "هانیبال لکتر 🔪 - قاتل بی‌رحم", 'gif' => 'Haniballekter.mp4'], 10000 => ['title' => "گوستاوو فِرینگ 🧫 - نابغه‌ی خطرناک", 'gif' => 'Gas.mp4'], 7000 => ['title' => "🪓 دردویل شیطان انسان نما", 'gif' => 'Derdevil.mp4'], 5000 => ['title' => "جسی پینکمن 🧨 - آدم‌کش بدنام", 'gif' => 'Pinkman.mp4'], 3000 => ['title' => "کرایون شکارچی - حیوان انسانما 🎃", 'gif' => 'Kraven.mp4'], 2000 => ['title' => "کنستانتین 🔮 - رابط شیاطین", 'gif' => 'Constantin.mp4'], 1000 => ['title' => "فورست گامپ 🕶 - دونده‌ی مرگ", 'gif' => 'Forstgamp.mp4'], 0 => ['title' => "مستر بین 🎭 - نهایت خنده", 'gif' => 'Msterbeen.mp4'] ); $level = count($titles); // بالاترین سطح foreach ($titles as $minPoint => $data) { if ($point >= $minPoint) { return [ 'title' => $data['title'], 'gif' => $data['gif'], 'level' => $level ]; } $level--; } } function randomNumber(){ return random_int(1, 6); } function profile($db, $user_id, $chat_id , $tc = 1){ $query = $db->prepare(" SELECT users.created_at, users.first_name, users.is_vip, users.emoji, users.emoji2, leaderboard_ranked.point, leaderboard_ranked.wins, leaderboard_ranked.losses, leaderboard_ranked.rank FROM ( SELECT leaderboard.user_id, leaderboard.point, leaderboard.wins, leaderboard.losses, ROW_NUMBER() OVER (ORDER BY leaderboard.point DESC) AS rank FROM leaderboard ) AS leaderboard_ranked JOIN users ON leaderboard_ranked.user_id = users.user_id WHERE users.user_id = ? "); $query->execute([$user_id]); $data = $query->fetch(PDO::FETCH_ASSOC); if (!$data) { bot('sendMessage', [ 'chat_id' => $chat_id, 'text' => "❌ هنوز بازی در ربات انجام نداده اید", 'parse_mode' => 'markdown' ]); return; } $query = $db->prepare("SELECT status FROM games WHERE chat_id = ?"); $query->execute([$chat_id]); $status = $query->fetchColumn(); if($status == 'active' && $tc == 2) return; // مقادیر مشترک $name = $data['first_name']; $emoji1 = trim($data['emoji'] ?? ''); $emoji2 = trim($data['emoji2'] ?? ''); $emojiCombo = trim($emoji1 . ' ' . $emoji2); $name_with_emoji = $emojiCombo ? "$name $emojiCombo" : $name; $point = $data['point'] ?? 0; $joined = $data['created_at'] ?? null; $timestamp = $joined ? strtotime($joined) : null; $persian_date = jdate("j F Y", $timestamp); $wins = (int)($data['wins'] ?? 0); $losses = (int)($data['losses'] ?? 0); $kol = $wins + $losses; $darsad = ($kol > 0) ? round(($wins / $kol) * 100) : 0; $rank = $data['rank']; // دریافت لقب عادی $titleData = getUserTitle((int)$point); $normal_title = $titleData['title']; $normal_gif = $titleData['gif']; $normal_level = $titleData['level']; if($user_id == 7663537135){ bot('sendAnimation', [ 'chat_id' => $chat_id, 'animation' => base_url . "shadow.mp4", 'caption' => " نام : $name_with_emoji - مالک بات 💼 💲IRshadow_bot ", 'parse_mode' => 'HTML', ]); return; } if ($data['is_vip'] == 1) { $vip_text = "اکانت VIP 👑"; $titles = "لقب : $normal_title"; } else { $vip_text = "اکانت معمولی"; $titles = "لقب : $normal_title"; } bot('sendAnimation', [ 'chat_id' => $chat_id, 'animation' => base_url . $normal_gif, 'caption' => " نام : $name_with_emoji - $vip_text امتیاز : $point ⭐ رنک کل : $rank 🏅 ━━━━━━━━━━━━━━━ $titles سطح لقب : $normal_level ━━━━━━━━━━━━━━━ تعداد برد : $wins 🟢 تعداد باخت : $losses 🔴 تعداد کل بازی : $kol 📊 درصد برد : $darsad 📉 ━━━━━━━━━━━━━━━ ایدی عددی : $user_id تاریخ پیوستن : $persian_date 📅 💲IRshadow_bot ", 'parse_mode' => 'HTML', ]); } function deletTurn($id_turn,$chat_id){ bot('deleteMessage', [ 'chat_id' => $chat_id,'message_id' => $id_turn ]); } function shoot($db,$chat_id,$user_id,$message_id){ if (!checkUserTurn($db, $chat_id, $user_id)) { exit; } $query = $db->prepare("UPDATE players SET is_used = 1 WHERE user_id = ?"); $query->execute([$user_id]); $query = $db->prepare("SELECT current_position, bullet_position FROM games WHERE chat_id = ?"); $query->execute([$chat_id]); $data = $query->fetch(PDO::FETCH_ASSOC); $name = GetName($db,$user_id); if ($data['current_position'] == $data['bullet_position']) { bot('editMessageText', [ 'chat_id' => $chat_id, 'message_id' => $message_id, // آیدی پیامی که باید ویرایش بشه 'text' => "[$name](tg://user?id=$user_id) شلیک کرد 🧨", 'parse_mode' => 'markdown' ]); delay(3); $query = $db->prepare("SELECT save FROM players WHERE user_id = ?"); $query->execute([$user_id]); $save = (int)$query->fetchColumn(); if($save > 0){ $randomNumber = randomNumber(); $query = $db->prepare("UPDATE games SET current_position = ? WHERE chat_id = ?"); $query->execute([$randomNumber,$chat_id]); $query = $db->prepare("UPDATE players SET save = save - 1 WHERE user_id = ?"); $query->execute([$user_id]); bot('sendMessage', ['chat_id' => $chat_id,'text' => "گلوله پر بود ولی ارتور [$name](tg://user?id=$user_id) رو نجات داد",'parse_mode' => 'markdown']); nextTurn($db, $chat_id,$message_id); exit; } $response = bot('sendAnimation', [ 'chat_id' => $chat_id, 'animation' =>"https://shadow.s14.viptelbot.top/bot/gifs/Kill.mp4", 'caption' => "[$name](tg://user?id=$user_id) کشته شد", 'parse_mode' => 'markdown' ]); $query = $db->prepare("SELECT use_soal FROM players WHERE user_id = ?"); $query->execute([$user_id]); $use_soal = $query->fetch(); if($use_soal['use_soal'] == 0){ processQuestion($db, $chat_id, $user_id, $name); } $query = $db->prepare("UPDATE players SET is_alive = 0 WHERE user_id = ?"); $query->execute([$user_id]); currect_hads($db,$chat_id,$user_id); $query = $db->prepare("SELECT COUNT(*) AS COUNT FROM players WHERE chat_id = ? AND is_alive = 1"); $query->execute([$chat_id]); $count = (int)$query->fetchColumn(); if ($count <= 1) { endGame($db,$chat_id); } $randomNumber = randomNumber(); $query = $db->prepare("UPDATE games SET current_position = ? , count_shoot = ? WHERE chat_id = ?"); $query->execute([$randomNumber,1,$chat_id]); nextTurn($db, $chat_id,$message_id); } else { bot('editMessageText', [ 'chat_id' => $chat_id, 'message_id' => $message_id, // آیدی پیامی که باید ویرایش بشه 'text' => "[$name](tg://user?id=$user_id) شلیک کرد 🧨", 'parse_mode' => 'markdown' ]); delay(3); $name = GetName($db,$user_id); $gifs = array('gifs/Chance1.mp4','gifs/Chance2.mp4'); $query = $db->prepare("SELECT gif_turn,id_turn FROM games WHERE chat_id = ?"); $query->execute([$chat_id]); $data = $query->fetch(PDO::FETCH_ASSOC); if ($data) { $gif_turn = (int)$data['gif_turn']; $selectedGif = $gifs[$gif_turn] ?? $gifs[0]; $new_gif_turn = $gif_turn === 0 ? 1 : 0; $update = $db->prepare("UPDATE games SET gif_turn = ? WHERE chat_id = ?"); $update->execute([$new_gif_turn, $chat_id]); } $response = bot('sendAnimation', [ 'chat_id' => $chat_id, 'animation' =>"https://shadow.s14.viptelbot.top/bot/$selectedGif", 'caption' => "خشاب [$name](tg://user?id=$user_id) خالی بود و در بازی باقی میمونه", 'parse_mode' => 'markdown', ]); $query = $db->prepare("UPDATE players SET point = point + ? WHERE user_id = ?"); $query->execute([7,$user_id]); // افزایش current_position به صورت چرخشی بین 1 تا 6 $query = $db->prepare("UPDATE games SET current_position = (current_position % 6) + 1 WHERE chat_id = ?"); $query->execute([$chat_id]); nextTurn($db, $chat_id,$message_id); } } function endGame($db, $chat_id, $senario = 1){ $query = $db->prepare("SELECT * FROM games WHERE chat_id = ?"); $query->execute([$chat_id]); $data = $query->fetch(PDO::FETCH_ASSOC); if(!$data) return; try { if($senario == 1){ end_rullet($db, $chat_id); } elseif($senario == 2){ end_buck($db, $chat_id); } $db->prepare("DELETE FROM players WHERE chat_id = ?")->execute([$chat_id]); $db->prepare("DELETE FROM games WHERE chat_id = ?")->execute([$chat_id]); } catch (Exception $e) { // لاگ کن یا خطا ارسال کن bot('sendMessage', [ 'chat_id' => $admin_id, 'text' => "❌ خطا در پایان بازی:\n" . $e->getMessage() ]); } exit; } function shetan($db, $chat_id, $user_id, $message_id, $callback_data) { $db->prepare("UPDATE players SET is_chose = 1 WHERE user_id = ?")->execute([$user_id]); $choise = explode('_', $callback_data)[1]; $options = ['sang', 'kaghaz', 'ghachi']; // شیطان 60٪ ضد بازیکن انتخاب می‌کنه، 40٪ تصادفی $counter = ['sang' => 'kaghaz', 'kaghaz' => 'ghachi', 'ghachi' => 'sang']; if (mt_rand(1, 100) <= 40) { $sheytan = $counter[$choise]; // انتخاب هوشمند برای برد } else { $sheytan = $options[array_rand($options)]; // انتخاب تصادفی } $name = GetName($db,$user_id); $emojis = ['sang' => '🪨 سنگ', 'kaghaz' => '📄 کاغذ', 'ghachi' => '✂️ قیچی']; if ($choise == $sheytan) { bot('deleteMessage', ['chat_id' => $chat_id, 'message_id' => $message_id]); bot('sendMessage', [ 'chat_id' => $chat_id, 'text' => "مساوی شد [$name](tg://user?id=$user_id)، دوباره انتخاب کن.", 'parse_mode' => 'markdown', 'reply_markup' => json_encode([ 'inline_keyboard' => [ [['text' => "سنگ 🪨", 'callback_data' => "game_sang"]], [['text' => "کاغذ 📄", 'callback_data' => "game_kaghaz"]], [['text' => "قیچی ✂️", 'callback_data' => "game_ghachi"]], ] ]) ]); $db->prepare("UPDATE players SET is_chose = 0 WHERE user_id = ?")->execute([$user_id]); return; } // بررسی برنده یا بازنده بودن $win = ($choise == 'sang' && $sheytan == 'ghachi') || ($choise == 'kaghaz' && $sheytan == 'sang') || ($choise == 'ghachi' && $sheytan == 'kaghaz'); if ($win) { bot('editMessageText', [ 'chat_id' => $chat_id, 'message_id' => $message_id, 'text' => "آفرین [$name](tg://user?id=$user_id) بردی! انتخاب شیطان: {$emojis[$sheytan]}", 'parse_mode' => 'markdown' ]); $db->prepare("UPDATE players SET point = point + 4 WHERE user_id = ?")->execute([$user_id]); $stmt = $db->prepare("SELECT id_turn FROM games WHERE chat_id = ?"); $stmt->execute([$chat_id]); $id_turn = $stmt->fetchColumn(); bot('editMessageText', [ 'chat_id' => $chat_id, 'message_id' => $id_turn, // آیدی پیامی که باید ویرایش بشه 'text' => "[$name](tg://user?id=$user_id) سنگ کاغذ قیچی رو برد", 'parse_mode' => 'markdown' ]); nextTurn($db, $chat_id, $message_id); } else { bot('editMessageText', [ 'chat_id' => $chat_id, 'message_id' => $message_id, 'text' => "متاسفم [$name](tg://user?id=$user_id)، باختی! انتخاب شیطان: {$emojis[$sheytan]}. باید شلیک کنی.", 'parse_mode' => 'markdown' ]); } } function adminPanel(): string { return json_encode([ 'inline_keyboard' => [ [ ['text' => "اضافه VIP", 'callback_data' => "addvip"], ['text' => "حذف VIP", 'callback_data' => "delvip"], ], [ ['text' => "بن گروه", 'callback_data' => "leftchat"], ['text' => "انبن گروه", 'callback_data' => "unleftchat"], ], [ ['text' => "بن کاربر", 'callback_data' => "banuser"], ['text' => "انبن کاربر", 'callback_data' => "unbanuser"], ], [ ['text' => "مشاهده گروه ها", 'callback_data' => "groupsend"], ['text' => "گرفتن لینک", 'callback_data' => "getlink"], ], [ ['text' => "افزودن سوال", 'callback_data' => "addsoal"],['text' => "پیشکش سکه", 'callback_data' => "sellcoin"], ], [ ['text' => "مشاهده رمز", 'callback_data' => "seepas"],['text' => "انتقال اکانت", 'callback_data' => "enacant"], ], [ ['text' => "پیام همگانی", 'callback_data' => "payam"], ], ] ], JSON_UNESCAPED_UNICODE); } function bests($db, $user_id,$message_id){ $query = $db->prepare(" SELECT users.first_name, users.user_id, users.emoji, users.emoji2, leaderboard.point FROM leaderboard JOIN users ON leaderboard.user_id = users.user_id WHERE users.ban != 1 ORDER BY leaderboard.point DESC LIMIT 10 "); $query->execute(); $data = $query->fetchAll(PDO::FETCH_ASSOC); $rank = "🏆رنکینگ برترین‌ها :\n\n"; $i = 1; foreach($data as $row){ $emoji1 = trim($row['emoji'] ?? ''); $emoji2 = trim($row['emoji2'] ?? ''); $emojiCombo = trim($emoji1 . ' ' . $emoji2); $name = $row['first_name']; $name_with_emoji = $emojiCombo ? "$name $emojiCombo" : $name; $formattedPoint = formatPoint($row['point']); $rank .= "$i. {$name_with_emoji} - {$formattedPoint} ✨\n"; $i++; } bot('editMessageText', [ 'chat_id' => $user_id, 'message_id' => $message_id, 'text' => $rank, 'parse_mode' => 'HTML', 'reply_markup' => button_pv() ]); } function gethome($db,$user_id){ $query = $db->prepare("UPDATE users SET step = ? WHERE user_id = ?"); $query->execute(['home',$user_id]); } function formatPoint($point) { $formatted = number_format($point / 1000, 2); return $formatted . 'k'; } function Ranking($db, $user_id,$message_id){ // بررسی وجود در جدول رنکینگ $query = $db->prepare("SELECT COUNT(*) FROM leaderboard WHERE user_id = ?"); $query->execute([$user_id]); $isExists = (int)$query->fetchColumn(); if ($isExists === 1) { // دریافت وضعیت VIP $query = $db->prepare("SELECT is_vip FROM users WHERE user_id = ?"); $query->execute([$user_id]); $is_vip = (int)$query->fetchColumn(); // مقدار نمایش اطراف: 5 برای VIP و 1 برای کاربر عادی $aroundCount = $is_vip === 1 ? 5 : 1; // واکشی تمام کاربران با رنک $query = $db->prepare(" SELECT leaderboard.user_id, leaderboard.point, users.first_name, users.emoji, users.emoji2, ROW_NUMBER() OVER (ORDER BY leaderboard.point DESC) AS rank FROM leaderboard JOIN users ON leaderboard.user_id = users.user_id "); $query->execute(); $allUsers = $query->fetchAll(PDO::FETCH_ASSOC); // پیدا کردن ایندکس کاربر $targetIndex = -1; foreach($allUsers as $index => $row){ if($row['user_id'] == $user_id){ $targetIndex = $index; break; } } if($targetIndex !== -1){ $start = max(0, $targetIndex - $aroundCount); $end = min(count($allUsers), $targetIndex + $aroundCount + 1); $rankText = "📊 موقعیت شما در رنکینگ:\n\n"; for($i = $start; $i < $end; $i++){ $marker = ($allUsers[$i]['user_id'] == $user_id) ? "(شما➰)" : ""; $name = $allUsers[$i]['first_name']; // ترکیب ایموجی اول و دوم $emoji1 = trim($allUsers[$i]['emoji'] ?? ''); $emoji2 = trim($allUsers[$i]['emoji2'] ?? ''); $emojiCombo = trim($emoji1 . ' ' . $emoji2); $name_with_emoji = $emojiCombo ? "$name $emojiCombo" : $name; $formattedPoint = formatPoint($allUsers[$i]['point']); $rankText .= $marker . "({$allUsers[$i]['rank']}) $name_with_emoji - {$formattedPoint} امتیاز\n"; } bot('editMessageText', [ 'chat_id' => $user_id, 'message_id' => $message_id, 'text' => "$rankText", 'parse_mode' => 'HTML', 'reply_markup' => button_pv() ]); } else { bot('sendMessage', [ 'chat_id' => $user_id, 'text' => "تابحال بازی نکردی", 'parse_mode' => 'HTML' ]); } } } function cancelGameIfAdmin($db, $user_id, $chat_id) { if (checkUserIsAdmin($user_id, $chat_id)) { $query = $db->prepare("SELECT * FROM games WHERE chat_id = ?"); $query->execute([$chat_id]); $data = $query->fetch(PDO::FETCH_ASSOC); if(!$data){ return false; } $query = $db->prepare("SELECT id_pin , id_pv , user_pv FROM games WHERE chat_id = ?"); $query->execute([$chat_id]); $data = $query->fetch(PDO::FETCH_ASSOC); if(!empty($data)){ deletTurn($data['id_pv'],$data['user_pv']); deletTurn($data['id_pin'],$chat_id); } // حذف بازیکنان و بازی مرتبط $query1 = $db->prepare("DELETE FROM players WHERE chat_id = ?"); $query1->execute([$chat_id]); $query2 = $db->prepare("DELETE FROM games WHERE chat_id = ?"); $query2->execute([$chat_id]); $name = GetName($db,$user_id); bot('sendMessage', [ 'chat_id' => $chat_id, 'text' => "بازی توسط ادمین $name لغو شد ⭕", 'parse_mode'=>'HTML' ]); return true; } } function tguser($db,$chat_id){ $query = $db->prepare("SELECT status, id_tg FROM games WHERE chat_id = ?"); $query->execute([$chat_id]); $status = $query->fetch(PDO::FETCH_ASSOC); if ($status && $status['status'] == 'waiting') { bot('deleteMessage', [ 'chat_id' => $chat_id, 'message_id' => $status['id_tg'] ]); $db->prepare("UPDATE players SET is_ready = 0 WHERE chat_id = ?")->execute([$chat_id]); $query = $db->prepare("SELECT user_id FROM players WHERE chat_id = ? AND is_alive = 1"); $query->execute([$chat_id]); $players = $query->fetchAll(PDO::FETCH_ASSOC); $playerList = ""; foreach ($players as $index => $player) { $name = GetName($db,$player['user_id']); $playerList .= ($index + 1) . ". 👤 [{$name}](tg://user?id={$player['user_id']}) ❌\n"; } $newText = "🙋‍♂️ بازی داره شروع میشه، آماده بزنید:\n\n" . $playerList; $response = bot('sendMessage', [ 'chat_id' => $chat_id, 'text' => $newText, 'parse_mode' => 'markdown', 'disable_notification' => false, 'reply_markup' => json_encode([ 'inline_keyboard' => [ [['text' => "آماده 👍", 'callback_data' => "hazer"]], ] ]) ]); $message_id_tg = $response['result']['message_id']; $db->prepare("UPDATE games SET id_tg = ? WHERE chat_id = ?")->execute([$message_id_tg, $chat_id]); } } function kill($db,$chat_id,$user_id,$name){ $query = $db->prepare("UPDATE players SET is_alive = 0 WHERE user_id = ?"); $query->execute([$user_id]); bot('sendMessage', [ 'chat_id' => $chat_id, 'text' =>"[$name](tg://user?id=$user_id) به دلیل نیت خیانت کشته شد", 'parse_mode' => 'markdown', ]); currect_hads($db,$chat_id,$user_id); $query = $db->prepare("UPDATE games SET count_shoot = ? WHERE chat_id = ?"); $query->execute([1,$chat_id]); tasmim ($db,$chat_id,0); } function GetName($db, $user_id) { $query = $db->prepare(" SELECT first_name, emoji, emoji2 FROM users WHERE user_id = ? LIMIT 1 "); $query->execute([$user_id]); $data = $query->fetch(PDO::FETCH_ASSOC); if ($data) { $emoji1 = !empty($data['emoji']) ? $data['emoji'] : ""; $emoji2 = !empty($data['emoji2']) ? $data['emoji2'] : ""; // ترکیب: نام + ایموجی اول (در صورت وجود) + ایموجی دوم (در صورت وجود) return $data['first_name'] . ($emoji1 ? " " . $emoji1 : "") . ($emoji2 ? " " . $emoji2 : ""); } else { return "کاربر"; } } function tasmim($db, $chat_id, $message_id = 0){ $query = $db->prepare("SELECT COUNT(*) FROM players WHERE chat_id = ? AND is_alive = 1"); $query->execute([$chat_id]); $count = (int)$query->fetchColumn(); if ($count <= 1) { // پاک کردن پیام نوبت (در صورت وجود) $query = $db->prepare("SELECT id_turn FROM games WHERE chat_id = ?"); $query->execute([$chat_id]); $data = $query->fetch(PDO::FETCH_ASSOC); if (!empty($data['id_turn'])) { deletTurn($data['id_turn'], $chat_id); } endGame($db, $chat_id); } else { // ادامه به بازیکن بعدی delay(1); nextTurn($db, $chat_id, $message_id); } } function player_chose($db, $chat_id, $callback_prefix = 'chose_player_', $exclude_user_id = null) { $stmt = $db->prepare("SELECT first_name, user_id FROM players WHERE chat_id = ? AND is_alive = 1"); $stmt->execute([$chat_id]); $players = $stmt->fetchAll(PDO::FETCH_ASSOC); $buttons = []; $row = []; foreach ($players as $player) { // اگر یوزر فعلی همان کسی باشد که باید حذف شود، ادامه بده if ($exclude_user_id !== null && $player['user_id'] == $exclude_user_id) { continue; } $row[] = [ 'text' => $player['first_name'] ?? 'بدون نام', 'callback_data' => $callback_prefix . $player['user_id'] ]; if (count($row) === 2) { $buttons[] = $row; $row = []; } } if (!empty($row)) { $buttons[] = $row; } return json_encode(['inline_keyboard' => $buttons], JSON_UNESCAPED_UNICODE); } function processQuestion($db, $chat_id, $user_id, $name) { // آپدیت وضعیت سوال برای بازیکن $query = $db->prepare("UPDATE players SET use_soal = 1 WHERE user_id = ?"); $query->execute([$user_id]); $random_id = randomqu($db); $query = $db->prepare("SELECT id, question_text, option_1, option_2, option_3, option_4 FROM questions WHERE id = ?"); $query->execute([$random_id]); $question = $query->fetch(); // آپدیت اطلاعات سوال برای بازی $query = $db->prepare("UPDATE games SET id_soal = ? WHERE chat_id = ?"); $query->execute([$question['id'], $chat_id]); // ارسال سوال به بازیکن $response = bot('sendMessage', [ 'chat_id' => $chat_id, 'text' => "خب سوال دارم ازت [$name](tg://user?id=$user_id)، جواب بدی تو بازی میمونی \n\n" . $question['question_text'], 'parse_mode' => 'markdown', 'reply_markup' => json_encode([ 'inline_keyboard' => [ [ ['text' => $question['option_1'], 'callback_data' => "option_1"], ['text' => $question['option_2'], 'callback_data' => "option_2"] ], [ ['text' => $question['option_3'], 'callback_data' => "option_3"], ['text' => $question['option_4'], 'callback_data' => "option_4"] ] ] ]) ]); // ذخیره اطلاعات پیام سوال و شناسه جلسه $message_id_soal = $response['result']['message_id']; $session_id = uniqid(); $query = $db->prepare("UPDATE games SET id_me_soal = ? WHERE chat_id = ?"); $query->execute([$message_id_soal, $chat_id]); $count = 20; while($count >= 0){ delay(1); $count--; $query = $db->prepare("SELECT choos_soal FROM players WHERE user_id = ?"); $query->execute([$user_id]); $is_selected = (int)$query->fetchColumn(); if ($is_selected == 1) { break; } } $query = $db->prepare("SELECT id_me_soal FROM games WHERE chat_id = ?"); $query->execute([$chat_id]); $id_me_soal = $query->fetchColumn(); if(!empty($id_me_soal)){ bot('deleteMessage', [ 'chat_id' => $chat_id, 'message_id' => $id_me_soal ]); } $query = $db->prepare("SELECT choos_soal FROM players WHERE user_id = ?"); $query->execute([$user_id]); $is_selected = (int)$query->fetchColumn(); if($is_selected == 0){ $query = $db->prepare("UPDATE players SET is_alive = 0 WHERE user_id = ?"); $query->execute([$user_id]); $name = GetName($db,$user_id); bot('sendMessage', [ 'chat_id' => $chat_id, 'text' =>"[$name](tg://user?id=$user_id) زمانش تموم شد ، از بازی خارج میشه ", 'parse_mode' => 'markdown', ]); currect_hads($db,$chat_id,$user_id); $query = $db->prepare("UPDATE games SET count_shoot = ? WHERE chat_id = ?"); $query->execute([1,$chat_id]); tasmim ($db,$chat_id,0); exit; }else{ exit; } } function randomamo(){ return random_int(1, 4); } function hasChosenBefore($db, $user_id, $callback_query_id): bool { $query = $db->prepare("SELECT is_chose FROM players WHERE user_id = ?"); $query->execute([$user_id]); $is_chose = (int)$query->fetchColumn(); if ($is_chose === 1) { bot('answerCallbackQuery', [ 'callback_query_id' => $callback_query_id, 'text' => 'یه بار استفاده کردی', 'show_alert' => false ]); return true; // یعنی استفاده کرده } return false; // یعنی هنوز استفاده نکرده } function hasUsedAbility($db, $user_id, $callback_query_id): bool { $query = $db->prepare("SELECT is_used FROM players WHERE user_id = ?"); $query->execute([$user_id]); $is_used = (int)$query->fetchColumn(); if ($is_used === 1) { bot('answerCallbackQuery', [ 'callback_query_id' => $callback_query_id, 'text' => 'تو انتخاب کردی !', 'show_alert' => false ]); return true; } return false; } function convertToEnglishNumbers($string) { $fa = ['۰','۱','۲','۳','۴','۵','۶','۷','۸','۹']; $en = ['0','1','2','3','4','5','6','7','8','9']; return str_replace($fa, $en, $string); } function tabdilcoin($db,$text,$user_id){ // تابع تبدیل ارقام فارسی به انگلیسی if (preg_match('/[۰-۹]/u', $text)) { $text = convertToEnglishNumbers($text); } $amount = (int)$text; if ($amount < 1) { bot('sendMessage', [ 'chat_id' => $user_id, 'text' => "لطفاً عدد معتبر وارد کنید" ]); return; } if($amount < 300){ bot('sendMessage', [ 'chat_id' => $user_id, 'text' => "برای تبدیل به امتیاز باید حداقل 300 سکه تبدیل کنید" ]); return; } $query = $db->prepare("SELECT coin FROM users WHERE user_id = ?"); $query->execute([$user_id]); $coin = (int)$query->fetchColumn(); if ($coin >= $amount) { $query = $db->prepare("UPDATE users SET coin = coin - ? WHERE user_id = ?"); $query->execute([$amount, $user_id]); $point = intval($amount * 1.5); $query = $db->prepare("UPDATE leaderboard SET point = point + ? WHERE user_id = ?"); $query->execute([$point, $user_id]); bot('sendMessage', [ 'chat_id' => $user_id, 'text' => "✅ {$amount} سکه با موفقیت تبدیل شد\n🎯 امتیاز دریافت‌شده: {$point}" ]); gethome($db, $user_id); return; } else { bot('sendMessage', [ 'chat_id' => $user_id, 'text' => "موجودی سکه شما کافی نیست" ]); gethome($db, $user_id); return; } } function enteghal($db,$text,$user_id,$chat_id){ if (preg_match('/[۰-۹]/u', $text)) { $text = convertToEnglishNumbers($text); } $amount = (int)$text; if ($amount < 1) { bot('sendMessage', [ 'chat_id' => $chat_id, 'text' => "لطفاً عدد معتبر وارد کنید" ]); return; } $query = $db->prepare("SELECT coin , select_id FROM users WHERE user_id = ?"); $query->execute([$user_id]); $data = $query->fetch(); $coin = $data['coin']; $select_id = $data['select_id']; if (!$select_id || $select_id == $user_id) { bot('sendMessage', [ 'chat_id' => $chat_id, 'text' => "شما گیرنده معتبری انتخاب نکردید." ]); return; } $query = $db->prepare("SELECT user_id FROM users WHERE user_id = ?"); $query->execute([$select_id]); $exist = $query->fetchColumn(); if(empty($exist)){ bot('sendMessage', [ 'chat_id' => $chat_id, 'text' => "کاربر مورد نظر در ربات ثبت نام نکرده" ]); return; } if($amount < 30){ bot('sendMessage', [ 'chat_id' => $chat_id, 'text' => "برای پیشکش باید حداقل 30 سکه پیشکش کنید" ]); return; } if($coin >= $amount){ $query = $db->prepare("UPDATE users SET coin = coin - ?, select_id = NULL WHERE user_id = ?"); $query->execute([$amount, $user_id]); $query = $db->prepare("UPDATE users SET coin = coin + ? WHERE user_id = ?"); $query->execute([$amount, $select_id]); $name = GetName($db,$user_id); $name_recive = GetName($db,$select_id); bot('sendMessage', [ 'chat_id' => $chat_id, 'text' => "از اکانت شما $amount 🪙 سکه کم شد و به [$name_recive](tg://user?id=$select_id) اضافه شد", 'parse_mode' => 'markdown', ]); bot('sendMessage', [ 'chat_id' => $select_id, 'text' => "[$name](tg://user?id=$user_id) به شما $amount 🪙 سکه پیشکش کرد", 'parse_mode' => 'markdown', ]); }else{ bot('sendMessage', [ 'chat_id' => $chat_id, 'text' =>"شما سکه کافی ندارید" ]); } } function buy_emoji($db, $choice, $user_id,$message_id){ $query = $db->prepare("SELECT coin, select_id, step FROM users WHERE user_id = ?"); $query->execute([$user_id]); $data = $query->fetch(); $coin = $data['coin']; $select_id = $data['select_id']; $step = $data['step']; // قیمت و مدت زمان بر اساس انتخاب $options = [ 1 => ['price' => 75, 'duration' => 30], 2 => ['price' => 120, 'duration' => 60], 3 => ['price' => 200, 'duration' => 90], 4 => ['price' => 400, 'duration' => 180], ]; if (!isset($options[$choice])) { bot('sendMessage', [ 'chat_id' => $user_id, 'text' => "انتخاب شما نامعتبر است ❌", ]); return; } $price = $options[$choice]['price']; $duration = $options[$choice]['duration']; if ($coin < $price) { bot('sendMessage', [ 'chat_id' => $user_id, 'text' => "شما سکه کافی ندارید ❌", ]); return; } // انتخاب ستون مناسب برای ذخیره if ($step === 'emoji') { $query = $db->prepare("UPDATE users SET coin = coin - ?, emoji = ?, emoji_time = emoji_time + ?, select_id = NULL WHERE user_id = ?"); $query->execute([$price, $select_id, $duration, $user_id]); } elseif ($step === 'emoji2') { $query = $db->prepare("UPDATE users SET coin = coin - ?, emoji2 = ?, emoji2_time = emoji2_time + ?, select_id = NULL WHERE user_id = ?"); $query->execute([$price, $select_id, $duration, $user_id]); } else { bot('sendMessage', [ 'chat_id' => $user_id, 'text' => "مرحله انتخاب نامعتبر است ❌", ]); return; } // پیام موفقیت $month_text = match($duration) { 30 => 'یک ماه', 60 => 'دو ماه', 90 => 'سه ماه', 180 => 'شش ماه', default => $duration . ' روز' }; bot('editMessageText', [ 'chat_id' => $user_id, 'message_id' => $message_id, 'text' => "ایموجی $select_id به مدت $month_text برای شما فعال شد و $price سکه از حساب شما کم شد ✔", 'parse_mode' => 'HTML', ]); } function randomqu($db){ $query = $db->query("SELECT id FROM questions"); $ids = $query->fetchAll(PDO::FETCH_COLUMN); return $random_id = $ids[array_rand($ids)]; } function startGame($db, $chat_id, $callback_query_id, $message_id, $scenario_id) { // گرفتن اطلاعات سناریو $scenario = getScenarioInfo($scenario_id); if (!$scenario) return false; // گرفتن تعداد بازیکنان $query = $db->prepare("SELECT COUNT(*) AS tedad FROM players WHERE chat_id = ?"); $query->execute([$chat_id]); $players = $query->fetch(PDO::FETCH_ASSOC)['tedad']; // گرفتن وضعیت بازی $query = $db->prepare("SELECT status, id_tg FROM games WHERE chat_id = ?"); $query->execute([$chat_id]); $game_data = $query->fetch(PDO::FETCH_ASSOC); $status = $game_data['status']; $message_id_tg = $game_data['id_tg']; // بررسی وضعیت if ($status !== 'waiting') { bot('answerCallbackQuery', [ 'callback_query_id' => $callback_query_id, 'text' => 'بازی در حال اجراست!', 'show_alert' => false ]); return false; } // بررسی شرط‌ها با switch switch ($scenario_id) { case 1: // سناریو رولت روسی if ($players < $scenario['min_players']) { bot('answerCallbackQuery', [ 'callback_query_id' => $callback_query_id, 'text' => "حداقل بازیکن برای این سناریو: {$scenario['min_players']}", 'show_alert' => false ]); return false; } break; case 2: // سناریو باک‌شات رولت $allowed_counts = [2, 4, 6, 8]; if (!in_array($players, $allowed_counts)) { bot('answerCallbackQuery', [ 'callback_query_id' => $callback_query_id, 'text' => 'تعداد باید یکی از این‌ها باشد: 2، 4، 6، یا 8!', 'show_alert' => false ]); return false; } // راه‌اندازی خشاب shotgun_register($db, $chat_id); break; case 3: // سناریو ۳ if ($players < $scenario['min_players']) { bot('answerCallbackQuery', [ 'callback_query_id' => $callback_query_id, 'text' => "حداقل بازیکن برای این سناریو: {$scenario['min_players']}", 'show_alert' => false ]); return false; } // مثلا: role_assign($db, $chat_id); break; default: // سناریو نامعتبر bot('answerCallbackQuery', [ 'callback_query_id' => $callback_query_id, 'text' => 'سناریو نامعتبره!', 'show_alert' => true ]); return false; } // شروع رسمی بازی $query = $db->prepare("UPDATE games SET status = ?, created_at = ? WHERE chat_id = ?"); $query->execute(['active', date('Y-m-d H:i:s'), $chat_id]); // حذف پیام‌ها bot('deleteMessage', [ 'chat_id' => $chat_id, 'message_id' => $message_id_tg ]); bot('deleteMessage', [ 'chat_id' => $chat_id, 'message_id' => $message_id ]); // پاسخ callback bot('answerCallbackQuery', [ 'callback_query_id' => $callback_query_id, 'text' => 'اوکی بازی شروع شد', 'show_alert' => false ]); // ارسال گیف شروع bot('sendAnimation', [ 'chat_id' => $chat_id, 'animation' => $scenario['main_gif_url'], 'caption' => $scenario['caption'], 'parse_mode' => 'HTML' ]); return true; } function getScenarioInfo($scenario_id) { $scenarios = [ 1 => [ 'name' => 'رولت روسی 🔫', 'min_players' => 2, 'max_players' => 20, 'start_gif_local' => 'https://shadow.s14.viptelbot.top/bot/gifs/start.mp4', // گیف اولیه (آدرس محلی) 'start_gif_url' => 'https://shadow.s14.viptelbot.top/bot/gifs/start.mp4', // گیف اولیه (آدرس آنلاین) 'main_gif_local' => 'gifs/Gameinfo.mp4', // گیف شروع بازی (آدرس محلی) 'main_gif_url' => 'https://shadow.s14.viptelbot.top/bot/gifs/Gameinfo.mp4', // گیف شروع بازی (آدرس آنلاین) 'caption' => 'خب بازی شروع میشه' ], 2 => [ 'name' => 'باکشات رولت ⚔', 'min_players' => 2, 'max_players' => 4, 'start_gif_local' => 'https://shadow.s14.viptelbot.top/bot/gifs/', 'start_gif_url' => 'https://shadow.s14.viptelbot.top/bot/gifs/startbuck.mp4', 'main_gif_local' => 'https://shadow.s14.viptelbot.top/bot/gifs/Gameinfo.mp4', 'main_gif_url' => 'https://shadow.s14.viptelbot.top/bot/gifs/buckinfo.mp4', 'caption' => 'خب بازی شروع میشه' ], 3 => [ 'name' => 'سناریو ۳', 'min_players' => 6, 'start_gif_local' => 'gifs/start_scenario3.mp4', 'start_gif_url' => 'https://yourdomain.com/bot/gifs/start_scenario3.mp4', 'main_gif_local' => 'gifs/Scenario3.mp4', 'main_gif_url' => 'https://yourdomain.com/bot/gifs/Scenario3.mp4', 'caption' => 'خب بازی شروع میشه' ], ]; return $scenarios[$scenario_id] ?? null; } function currect_hads($db,$chat_id,$user_id){ $query = $db->prepare("SELECT count_shoot FROM games WHERE chat_id = ?"); $query->execute([$chat_id]); $count_shoot = (int)$query->fetchColumn(); if($count_shoot == 0){ $query = $db->prepare("SELECT user_id FROM players WHERE first_blod = ?"); $query->execute([$user_id]); $hoshers = $query->fetchAll(PDO::FETCH_ASSOC); // به هر کسی که درست حدس زده 20 امتیاز بده foreach ($hoshers as $hosher) { $update = $db->prepare("UPDATE players SET point = point + 20 WHERE user_id = ?"); $update->execute([$hosher['user_id']]); $uid = $hosher['user_id']; $name = GetName($db,$uid); bot('sendMessage', ['chat_id' => $chat_id,'text' => "[$name](tg://user?id=$uid) بخاطر حدس درست 20 امتیاز گرفت ",'parse_mode' => 'markdown']); } } } function rolet_russi($db, $chat_id, $message_id, $senario_id) { $query = $db->prepare("SELECT current_turn FROM games WHERE chat_id = ?"); $query->execute([$chat_id]); $current_user = $query->fetchColumn(); if (!$current_user) { // گرفتن بازیکن‌های زنده $query = $db->prepare("SELECT user_id FROM players WHERE chat_id = ? AND is_alive = 1"); $query->execute([$chat_id]); $players = $query->fetchAll(PDO::FETCH_COLUMN); // رندوم کردن ترتیب ترن‌ها shuffle($players); // آپدیت turn_order برای هر بازیکن زنده $turn = 1; foreach ($players as $user_id) { $update = $db->prepare("UPDATE players SET turn_order = ? WHERE chat_id = ? AND user_id = ?"); $update->execute([$turn++, $chat_id, $user_id]); } // گرفتن اولین بازیکن طبق ترتیب جدید $query = $db->prepare("SELECT user_id FROM players WHERE chat_id = ? AND is_alive = 1 ORDER BY turn_order ASC LIMIT 1"); $query->execute([$chat_id]); $next_player = $query->fetchColumn(); delay(3); playersin_rulet($db, $chat_id, $message_id); } else { // ادامه نوبت به بازیکن بعدی $query = $db->prepare("SELECT turn_order FROM players WHERE user_id = ? AND chat_id = ?"); $query->execute([$current_user, $chat_id]); $current_turn_order = $query->fetchColumn(); $query = $db->prepare("SELECT user_id FROM players WHERE chat_id = ? AND turn_order > ? AND is_alive = 1 ORDER BY turn_order ASC LIMIT 1"); $query->execute([$chat_id, $current_turn_order]); $next_player = $query->fetchColumn(); if (!$next_player) { // اگر بازیکن بعدی نبود، از اول لیست شروع کن $query = $db->prepare("SELECT user_id FROM players WHERE chat_id = ? AND is_alive = 1 ORDER BY turn_order ASC LIMIT 1"); $query->execute([$chat_id]); $next_player = $query->fetchColumn(); playersin_rulet($db, $chat_id, $message_id); $query = $db->prepare("UPDATE players SET is_used = ?, charkhesh = ?, is_chose = ?, nite = ? WHERE chat_id = ?"); $query->execute([0, 0, 0, 0, $chat_id]); } } if ($next_player) { $query = $db->prepare("UPDATE games SET current_turn = ? WHERE chat_id = ?"); $query->execute([$next_player, $chat_id]); // گرفتن نام بازیکن $query = $db->prepare(" SELECT p.first_name, u.emoji, u.emoji2 FROM players p LEFT JOIN users u ON p.user_id = u.user_id WHERE p.user_id = ? AND p.chat_id = ? "); $query->execute([$next_player, $chat_id]); $data = $query->fetch(PDO::FETCH_ASSOC); $emoji1 = !empty($data['emoji']) ? $data['emoji'] : ""; $emoji2 = !empty($data['emoji2']) ? $data['emoji2'] : ""; $emojis = trim("$emoji1 $emoji2"); $emojis = $emojis !== "" ? " $emojis" : ""; $next_name = htmlspecialchars($data['first_name'], ENT_QUOTES, 'UTF-8') . $emojis; delay(3); $response = bot('sendMessage', [ 'chat_id' => $chat_id, 'text' => "خب نوبت شماست $next_name انتخاب کن.", 'parse_mode' => 'HTML', 'reply_markup' => playerpanel($senario_id) ]); $message_id_turn = $response['result']['message_id']; $query = $db->prepare("UPDATE games SET id_turn = ? WHERE chat_id = ?"); $query->execute([$message_id_turn, $chat_id]); time_turn($db, $chat_id); } } function playersin_rulet($db, $chat_id, $message_id) { delay(5); // دریافت بازیکنان زنده با ایموجی‌ها $query = $db->prepare(" SELECT p.first_name, p.user_id, u.emoji, u.emoji2 FROM players p LEFT JOIN users u ON p.user_id = u.user_id WHERE p.chat_id = ? AND p.is_alive = 1 ORDER BY p.turn_order ASC "); $query->execute([$chat_id]); $players = $query->fetchAll(PDO::FETCH_ASSOC); // ساخت متن لیست بازیکنان زنده $playerList = ""; foreach ($players as $index => $player) { $emoji1 = !empty($player['emoji']) ? $player['emoji'] : ""; $emoji2 = !empty($player['emoji2']) ? $player['emoji2'] : ""; $emojis = trim("$emoji1 $emoji2"); $emojis = $emojis !== "" ? " $emojis" : ""; $playerList .= ($index + 1) . ". 👤 {$player['first_name']}$emojis\n"; } // آپدیت شماره دور $query = $db->prepare("SELECT dor FROM games WHERE chat_id = ?"); $query->execute([$chat_id]); $number = (int)$query->fetchColumn(); $number++; $query = $db->prepare("UPDATE games SET dor = ? WHERE chat_id = ?"); $query->execute([$number, $chat_id]); $dor = getPersianOrdinal($number); $newText = "رسیدیم به دور : $dor \n" . "📜 لیست بازیکنان زنده (تعداد: " . count($players) . " نفر):\n" . $playerList; bot('sendMessage', [ 'chat_id' => $chat_id, 'text' => $newText, 'parse_mode' => 'HTML', 'message_id' => $message_id, ]); } function playersin_buck($db, $chat_id, $message_id = 0) { delay(5); // دریافت بازیکنان زنده با ایموجی‌ها $query = $db->prepare(" SELECT p.first_name, p.user_id, u.emoji, u.emoji2 FROM players p LEFT JOIN users u ON p.user_id = u.user_id WHERE p.chat_id = ? AND p.is_alive = 1 ORDER BY p.turn_order ASC "); $query->execute([$chat_id]); $players = $query->fetchAll(PDO::FETCH_ASSOC); // ساخت متن لیست بازیکنان زنده $playerList = ""; foreach ($players as $index => $player) { $emoji1 = !empty($player['emoji']) ? " " . htmlspecialchars($player['emoji']) : ""; $emoji2 = !empty($player['emoji2']) ? " " . htmlspecialchars($player['emoji2']) : ""; $name = htmlspecialchars($player['first_name']); $playerList .= ($index + 1) . ". 👤 $name$emoji1$emoji2\n"; } shotgun_register($db, $chat_id); $data = get_kheshab($db, $chat_id); $current_index = $data['current_index']; $count_bullet = $data['count_bullet']; $json_chamber = $data['chamber']; $chamber = json_decode($json_chamber, true); $counts = array_count_values($chamber); $real_count = $counts['real'] ?? 0; $blank_count = $counts['blank'] ?? 0; $db->prepare("UPDATE games SET dor = dor + 1 WHERE chat_id = ?")->execute([$chat_id]); $db->prepare("UPDATE players SET is_used = 0, is_chose = 0, is_stealing = 0 , fake_bullet = 0 WHERE chat_id = ?")->execute([$chat_id]); Get_dadan_ability($db, $chat_id); $query = $db->prepare("SELECT dor , rand FROM games WHERE chat_id = ?"); $query->execute([$chat_id]); $data = $query->fetch(); $dor_num = $data['dor']; $rand_num = $data['rand']; $dor = getPersianOrdinal($dor_num); delay(2); $rand = getPersianOrdinal($rand_num); $newText = " 💫 رسیدیم به دور $dor ☄️ راند $rand ⏰ وقت تعیین گلوله‌های شاتگان وسط میز رسیده! 🔫 $count_bullet تیر خشاب آماده‌ست... 💥 $real_count تیر جنگی 💣 $blank_count تیر مشقی 📜لیست بازیکنانی که در حال حاضر زنده‌اند:\n$playerList"; $response = bot('sendAnimation', [ 'chat_id' => $chat_id, 'animation' => base_url . "shotgun.mp4", 'caption' => $newText, 'parse_mode' => 'HTML', ]); $message_id = $response['result']['message_id'] ?? null; $pinResponse = bot('pinChatMessage', [ 'chat_id' => $chat_id, 'message_id' => $message_id, 'disable_notification' => true, ]); } function buck_shot($db,$chat_id,$message_id,$senario_id){ delay(5); $query = $db->prepare("SELECT current_turn FROM games WHERE chat_id = ?"); $query->execute([$chat_id]); $current_user = $query->fetchColumn(); if (!$current_user) { // گرفتن بازیکن‌های زنده $query = $db->prepare("SELECT user_id FROM players WHERE chat_id = ? AND is_alive = 1"); $query->execute([$chat_id]); $players = $query->fetchAll(PDO::FETCH_COLUMN); // رندوم کردن ترتیب بازیکن‌ها shuffle($players); // مقداردهی turn_order به ترتیب رندوم $turn = 1; foreach ($players as $user_id) { $update = $db->prepare("UPDATE players SET turn_order = ? WHERE chat_id = ? AND user_id = ?"); $update->execute([$turn++, $chat_id, $user_id]); } // حالا گرفتن اولین بازیکن طبق turn_order جدید $query = $db->prepare("SELECT user_id FROM players WHERE chat_id = ? AND is_alive = 1 ORDER BY turn_order ASC LIMIT 1"); $query->execute([$chat_id]); $next_player = $query->fetchColumn(); delay(3); Get_rand($db,$chat_id); playersin_buck($db, $chat_id, $message_id); } else { $db->prepare("UPDATE games SET shoot_procc_another = 0 WHERE chat_id = ?")->execute([$chat_id]); $query = $db->prepare("SELECT turn_order FROM players WHERE user_id = ? AND chat_id = ?"); $query->execute([$current_user, $chat_id]); $current_turn_order = $query->fetchColumn(); $query = $db->prepare("SELECT user_id FROM players WHERE chat_id = ? AND turn_order > ? AND is_alive = 1 ORDER BY turn_order ASC LIMIT 1"); $query->execute([$chat_id, $current_turn_order]); $next_player = $query->fetchColumn(); if (!$next_player) { // اگر بازیکن بعدی نبود، از اول لیست شروع کن $query = $db->prepare("SELECT user_id FROM players WHERE chat_id = ? AND is_alive = 1 ORDER BY turn_order ASC LIMIT 1"); $query->execute([$chat_id]); $next_player = $query->fetchColumn(); $db->prepare("UPDATE players SET is_used = 0, is_chose = 0, is_stealing = 0 , fake_bullet = 0 WHERE chat_id = ?")->execute([$chat_id]); } } if ($next_player) { $query = $db->prepare("UPDATE games SET current_turn = ? WHERE chat_id = ?"); $query->execute([$next_player, $chat_id]); $query = $db->prepare(" SELECT p.first_name, u.emoji, u.emoji2 FROM players p LEFT JOIN users u ON p.user_id = u.user_id WHERE p.user_id = ? AND p.chat_id = ? "); $query->execute([$next_player, $chat_id]); $data = $query->fetch(PDO::FETCH_ASSOC); $emoji = (!empty($data['emoji']) ? " " . $data['emoji'] : "") . (!empty($data['emoji2']) ? " " . $data['emoji2'] : ""); $next_name = $data['first_name'] . $emoji; $Get_ability = Get_ability($db, $next_player); if ($Get_ability && is_array($Get_ability)) { $items = []; $query = $db->prepare("SELECT rand FROM games WHERE chat_id = ?"); $query->execute([$chat_id]); $rand = (int) $query->fetchColumn(); $jon = $Get_ability['jon']; if ($rand === 3) { if ($jon <= 2) { $items[] = "قابل نمایش نیست 😈"; $db->prepare("UPDATE players SET is_dead = 1 WHERE user_id = ?")->execute([$next_player]); } else { $items[] = "❤️ شمار جان = {$jon} عدد"; } } elseif ($jon > 0) { $items[] = "❤️ شمار جان = {$jon} عدد"; } $abilities = array_filter([ $Get_ability['chagho'] > 0 ? "🔪 چاقو ×" . $Get_ability['chagho'] : null, $Get_ability['dastband'] > 0 ? "⛓️ دستبند ×" . $Get_ability['dastband'] : null, $Get_ability['sigar'] > 0 ? "🚬 سیگار ×" . $Get_ability['sigar'] : null, $Get_ability['noshabe'] > 0 ? "🥤 نوشابه ×" . $Get_ability['noshabe'] : null, $Get_ability['ghorse'] > 0 ? "💊 قرص ×" . $Get_ability['ghorse'] : null, $Get_ability['makos'] > 0 ? "🔄 معکوس کننده ×" . $Get_ability['makos'] : null, $Get_ability['shoker'] > 0 ? "⚡️ شوکر ×" . $Get_ability['shoker'] : null, $Get_ability['zarebin'] > 0 ? "🔍 ذره بین ×" . $Get_ability['zarebin'] : null, $Get_ability['phone'] > 0 ? "☎️ تلفن ×" . $Get_ability['phone'] : null ]); if (!empty($abilities)) { $items[] = "🔰 توانایی های شما :\n" . implode("\n", $abilities); } if ($Get_ability['tedad_tavanai'] > 0) { $items[] = "♾ شمار توانایی ها = " . $Get_ability['tedad_tavanai'] . " عدد"; } $text = "خب نوبت شماست [$next_name](tg://user?id=$next_player) انتخاب کن\n\n" . implode("\n\n", $items); } $query = $db->prepare("SELECT is_dastband FROM players WHERE user_id = ?"); $query->execute([$next_player]); $is_dastband = (int)$query->fetchColumn(); delay(3); if($is_dastband == 1){ $db->prepare("UPDATE players SET is_dastband = 0 WHERE user_id = ?")->execute([$next_player]); bot('sendMessage', [ 'chat_id' => $chat_id, 'text' => "⛓ بازیکن [$next_name](tg://user?id=$next_player) دستبند خورده ، نوبتش رد میشه", 'parse_mode' => 'Markdown', ]); nextTurn($db, $chat_id, $message_id); return; } $response = bot('sendMessage', [ 'chat_id' => $chat_id, 'text' => $text, 'parse_mode' => 'markdown', 'reply_markup' => playerpanel($senario_id) ]); $message_id_turn = $response['result']['message_id']; $query = $db->prepare("UPDATE games SET id_turn = ? WHERE chat_id = ?"); $query->execute([$message_id_turn, $chat_id]); time_turn_buck($db, $chat_id); } } function shotgun_register($db, $chat_id) { $query = $db->prepare("SELECT COUNT(*) FROM players WHERE chat_id = ?"); $query->execute([$chat_id]); $tedad = $query->fetchColumn(); switch($tedad){ case 2: case 4: $min_bullet = 4; $max_bullet = 10; break; case 6: $min_bullet = 6; $max_bullet = 12; break; case 8: $min_bullet = 8; $max_bullet = 14; break; default: // مقدار پیش‌فرض برای جلوگیری از خطا $min_bullet = 4; $max_bullet = 8; break; } $count_bullet = rand($min_bullet, $max_bullet); $real_bullets = max(1, round($count_bullet * (rand(20, 70) / 100))); $blank_bullets = $count_bullet - $real_bullets; $chamber = array_merge( array_fill(0, $real_bullets, 'real'), array_fill(0, $blank_bullets, 'blank') ); $chamber = fair_shuffle($chamber); $stmt = $db->prepare("REPLACE INTO shotgun_chambers (chat_id, chamber, count_bullet) VALUES (?, ?, ?)"); $stmt->execute([$chat_id, json_encode($chamber), $count_bullet]); } function fair_shuffle(array $array): array { $n = count($array); for ($i = $n - 1; $i > 0; $i--) { $j = random_int(0, $i); // استفاده از random_int برای امنیت و کیفیت بهتر [$array[$i], $array[$j]] = [$array[$j], $array[$i]]; } return $array; } function get_kheshab($db,$chat_id){ $query = $db->prepare("SELECT chamber , current_index , count_bullet FROM shotgun_chambers WHERE chat_id = ?"); $query->execute([$chat_id]); return $data = $query->fetch(); } function Get_ability($db, $user_id) { $query = $db->prepare("SELECT jon, tedad_tavanai, chagho, dastband, sigar, noshabe, ghorse, makos, shoker, zarebin, phone FROM players WHERE user_id = ?"); $query->execute([$user_id]); return $query->fetch(); } function Get_dadan_ability($db, $chat_id) { // گرفتن بازیکنان زنده $query = $db->prepare("SELECT user_id, tedad_tavanai FROM players WHERE chat_id = ? AND is_alive = 1"); $query->execute([$chat_id]); $players = $query->fetchAll(); // گرفتن تعداد بازیکنان زنده $count_query = $db->prepare("SELECT COUNT(*) FROM players WHERE chat_id = ?"); $count_query->execute([$chat_id]); $alive_count = (int)$count_query->fetchColumn(); // گرفتن شماره راند از جدول games $rand_query = $db->prepare("SELECT rand FROM games WHERE chat_id = ?"); $rand_query->execute([$chat_id]); $rand = (int)$rand_query->fetchColumn(); // تعیین تعداد ابیلیتی قابل دادن if ($alive_count == 2) { if($rand == 1){ $count_abil = 2; }elseif ($rand == 2) { $count_abil = 4; } elseif ($rand >= 3) { $count_abil = 6; } else { $count_abil = 0; } } elseif ($alive_count >= 4) { $count_abil = 6; } else { $count_abil = 0; } // لیست ابیلیتی‌ها $abilities = ['chagho', 'dastband', 'sigar', 'noshabe', 'ghorse', 'makos', 'shoker', 'zarebin', 'phone']; foreach ($players as $user) { $user_id = $user['user_id']; $current_tavanai = (int)$user['tedad_tavanai']; // حداکثر تعداد مجاز برای این بازیکن $max_can_give = 8 - $current_tavanai; $to_give = min($count_abil, $max_can_give); if ($to_give <= 0) continue; $selected_abilities = []; $shuffled_abilities = fisherYatesShuffle($abilities); $to_give = min($to_give, count($shuffled_abilities)); // جلوگیری از ارور ایندکس for ($i = 0; $i < $to_give; $i++) { $rand_abil = $shuffled_abilities[$i]; if (isset($selected_abilities[$rand_abil])) { $selected_abilities[$rand_abil]++; } else { $selected_abilities[$rand_abil] = 1; } } // ساخت کوئری آپدیت داینامیک $update_fields = []; $update_values = []; foreach ($selected_abilities as $ability => $amount) { $update_fields[] = "$ability = $ability + ?"; $update_values[] = $amount; } // افزایش تعداد توانایی کل $update_fields[] = "tedad_tavanai = tedad_tavanai + ?"; $update_values[] = $to_give; $update_values[] = $chat_id; $update_values[] = $user_id; $sql = "UPDATE players SET " . implode(', ', $update_fields) . " WHERE chat_id = ? AND user_id = ?"; $stmt = $db->prepare($sql); $stmt->execute($update_values); } } function fisherYatesShuffle(array $array): array { $n = count($array); for ($i = $n - 1; $i > 0; $i--) { $j = random_int(0, $i); [$array[$i], $array[$j]] = [$array[$j], $array[$i]]; } return $array; } function shot_buck($db, $user_id, $chat_id, $choice, $callback_query_id, $message_id) { delay(1); $data = get_kheshab($db, $chat_id); $chamber = json_decode($data['chamber'], true); $current_index = $data['current_index']; $name = GetName($db, $user_id); if (empty($chamber)) return; if ($choice === "me") { $is_real = $chamber[$current_index] === 'real'; $stmt = $db->prepare("SELECT use_chagho FROM players WHERE user_id = ?"); $stmt->execute([$user_id]); $use_chagho = (int)$stmt->fetchColumn(); $query = $db->prepare("SELECT shoot_procc FROM games WHERE chat_id = ?"); $query->execute([$chat_id]); $shoot_procc = (int)$query->fetchColumn(); if ($is_real) { if ($shoot_procc === 0) { $db->prepare("UPDATE games SET shoot_procc = 1 WHERE chat_id = ?")->execute([$chat_id]); fire_bullet($db, $chat_id, 2); $stmt = $db->prepare("SELECT jon FROM players WHERE user_id = ?"); $stmt->execute([$user_id]); $jon = (int)$stmt->fetchColumn(); $damage = ($use_chagho === 1) ? 2 : 1; $new_jon = max(0, $jon - $damage); $db->prepare("UPDATE players SET jon = ? WHERE user_id = ?")->execute([$new_jon, $user_id]); if ($use_chagho === 1) { $db->prepare("UPDATE players SET use_chagho = 0 WHERE user_id = ?")->execute([$user_id]); } edit_turn($db, $chat_id); if ($new_jon <= 0) { $db->prepare("UPDATE players SET is_alive = 0 WHERE user_id = ?")->execute([$user_id]); $caption = ($damage === 2) ? "🔫 $name به خودش شلیک کرد! خشاب پر بود. چون از چاقو🔪 استفاده کرد، دو جان کم شد، جان آخر🪫 بود و از بازی خارج شد☠" : "🔫 $name به خودش شلیک کرد! خشاب پر بود. جان آخر🪫 بود و از بازی خارج شد☠"; delay(2); bot('sendAnimation', [ 'chat_id' => $chat_id, 'animation' => base_url . "mereal.mp4", 'caption' => $caption, 'parse_mode' => 'HTML', ]); if (Get_rand($db, $chat_id)) return; if (check_blank($db, $chat_id) === true) return; $db->prepare("UPDATE games SET shoot_procc = 0 WHERE chat_id = ?")->execute([$chat_id]); nextTurn($db, $chat_id, $message_id); return; } else { $caption = ($damage === 2) ? "🔫 $name به خودش شلیک کرد! خشاب پر بود. چون از چاقو🔪 استفاده کرد، دو جان کم شد🙂" : "🔫 $name به خودش شلیک کرد! خشاب پر بود. یک جان کم شد🙂"; delay(2); bot('sendAnimation', [ 'chat_id' => $chat_id, 'animation' => base_url . "mereal.mp4", 'caption' => $caption, 'parse_mode' => 'HTML', ]); if (check_blank($db, $chat_id) === true) return; $db->prepare("UPDATE games SET shoot_procc = 0 WHERE chat_id = ?")->execute([$chat_id]); nextTurn($db, $chat_id, $message_id); } } } else { if ($shoot_procc === 0) { fire_bullet($db, $chat_id, 1); if ($use_chagho === 1) { $db->prepare("UPDATE players SET use_chagho = 0 WHERE user_id = ?")->execute([$user_id]); } $db->prepare("UPDATE games SET shoot_procc = 1 WHERE chat_id = ?")->execute([$chat_id]); $caption = "🔫 $name به خودش شلیک کرد! خشاب خالی بود😉می‌تونی دوباره شلیک کنی✅"; delay(2); bot('sendAnimation', [ 'chat_id' => $chat_id, 'animation' => base_url . "meblank.mp4", 'caption' => $caption, 'parse_mode' => 'HTML', ]); if (check_blank($db, $chat_id) === true) return; $db->prepare("UPDATE games SET shoot_procc = 0 WHERE chat_id = ?")->execute([$chat_id]); } } } elseif ($choice === "another") { $stmt = $db->prepare("SELECT shoot_procc_another FROM games WHERE chat_id = ?"); $stmt->execute([$chat_id]); $shoot_procc_another = $stmt->fetchColumn(); if($shoot_procc_another == 1) return; $db->prepare("UPDATE games SET shoot_procc_another = 1 WHERE chat_id = ?")->execute([$chat_id]); bot('sendMessage', [ 'chat_id' => $chat_id, 'text' => "به کی میخوای شلیک کنی؟ 👁‍🗨", 'parse_mode' => 'HTML', 'reply_markup' => player_chose($db, $chat_id, 'shut_another_', $user_id), ]); } } function Get_rand($db, $chat_id) { // تعداد زنده‌ها $query = $db->prepare("SELECT COUNT(*) FROM players WHERE is_alive = ? AND chat_id = ?"); $query->execute([1, $chat_id]); $is_alive = (int)$query->fetchColumn(); // شماره راند فعلی $query = $db->prepare("SELECT rand FROM games WHERE chat_id = ?"); $query->execute([$chat_id]); $rand = (int)$query->fetchColumn(); // اگر راند ۰ بود → فقط اجرا بشه بدون exit if ($rand == 0) { run_rand($db, $chat_id); return true; } // اگر فقط یک نفر زنده مونده بود → اجرا و exit if ($is_alive == 1) { run_rand($db, $chat_id); exit; } return false; } function run_rand($db,$chat_id){ $db->prepare("UPDATE games SET rand = rand + 1 WHERE chat_id = ?")->execute([$chat_id]); $query = $db->prepare("SELECT rand FROM games WHERE chat_id = ?"); $query->execute([$chat_id]); $rand = (int)$query->fetchColumn(); $db->prepare("UPDATE games SET shoot_procc = 0 WHERE chat_id = ?")->execute([$chat_id]); if($rand == 1){ $count_jon = 3; $db->prepare("UPDATE players SET jon = ? WHERE chat_id = ?")->execute([$count_jon,$chat_id]); }elseif($rand == 2){ $count_jon = 4; delay(2); bot('sendAnimation', [ 'chat_id' => $chat_id, 'animation' => base_url . "rand.mp4", 'caption' =>"میریم به راند دوم بازی", 'parse_mode' => 'HTML', ]); bot('sendVoice', [ 'chat_id' => $chat_id, 'voice' => base_url . 'NextRound.mp3', 'caption' => "", ]); delay(7); $db->prepare("UPDATE players SET jon = ? WHERE chat_id = ?")->execute([$count_jon,$chat_id]); recovery($db,$chat_id); go_start($db,$chat_id); }elseif($rand == 3){ $count_jon = 6; delay(2); bot('sendAnimation', [ 'chat_id' => $chat_id, 'animation' => base_url . "rand.mp4", 'caption' =>"میریم به راند سوم بازی", 'parse_mode' => 'HTML', ]); bot('sendVoice', [ 'chat_id' => $chat_id, 'voice' => base_url . 'NextRound.mp3', 'caption' => "", ]); delay(7); $db->prepare("UPDATE players SET jon = ? WHERE chat_id = ?")->execute([$count_jon,$chat_id]); recovery($db,$chat_id); go_start($db,$chat_id); }else{ endGame($db,$chat_id,2); } } function go_start($db,$chat_id){ delay(5); $db->prepare("UPDATE games SET shoot_procc_another = 0 WHERE chat_id = ?")->execute([$chat_id]); $query = $db->prepare("SELECT current_turn , fire FROM games WHERE chat_id = ?"); $query->execute([$chat_id]); $data = $query->fetch(); $fire = $data['fire']; $current_turn = $data['current_turn']; // گرفتن turn_order بازیکن فعلی $query = $db->prepare("SELECT turn_order FROM players WHERE user_id = ? AND chat_id = ?"); $query->execute([$current_turn, $chat_id]); $current_turn_order = $query->fetchColumn(); if ($fire == 1) { // گرفتن نفر بعدی از نظر نوبت $query = $db->prepare("SELECT user_id FROM players WHERE chat_id = ? AND is_alive = 1 AND turn_order > ? ORDER BY turn_order ASC LIMIT 1"); $query->execute([$chat_id, $current_turn_order]); $next_player = $query->fetchColumn(); } else { // در صورت فایر نبودن، نوبت تکرار میشه $next_player = $current_turn; } // اگه نفر بعدی پیدا نشد (آخر لیست بود) if (!$next_player) { $query = $db->prepare("SELECT user_id FROM players WHERE chat_id = ? AND is_alive = 1 ORDER BY turn_order ASC LIMIT 1"); $query->execute([$chat_id]); $next_player = $query->fetchColumn(); // ریست حالت‌ها $db->prepare("UPDATE players SET is_used = 0, is_chose = 0, is_stealing = 0 , fake_bullet = 0 WHERE chat_id = ?")->execute([$chat_id]); } playersin_buck($db, $chat_id); if ($next_player) { $query = $db->prepare("UPDATE games SET current_turn = ? WHERE chat_id = ?"); $query->execute([$next_player, $chat_id]); $query = $db->prepare(" SELECT p.first_name, u.emoji, u.emoji2 FROM players p LEFT JOIN users u ON p.user_id = u.user_id WHERE p.user_id = ? AND p.chat_id = ? "); $query->execute([$next_player, $chat_id]); $data = $query->fetch(PDO::FETCH_ASSOC); $emoji = (!empty($data['emoji']) ? " " . $data['emoji'] : "") . (!empty($data['emoji2']) ? " " . $data['emoji2'] : ""); $next_name = $data['first_name'] . $emoji; $Get_ability = Get_ability($db, $next_player); if ($Get_ability && is_array($Get_ability)) { $items = []; $query = $db->prepare("SELECT rand FROM games WHERE chat_id = ?"); $query->execute([$chat_id]); $rand = (int) $query->fetchColumn(); $jon = $Get_ability['jon']; if ($rand === 3) { if ($jon <= 2) { $items[] = "قابل نمایش نیست 😈"; $db->prepare("UPDATE players SET is_dead = 1 WHERE user_id = ?")->execute([$next_player]); } else { $items[] = "❤️ شمار جان = {$jon} عدد"; } } elseif ($jon > 0) { $items[] = "❤️ شمار جان = {$jon} عدد"; } $abilities = array_filter([ $Get_ability['chagho'] > 0 ? "🔪 چاقو ×" . $Get_ability['chagho'] : null, $Get_ability['dastband'] > 0 ? "⛓️ دستبند ×" . $Get_ability['dastband'] : null, $Get_ability['sigar'] > 0 ? "🚬 سیگار ×" . $Get_ability['sigar'] : null, $Get_ability['noshabe'] > 0 ? "🥤 نوشابه ×" . $Get_ability['noshabe'] : null, $Get_ability['ghorse'] > 0 ? "💊 قرص ×" . $Get_ability['ghorse'] : null, $Get_ability['makos'] > 0 ? "🔄 معکوس کننده ×" . $Get_ability['makos'] : null, $Get_ability['shoker'] > 0 ? "⚡️ شوکر ×" . $Get_ability['shoker'] : null, $Get_ability['zarebin'] > 0 ? "🔍 ذره بین ×" . $Get_ability['zarebin'] : null, $Get_ability['phone'] > 0 ? "☎️ تلفن ×" . $Get_ability['phone'] : null ]); if (!empty($abilities)) { $items[] = "🔰 توانایی های شما :\n" . implode("\n", $abilities); } if ($Get_ability['tedad_tavanai'] > 0) { $items[] = "♾ شمار توانایی ها = " . $Get_ability['tedad_tavanai'] . " عدد"; } $text = "خب نوبت شماست [$next_name](tg://user?id=$next_player) انتخاب کن\n\n" . implode("\n\n", $items); } $query = $db->prepare("SELECT is_dastband FROM players WHERE user_id = ?"); $query->execute([$next_player]); $is_dastband = (int)$query->fetchColumn(); if($is_dastband == 1){ $db->prepare("UPDATE players SET is_dastband = 0 WHERE user_id = ?")->execute([$next_player]); bot('sendMessage', [ 'chat_id' => $chat_id, 'text' => "⛓ بازیکن [$next_name](tg://user?id=$next_player) دستبند خورده ، نوبتش رد میشه", 'parse_mode' => 'Markdown', ]); nextTurn($db, $chat_id, $message_id); return; } $response = bot('sendMessage', [ 'chat_id' => $chat_id, 'text' => $text, 'parse_mode' => 'markdown', 'reply_markup' => playerpanel(2) ]); $message_id_turn = $response['result']['message_id']; $query = $db->prepare("UPDATE games SET id_turn = ? WHERE chat_id = ?"); $query->execute([$message_id_turn, $chat_id]); time_turn_buck($db, $chat_id); } } function fire_bullet($db, $chat_id,$status) { $data = get_kheshab($db, $chat_id); $chamber = json_decode($data['chamber'], true); if (empty($chamber)) return; // خشاب خالیه $fired_bullet = array_shift($chamber); if($status == 2){ $db->prepare("UPDATE games SET fire = 1 WHERE chat_id = ?")->execute([$chat_id]); }else{ $db->prepare("UPDATE games SET fire = 0 WHERE chat_id = ?")->execute([$chat_id]); } // کاهش گلوله و ذخیره خشاب جدید $stmt = $db->prepare("UPDATE shotgun_chambers SET chamber = ?, current_index = 0 , count_bullet = count_bullet - 1 WHERE chat_id = ?"); $stmt->execute([json_encode($chamber), $chat_id]); return $fired_bullet; } function check_blank($db,$chat_id){ $newData = get_kheshab($db, $chat_id); if ($newData['count_bullet'] == 0) { edit_turn($db,$chat_id); bot('sendMessage', [ 'chat_id' => $chat_id, 'text' => "تیر های خشاب تمام شد ! میریم برای تعیین گلوله ها", 'parse_mode' => 'HTML' ]); go_start($db, $chat_id); $db->prepare("UPDATE games SET shoot_procc = 0 WHERE chat_id = ?")->execute([$chat_id]); return true; }else{ return false; } } function recovery($db,$chat_id){ $db->prepare("UPDATE players SET point = point + 50 , win_rands = win_rands + 1 WHERE chat_id = ? AND is_alive = 1")->execute([$chat_id]); $db->prepare(" UPDATE players SET is_alive = 1, tedad_tavanai = 0, chagho = 0, dastband = 0, sigar = 0, noshabe = 0, ghorse = 0, makos = 0, shoker = 0, zarebin = 0, phone = 0, fake_bullet = 0, use_chagho = 0, is_dastband = 0 WHERE chat_id = ? AND is_dead_real != 1 ")->execute([$chat_id]); } function end_rullet($db, $chat_id) { $query = $db->prepare("SELECT first_name, user_id, point FROM players WHERE chat_id = ? AND is_alive = 1 LIMIT 1"); $query->execute([$chat_id]); $winner = $query->fetch(PDO::FETCH_ASSOC); $second_winner = null; if ($winner) { $winner_id = $winner['user_id']; $query = $db->prepare(" SELECT user_id, first_name, point FROM players WHERE chat_id = ? AND chose_winner = ? ORDER BY chose_winner_time ASC LIMIT 1 "); $query->execute([$chat_id, $winner_id]); $first_correct = $query->fetch(PDO::FETCH_ASSOC); if ($first_correct) { if ($first_correct['user_id'] == $winner_id) { $newPoint = $winner['point'] + 45; $query = $db->prepare("UPDATE players SET point = ? WHERE user_id = ?"); $query->execute([$newPoint, $winner_id]); } else { $newPoint = $winner['point'] + 20; $query = $db->prepare("UPDATE players SET point = ? WHERE user_id = ?"); $query->execute([$newPoint, $winner_id]); $newSecondPoint = $first_correct['point'] + 20; $query = $db->prepare("UPDATE players SET point = ? WHERE user_id = ?"); $query->execute([$newSecondPoint, $first_correct['user_id']]); $second_winner = $first_correct; $query = $db->prepare(" SELECT user_id, point FROM players WHERE chat_id = ? AND chose_winner = ? AND user_id NOT IN (?, ?) "); $query->execute([$chat_id, $winner_id, $winner_id, $first_correct['user_id']]); $others = $query->fetchAll(PDO::FETCH_ASSOC); foreach ($others as $other) { $updated_point = $other['point'] + 5; $query = $db->prepare("UPDATE players SET point = ? WHERE user_id = ?"); $query->execute([$updated_point, $other['user_id']]); } } } else { $newPoint = $winner['point'] + 20; $query = $db->prepare("UPDATE players SET point = ? WHERE user_id = ?"); $query->execute([$newPoint, $winner_id]); } } $query = $db->prepare(" SELECT p.first_name, p.user_id, p.point, u.emoji FROM players p LEFT JOIN users u ON p.user_id = u.user_id WHERE p.chat_id = ? ORDER BY p.point DESC "); $query->execute([$chat_id]); $players = $query->fetchAll(PDO::FETCH_ASSOC); $medals = ["🥇", "🥈", "🥉"]; $playerList = ""; foreach ($players as $index => $player) { $medal = $medals[$index] ?? "👤"; $emoji1 = !empty($player['emoji']) ? $player['emoji'] : ""; $emoji2 = !empty($player['emoji2']) ? $player['emoji2'] : ""; $emoji = ($emoji1 || $emoji2) ? " " . trim($emoji1 . ' ' . $emoji2) : ""; $playerList .= ($index + 1) . ". {$medal} {$player['first_name']}{$emoji} ⭐ ({$player['point']})\n"; } if ($winner && $second_winner) { $winnerText = "بازی تموم شد و {$winner['first_name']} و {$second_winner['first_name']} برنده شدند 🏅🏅\n\n"; } elseif ($winner) { $winnerText = "بازی تموم شد و {$winner['first_name']} برنده شد 🏅\n\n"; } else { $winnerText = "بازی تموم شد و هیچ بازیکنی زنده نماند!"; } $info = info_game($db,$chat_id); $game_count = $info['game_count']; $dor = $info['dor']; $gap_name = $info['group_name']; $game_time = $info['game_time']; $group_name = $info['group_name']; $gozaresh = $info['gozaresh']; $model = $info['model']; $date = $info['persian_date']; $count_players = $info['count']; $senario = "🔰 سناریو : رولت روسی 🔫"; $newText = $winnerText . "پایان بازی 🔹 \n\n" . $playerList . "\n" . "━━━━━━━━━━━━━━━━━━━━━━" . "\n" . $gap_name . "\n" . $senario . "\n" . $count_players . "\n" . $model . "\n" . $dor . "\n" . $game_count . "\n" . $game_time . "\n" . $date . "\n" . $gozaresh; delay(2); $response = bot('sendAnimation', [ 'chat_id' => $chat_id, 'parse_mode' => 'HTML', 'animation' => base_url . "EndGame.mp4", 'caption' => $newText, ]); bot('sendVoice', [ 'chat_id' => $chat_id, 'voice' => base_url . 'RussianRoulette.mp3', 'caption' => "", ]); $gozaresh_game = $newText . "چت ایدی : $chat_id"; bot('sendMessage', [ 'chat_id' => -1002674909716, 'text' => $gozaresh_game, 'parse_mode' => 'HTML', ]); $message_id = $response['result']['message_id'] ?? null; bot('pinChatMessage', [ 'chat_id' => $chat_id, 'message_id' => $message_id, 'disable_notification' => true, ]); $winners_ids = [$winner['user_id']]; if ($second_winner) { $winners_ids[] = $second_winner['user_id']; } foreach ($players as $player) { $user_id = $player['user_id']; $point = $player['point']; give_point($db,$user_id); $query = $db->prepare("SELECT point, wins, losses FROM leaderboard WHERE user_id = ?"); $query->execute([$user_id]); $existingPlayer = $query->fetch(PDO::FETCH_ASSOC); $isWinner = in_array($user_id, $winners_ids); if ($existingPlayer) { $newPoint = $point + $existingPlayer['point']; $newWins = $existingPlayer['wins'] + ($isWinner ? 1 : 0); $newLosses = $existingPlayer['losses'] + (!$isWinner ? 1 : 0); $query = $db->prepare("UPDATE leaderboard SET point = ?, wins = ?, losses = ?, last_game = CURRENT_TIMESTAMP , count_game_day = count_game_day + ? WHERE user_id = ?"); $query->execute([$newPoint, $newWins, $newLosses, 1, $user_id]); $totalGames = $newWins + $newLosses; if ($totalGames == 2) { $query = $db->prepare("SELECT ref_id FROM users WHERE user_id = ?"); $query->execute([$user_id]); $ref_id = $query->fetchColumn(); if ($ref_id) { $query = $db->prepare("UPDATE users SET coin = coin + 50 WHERE user_id = ?"); $query->execute([$ref_id]); $query = $db->prepare("UPDATE leaderboard SET point = point + 75 WHERE user_id = ?"); $query->execute([$ref_id]); bot('sendMessage', [ 'chat_id' => $ref_id, 'text' => "🎁 شما 50 سکه و 75 امتیاز دریافت کردید چون کاربری که دعوت کردید دومین بازی خودش را انجام داد." ]); } } } else { $wins = $isWinner ? 1 : 0; $losses = !$isWinner ? 1 : 0; $query = $db->prepare("INSERT INTO leaderboard (user_id, point, wins, losses, count_game_day) VALUES (?, ?, ?, ?, ?)"); $query->execute([$user_id, $point, $wins, $losses, 1]); } } } function end_buck($db, $chat_id) { $db->prepare("UPDATE players SET win_rands = win_rands + 1 WHERE chat_id = ? AND is_alive = 1")->execute([$chat_id]); $query = $db->prepare(" SELECT first_name, user_id, point FROM players WHERE chat_id = ? AND win_rands = ( SELECT MAX(win_rands) FROM players WHERE chat_id = ? ) AND ( (SELECT COUNT(*) FROM players WHERE chat_id = ? AND win_rands = ( SELECT MAX(win_rands) FROM players WHERE chat_id = ? ) ) > 1 OR is_dead_real = 0 ) AND is_dead_real = 0 ORDER BY is_alive DESC LIMIT 1; "); $query->execute([$chat_id, $chat_id, $chat_id, $chat_id]); $winner = $query->fetch(PDO::FETCH_ASSOC); $newPoint = $winner['point'] + 90; $query = $db->prepare("UPDATE players SET point = ? WHERE user_id = ?"); $query->execute([$newPoint, $winner['user_id']]); $query = $db->prepare(" SELECT p.first_name, p.user_id, p.point, u.emoji, u.emoji2 FROM players p LEFT JOIN users u ON p.user_id = u.user_id WHERE p.chat_id = ? ORDER BY p.point DESC "); $query->execute([$chat_id]); $players = $query->fetchAll(PDO::FETCH_ASSOC); $medals = ["🥇", "🥈", "🥉"]; $playerList = ""; foreach ($players as $index => $player) { $medal = $medals[$index] ?? "👤"; $emoji1 = !empty($player['emoji']) ? $player['emoji'] : ""; $emoji2 = !empty($player['emoji2']) ? $player['emoji2'] : ""; $emoji = ($emoji1 || $emoji2) ? " " . trim($emoji1 . ' ' . $emoji2) : ""; $playerList .= ($index + 1) . ". {$medal} {$player['first_name']}{$emoji} ⭐ ({$player['point']})\n"; } if ($winner) { $winnerText = "بازی تموم شد و {$winner['first_name']} برنده شد 🏅\n\n"; } else { $winnerText = "بازی تموم شد و هیچکس برنده نشد !\n\n"; } $info = info_game($db,$chat_id); $game_count = $info['game_count']; $dor = $info['dor']; $gap_name = $info['group_name']; $game_time = $info['game_time']; $group_name = $info['group_name']; $gozaresh = $info['gozaresh']; $model = $info['model']; $date = $info['persian_date']; $count_players = $info['count']; $senario = "🔰 سناریو : باکشات رولت ⚔"; $newText = $winnerText . "پایان بازی 🔹 \n\n" . $playerList . "\n" . "━━━━━━━━━━━━━━━━━━━━━━" . "\n" . $gap_name . "\n" . $senario . "\n" . $count_players . "\n" . $model . "\n" . $dor . "\n" . $game_count . "\n" . $game_time . "\n" . $date . "\n" . $gozaresh; delay(2); $response = bot('sendAnimation', [ 'chat_id' => $chat_id, 'parse_mode' => 'HTML', 'animation' => base_url . "winner.mp4", 'caption' => $newText, ]); bot('sendVoice', [ 'chat_id' => $chat_id, 'voice' => base_url . 'BakshatRoulet.mp3', 'caption' => "", ]); if (!$response['ok']) { bot('sendMessage', [ 'chat_id' => $chat_id, 'text' => "❌ خطا در ارسال گیف:\n" . print_r($response, true) ]); } $gozaresh_game = $newText . "\n\nچت ایدی : $chat_id"; bot('sendMessage', [ 'chat_id' => -1002674909716, 'text' => $gozaresh_game, 'parse_mode' => 'HTML', ]); $message_id = $response['result']['message_id'] ?? null; $pinResponse = bot('pinChatMessage', [ 'chat_id' => $chat_id, 'message_id' => $message_id, 'disable_notification' => true, ]); foreach ($players as $player) { $user_id = $player['user_id']; $point = $player['point']; // امتیاز پایه (اختصاصی توابع مثل دعوت و ...) give_point($db, $user_id); // فقط امتیاز فعلی بازیکن رو از leaderboard بگیر $query = $db->prepare("SELECT point, wins, losses FROM leaderboard WHERE user_id = ?"); $query->execute([$user_id]); $existingPlayer = $query->fetch(PDO::FETCH_ASSOC); // امتیاز رو به leaderboard اضافه یا بروزرسانی کن (بدون wins/losses) if ($existingPlayer) { $newPoint = $point + $existingPlayer['point']; // اگر برنده داریم، برد/باخت رو هم بروزرسانی کن if ($winner) { $isWinner = $user_id == $winner['user_id']; $newWins = $existingPlayer['wins'] + ($isWinner ? 1 : 0); $newLosses = $existingPlayer['losses'] + (!$isWinner ? 1 : 0); $query = $db->prepare("UPDATE leaderboard SET point = ?, wins = ?, losses = ?, last_game = CURRENT_TIMESTAMP , count_game_day = count_game_day + ? WHERE user_id = ?"); $query->execute([$newPoint, $newWins, $newLosses, 1, $user_id]); } else { $query = $db->prepare("UPDATE leaderboard SET point = ?, last_game = CURRENT_TIMESTAMP , count_game_day = count_game_day + ? WHERE user_id = ?"); $query->execute([$newPoint, 1, $user_id]); } } else { // کاربر جدید $wins = $winner && $user_id == $winner['user_id'] ? 1 : 0; $losses = $winner && $user_id != $winner['user_id'] ? 1 : 0; $query = $db->prepare("INSERT INTO leaderboard (user_id, point, wins, losses, count_game_day) VALUES (?, ?, ?, ?, ?)"); $query->execute([$user_id, $point, $wins, $losses, 1]); } // هدیه دعوت فقط در صورت داشتن برنده و بازی دوم if ($winner) { $query = $db->prepare("SELECT wins, losses FROM leaderboard WHERE user_id = ?"); $query->execute([$user_id]); $row = $query->fetch(PDO::FETCH_ASSOC); $totalGames = $row['wins'] + $row['losses']; if ($totalGames == 2) { $query = $db->prepare("SELECT ref_id FROM users WHERE user_id = ?"); $query->execute([$user_id]); $ref_id = $query->fetchColumn(); if ($ref_id) { $db->prepare("UPDATE users SET coin = coin + 50 WHERE user_id = ?")->execute([$ref_id]); $db->prepare("UPDATE leaderboard SET point = point + 75 WHERE user_id = ?")->execute([$ref_id]); bot('sendMessage', [ 'chat_id' => $ref_id, 'text' => "🎁 شما 50 سکه و 75 امتیاز دریافت کردید چون کاربری که دعوت کردید دومین بازی خودش را انجام داد." ]); } } } } } function Get_jon($db,$chat_id){ $query = $db->prepare("SELECT rand FROM games WHERE chat_id = ?"); $query->execute([$chat_id]); $rand = (int)$query->fetchColumn(); if($rand == 1){ $count_jon = 3; }elseif($rand == 2){ $count_jon = 4; }elseif($rand == 3){ $count_jon = 6; } return $count_jon; } function time_turn($db, $chat_id){ $count = 32; while($count >= 0){ delay(1); // گرفتن نوبت فعلی $query = $db->prepare("SELECT current_turn FROM games WHERE chat_id = ?"); $query->execute([$chat_id]); $current_turn = $query->fetchColumn(); // بررسی اینکه آیا بازیکن نوبتش رو استفاده کرده یا نه $query = $db->prepare("SELECT is_used FROM players WHERE user_id = ?"); $query->execute([$current_turn]); $is_used = (int)$query->fetchColumn(); if($is_used == 1){ break; // اگر بازیکن نوبتش رو استفاده کرده بود، حلقه تموم میشه } $count -= 1; // کم کردن شمارنده به درستی } // دوباره گرفتن نوبت فعلی و id_turn $query = $db->prepare("SELECT current_turn, id_turn FROM games WHERE chat_id = ?"); $query->execute([$chat_id]); $data = $query->fetch(); $current_turn = $data['current_turn']; $id_turn = $data['id_turn']; // بررسی نهایی $query = $db->prepare("SELECT is_used FROM players WHERE user_id = ?"); $query->execute([$current_turn]); $is_used_raw = $query->fetchColumn(); if ($is_used_raw !== false) { $is_used = (int)$is_used_raw; if ($is_used === 0) { bot('sendMessage', [ 'chat_id' => $chat_id, 'text' => "شلیک خودکار فعال شد 💣", 'parse_mode' => 'HTML' ]); $query = $db->prepare("UPDATE players SET is_used = 1 WHERE user_id = ?"); $query->execute([$current_turn]); shoot($db, $chat_id, $current_turn, $id_turn); } } } function join_game($db, $chat_id, $user_id, $message_id, $callback_query_id = 0) { $query = $db->prepare("SELECT make_game , status FROM games WHERE chat_id = ?"); $query->execute([$chat_id]); $data = $query->fetch(); $make_game = $data['make_game']; $status = $data['status']; if($make_game == 0 || $make_game == null || $make_game == false || $status == 'active') return; function send_response($callback_query_id, $chat_id, $text, $show_alert = false) { if ($callback_query_id) { bot('answerCallbackQuery', [ 'callback_query_id' => $callback_query_id, 'text' =>$text, 'show_alert' => $show_alert ]); } else { bot('sendMessage', [ 'chat_id' => $chat_id, 'text' => $text, 'parse_mode' => 'markdown', ]); } } // بررسی ثبت نام $query = $db->prepare("SELECT first_name FROM users WHERE user_id = ?"); $query->execute([$user_id]); $isregister = $query->fetchColumn(); if ($isregister == null) { if ($callback_query_id) { send_response($callback_query_id, $chat_id, 'ابتدا در پیوی ربات تعیین نام کنید', false); } return; // اگر از طریق پیام استارت اومده، پیام نده و فقط ترک کن } // بررسی کانال $channels = ['@IRshadow_team']; $notJoined = checkIsMember($user_id, $channels); if (!empty($notJoined)) { $channelText = implode(", ", $notJoined); if ($callback_query_id) { send_response($callback_query_id, $chat_id, "برای استفاده از ربات، ابتدا در کانال $channelText عضو شوید ✅", true); } return; } // بررسی بن بودن کاربر $query = $db->prepare("SELECT ban FROM users WHERE user_id = ?"); $query->execute([$user_id]); $ban = $query->fetch(PDO::FETCH_ASSOC); $is_ban = $ban['ban']; if ($is_ban == 1) { if ($callback_query_id) { send_response($callback_query_id, $chat_id, 'شما از ربات مسدود هستید', false); } return; } // بررسی اینکه کاربر فقط در یک گروه باشد $query = $db->prepare("SELECT chat_id FROM players WHERE user_id = ?"); $query->execute([$user_id]); $joinedGroups = $query->fetchAll(PDO::FETCH_COLUMN); if (!empty($joinedGroups)) { foreach ($joinedGroups as $joinedChatId) { if ($joinedChatId != $chat_id) { if ($callback_query_id) { send_response($callback_query_id, $chat_id, 'شما فقط می‌تونید در یک گروه جوین شوید!', true); } return; } } } // بررسی اینکه قبلاً در همین گروه جوین شده $query = $db->prepare("SELECT COUNT(*) FROM players WHERE user_id = ? AND chat_id = ?"); $query->execute([$user_id, $chat_id]); $isJoined = $query->fetchColumn(); if (!$isJoined) { // گرفتن سناریو بازی $query = $db->prepare("SELECT senario , mode , shart FROM games WHERE chat_id = ?"); $query->execute([$chat_id]); $data = $query->fetch(); $senario = $data['senario']; $mode = $data['mode']; $shart = $data['shart']; if($mode == 1){ $query = $db->prepare("SELECT coin FROM users WHERE user_id = ?"); $query->execute([$user_id]); $coin = (int)$query->fetchColumn(); if($coin < $shart){ bot('answerCallbackQuery', [ 'callback_query_id' => $callback_query_id, 'text' => 'سکه کافی ندارید ، بازی رقابتی است', 'show_alert' => true ]); return; } } // گرفتن تعداد بازیکنان برای turn_order $query = $db->prepare("SELECT COUNT(*) FROM players WHERE chat_id = ?"); $query->execute([$chat_id]); $count = $query->fetchColumn(); // بررسی تعداد بازیکنان در سناریو 2 if ($senario == 2 && $count > 8) { // پیام تعداد پر بودن فقط در حالت بدون callback ارسال شود if (!$callback_query_id) { send_response($callback_query_id, $chat_id, 'تعداد تکمیل شده', true); } else { send_response($callback_query_id, $chat_id, 'تعداد تکمیل شده', true); } return; } $query = $db->prepare("SELECT MAX(turn_order) FROM players WHERE chat_id = ?"); $query->execute([$chat_id]); $max_turn_order = $query->fetchColumn(); $turn_order = ($max_turn_order !== null) ? $max_turn_order + 1 : 1; // گرفتن نام بازیکن $query = $db->prepare("SELECT first_name FROM users WHERE user_id = ?"); $query->execute([$user_id]); $name_player = $query->fetchColumn(); // افزودن بازیکن به جدول $db->prepare("INSERT INTO players (chat_id, user_id, first_name, turn_order) VALUES (?, ?, ?, ?)") ->execute([$chat_id, $user_id, $name_player, $turn_order]); playerslist($db, $chat_id); $name = GetName($db,$user_id); if($callback_query_id == 0){ send_response($callback_query_id,$chat_id, "بازیکن [$name](tg://user?id=$user_id) به لیست بازی اضافه شد ✅"); bot('deleteMessage', [ 'chat_id' => $chat_id, 'message_id' => $message_id ]); }else{ send_response($callback_query_id, $chat_id, 'به لیست بازی اضافه شدی', false); } } else { // اگر قبلا جوین شده، پیام نده فقط ترک کن (مثل خواسته شما) return; } } function edit_turn($db,$chat_id){ $query = $db->prepare("SELECT id_turn FROM games WHERE chat_id = ?"); $query->execute([$chat_id]); $id_turn = $query->fetchColumn(); if(!empty($id_turn)){ bot('editMessageText', [ 'chat_id' => $chat_id, 'message_id' => $id_turn, 'text' => "🔫", 'parse_mode' => 'markdown' ]); $db->prepare("UPDATE games SET id_turn = ? WHERE chat_id = ?")->execute([null,$chat_id]); } } function info_gap($db, $chat_id) { $response = bot('getChat', ['chat_id' => $chat_id]); $title = $response['result']['title'] ?? 'گروه ناشناس'; $group_name = $title; $query = $db->prepare("SELECT game_count FROM groups WHERE chat_id = ?"); $query->execute([$chat_id]); $count = $query->fetchColumn(); $count_game = $count + 1; $query = $db->prepare("SELECT mode , shart FROM games WHERE chat_id = ?"); $query->execute([$chat_id]); $data = $query->fetch(); $shart = $data['shart']; $mode = $data['mode']; $model = $mode == 1 ? "رقابتی 🗡 : $shart سکه" : "دوستانه 🤝"; $query = $db->prepare("SELECT COUNT(*) FROM players WHERE chat_id = ?"); $query->execute([$chat_id]); $count = $query->fetchColumn(); return [ 'model' => $model, 'count' => $count, 'group_name' => $group_name, 'count_game' => $count_game ]; } function edit_mess($chat_id,$message_id){ bot('editMessageText', [ 'chat_id' => $chat_id, 'message_id' => $message_id, 'text' => "🧨", 'parse_mode' => 'markdown' ]); } function select_emoji($db,$user_id,$text){ $emoji_pattern = '/[\x{1F600}-\x{1F64F}\x{1F300}-\x{1F5FF}\x{1F680}-\x{1F6FF}\x{1F700}-\x{1F77F}\x{1F780}-\x{1F7FF}\x{1F800}-\x{1F8FF}\x{1F900}-\x{1F9FF}\x{1FA00}-\x{1FA6F}\x{1FA70}-\x{1FAFF}\x{2600}-\x{26FF}\x{2700}-\x{27BF}\x{2300}-\x{23FF}\x{2B50}\x{2934}-\x{2935}\x{25AA}\x{25AB}\x{25FE}\x{2B06}\x{2194}-\x{21AA}]/u'; // بررسی تعداد ایموجی‌ها preg_match_all($emoji_pattern, $text, $matches); $emoji_count = count($matches[0]); if ($emoji_count === 1) { // لیست ایموجی‌های نامناسب $bad_emojis = [ "🖕", "🖕🏻", "🖕🏼", "🖕🏽", "🖕🏾", "🖕🏿", "💩", "🍆", "🍑", "🍌", "💦", "🫦", "👅", "🫃", "🫄", "👙", "👠", "👡", "👢", "👗", "🩱", "🩲", "🩳", "🤤", "😛", "😝", "🤪", "🥵", "🥴", "👃", "👄", "🦵", "🦶", "⚠️", ]; foreach ($bad_emojis as $emoji) { if (strpos($text, $emoji) !== false) { bot('sendMessage', [ 'chat_id' => $user_id, 'text' => "ایموجی که فرستادی مجاز نیست ❌" ]); return; } } // ذخیره ایموجی $query = $db->prepare("UPDATE users SET select_id = ? WHERE user_id = ?"); $query->execute([$text, $user_id]); bot('sendMessage', [ 'chat_id' => $user_id, 'text' => "ایموجی $text انتخاب شد" ]); bot('sendMessage', [ 'chat_id' => $user_id, 'text' => "یک مدت رو برای خرید انتخاب کن", 'parse_mode' => 'HTML', 'reply_markup' => json_encode([ 'inline_keyboard' => [ [['text' => "یک ماه 75 سکه", 'callback_data' => "buy_1"], ['text' => "دو ماه ماه 120 سکه", 'callback_data' => "buy_2"]], [['text' => "سه ماه 200 سکه", 'callback_data' => "buy_3"], ['text' => "شش ماه 400 سکه", 'callback_data' => "buy_4"]], ] ]) ]); } elseif ($emoji_count > 1) { // اگر بیشتر از یک ایموجی فرستاده شده bot('sendMessage', [ 'chat_id' => $user_id, 'text' => "فقط یک ایموجی مجاز است! لطفاً فقط یک ایموجی ارسال کن ❗" ]); } else { // اگر اصلاً ایموجی نبود bot('sendMessage', [ 'chat_id' => $user_id, 'text' => "لطفاً فقط ایموجی ارسال کن!" ]); } } function make_game($db,$chat_id){ $query = $db->prepare("SELECT senario FROM games WHERE chat_id = ?"); $query->execute([$chat_id]); $choice = (int)$query->fetchColumn(); $scenario = getScenarioInfo($choice); $info = info_gap($db, $chat_id); $group_name = $info['group_name']; $count_game = $info['count_game']; $model = $info['model']; $count = $info['count']; $halat = ""; switch($choice){ case 1 : $halat = $count > 1 ? "شمار نفرات : " . $count . " ✅" : "شمار نفرات :" . $count . " ❌"; $tech = base_site . "rolet"; break; case 2 : $allowed_counts = [2, 4, 6, 8]; $halat = in_array($count, $allowed_counts) ? "شمار نفرات : " . $count . " ✅" : "شمار نفرات :" . $count . " ❌"; $tech = base_site . "bokshot"; break; } $response = bot('sendAnimation', [ 'chat_id' => $chat_id, 'animation' => $scenario['start_gif_url'], 'parse_mode'=>'HTML', 'caption' => "سناریو {$scenario['name']} (آموزش سناریو) \n\n⚜ $model \n\n🧩 شماره بازی :$count_game \n\n👥 نام گروه : $group_name \n\n📜 کسانی که شرکت کردند : \n\n $halat", 'reply_markup' => startpanel() ]); $message_id_new = $response['result']['message_id'] ?? null; bot('pinChatMessage', [ 'chat_id' => $chat_id, 'message_id' => $message_id_new, 'disable_notification' => true ]); $current_position = randomNumber(); $bullet_position = randomNumber(); $query = $db->prepare(" UPDATE games SET bullet_position = ?, current_position = ?, id_pin = ? , make_game = ? WHERE chat_id = ? "); $query->execute([$bullet_position, $current_position, $message_id_new,1, $chat_id]); } function gardone($db, $user_id, $callback_query_id) { // دریافت اطلاعات کاربر $query = $db->prepare("SELECT is_vip, coin FROM users WHERE user_id = ?"); $query->execute([$user_id]); $data = $query->fetch(); if (!$data) { bot('answerCallbackQuery', [ 'callback_query_id' => $callback_query_id, 'text' => 'کاربر یافت نشد', 'show_alert' => true ]); return; } $vip = $data['is_vip']; $coin = $data['coin']; // بررسی VIP بودن if ($vip == 0) { bot('answerCallbackQuery', [ 'callback_query_id' => $callback_query_id, 'text' => 'اکانت شما باید VIP باشه.', 'show_alert' => false ]); return; } // بررسی موجودی سکه $cost = 20; if ($coin < $cost) { bot('answerCallbackQuery', [ 'callback_query_id' => $callback_query_id, 'text' => 'شما سکه کافی ندارید.', 'show_alert' => false ]); return; } if(random_int(1,100) <= 80){ $point = random_int(20,100); $stmt = $db->prepare("UPDATE leaderboard SET point = point + ? WHERE user_id = ?"); $stmt->execute([$point, $user_id]); $result = "$point امتیاز"; }else{ $coin = random_int(22,30); $stmt = $db->prepare("UPDATE users SET coin = coin + ? WHERE user_id = ?"); $stmt->execute([$coin, $user_id]); $result = "$coin سکه"; } $stmt = $db->prepare("UPDATE users SET coin = coin - ? WHERE user_id = ?"); $stmt->execute([$cost, $user_id]); // ارسال پیام نتیجه bot('sendMessage', [ 'chat_id' => $user_id, 'text' => "شما $result از گردونه برنده شدید 🏆 ، و $cost سکه از شما کم شد ➰", 'parse_mode' => 'HTML', ]); } function select_emoji2($db,$user_id,$text){ $emoji_pattern = '/[\x{1F600}-\x{1F64F}\x{1F300}-\x{1F5FF}\x{1F680}-\x{1F6FF}\x{1F700}-\x{1F77F}\x{1F780}-\x{1F7FF}\x{1F800}-\x{1F8FF}\x{1F900}-\x{1F9FF}\x{1FA00}-\x{1FA6F}\x{1FA70}-\x{1FAFF}\x{2600}-\x{26FF}\x{2700}-\x{27BF}\x{2300}-\x{23FF}\x{2B50}\x{2934}-\x{2935}\x{25AA}\x{25AB}\x{25FE}\x{2B06}\x{2194}-\x{21AA}]/u'; // بررسی تعداد ایموجی‌ها preg_match_all($emoji_pattern, $text, $matches); $emoji_count = count($matches[0]); if ($emoji_count === 1) { // لیست ایموجی‌های نامناسب $bad_emojis = [ "🖕", "🖕🏻", "🖕🏼", "🖕🏽", "🖕🏾", "🖕🏿", "💩", "🍆", "🍑", "🍌", "💦", "🫦", "👅", "🫃", "🫄", "👙", "👠", "👡", "👢", "👗", "🩱", "🩲", "🩳", "🤤", "😛", "😝", "🤪", "🥵", "🥴", "👃", "👄", "🦵", "🦶", "⚠️", ]; foreach ($bad_emojis as $emoji) { if (strpos($text, $emoji) !== false) { bot('sendMessage', [ 'chat_id' => $user_id, 'text' => "ایموجی که فرستادی مجاز نیست ❌" ]); return; } } // ذخیره ایموجی $query = $db->prepare("UPDATE users SET emoji2 = ? WHERE user_id = ?"); $query->execute([$text, $user_id]); bot('sendMessage', [ 'chat_id' => $user_id, 'text' => "⚜ ایموجی $text برای شما فعال شد ، می‌تونین از همین بخش دوباره ایموجی رو تغییر بدین ❤️", 'parse_mode'=>'HTML' ]); gethome($db, $user_id); } elseif ($emoji_count > 1) { // اگر بیشتر از یک ایموجی فرستاده شده bot('sendMessage', [ 'chat_id' => $user_id, 'text' => "فقط یک ایموجی مجاز است! لطفاً فقط یک ایموجی ارسال کن ❗" ]); } else { // اگر اصلاً ایموجی نبود bot('sendMessage', [ 'chat_id' => $user_id, 'text' => "لطفاً فقط ایموجی ارسال کن!" ]); } } function time_turn_buck($db, $chat_id){ $count = 100; $query = $db->prepare("SELECT current_turn FROM games WHERE chat_id = ?"); $query->execute([$chat_id]); $current_turn = $query->fetchColumn(); while($count >= 0){ delay(1); $query = $db->prepare("SELECT is_used FROM players WHERE user_id = ?"); $query->execute([$current_turn]); $is_used_raw = $query->fetchColumn(); if ($is_used_raw === false) { break; // بازیکن وجود نداره یا جدول خالی شده، پس خارج شو } $is_used = (int)$is_used_raw; if($is_used == 1){ break; } if($count == 20){ bot('sendMessage', [ 'chat_id' => $chat_id, 'text' => "20 ثانیه تا پایان زمان شلیک ⚠" ]); } if($count == 10){ bot('sendMessage', [ 'chat_id' => $chat_id, 'text' => "10 ثانیه تا پایان زمان شلیک ⚠" ]); } $count -= 1; // کم کردن شمارنده به درستی } // دوباره گرفتن نوبت فعلی و id_turn $query = $db->prepare("SELECT current_turn FROM games WHERE chat_id = ?"); $query->execute([$chat_id]); $data = $query->fetch(); $current_turn = $data['current_turn']; // بررسی نهایی $query = $db->prepare("SELECT is_used , is_kick FROM players WHERE user_id = ?"); $query->execute([$current_turn]); $data = $query->fetch(); if ($data != false) { $is_used = $data['is_used']; $is_kick = $data['is_kick']; $name = GetName($db, $current_turn); if ($is_used == 0 and $is_kick == 1) { delay(2); bot('sendMessage', [ 'chat_id' => $chat_id, 'text' => "$name به دلیل آفلاین بودن از بازی کیک شد", 'parse_mode' => 'HTML' ]); $query = $db->prepare("UPDATE players SET is_alive = 0 , is_dead_real = 1 WHERE user_id = ?"); $query->execute([$current_turn]); edit_turn($db,$chat_id); // گرفتن تعداد بازیکنان زنده واقعی (نه کیک شده) $query = $db->prepare("SELECT COUNT(*) FROM players WHERE chat_id = ? AND is_alive = 1"); $query->execute([$chat_id]); $alive_real_players = $query->fetchColumn(); // گرفتن شماره راند فعلی از جدول games $query = $db->prepare("SELECT rand FROM games WHERE chat_id = ?"); $query->execute([$chat_id]); $rand = $query->fetchColumn(); // شرط پایان بازی یا ادامه‌ی نوبت if ($alive_real_players < 2) { if ($rand == 3) { endGame($db, $chat_id, 2); // بازی رو فقط در راند 3 تموم کن } else { $query = $db->prepare("SELECT COUNT(*) FROM players WHERE chat_id = ? AND is_dead_real != 1"); $query->execute([$chat_id]); $is_kick = $query->fetchColumn(); if($is_kick > 1){ Get_rand($db,$chat_id); }else{ endGame($db, $chat_id, 2); } } } else { nextTurn($db, $chat_id, 0); // اگر بیشتر از یک بازیکن زنده‌ست، نوبت بعدی بده } }elseif($is_used == 0){ $query = $db->prepare("UPDATE players SET is_used = 1 , is_kick = is_kick + 1 , use_chagho = 0 WHERE user_id = ?"); $query->execute([$current_turn]); edit_turn($db,$chat_id); nextTurn($db, $chat_id, 0); } } } function info_game($db, $chat_id) { $response = bot('getChat', ['chat_id' => $chat_id]); $title = $response['result']['title'] ?? 'گروه ناشناس'; $group = $title; $query = $db->prepare("SELECT game_count FROM groups WHERE chat_id = ?"); $query->execute([$chat_id]); $count = $query->fetchColumn(); $count_game = $count + 1; $query = $db->prepare("SELECT mode , shart FROM games WHERE chat_id = ?"); $query->execute([$chat_id]); $data = $query->fetch(); $shart = $data['shart']; $mode = $data['mode']; $model = $mode == 1 ? "رقابتی 🗡 : $shart سکه" : "دوستانه 🤝"; $query = $db->prepare("SELECT COUNT(*) FROM players WHERE chat_id = ?"); $query->execute([$chat_id]); $count = $query->fetchColumn(); $timestamp = time(); // زمان فعلی $date = jdate("j F Y", $timestamp); // تبدیل به تاریخ شمسی $query = $db->prepare(" SELECT games.dor, groups.game_count FROM games INNER JOIN groups ON games.chat_id = groups.chat_id WHERE games.chat_id = ? "); $query->execute([$chat_id]); $result = $query->fetch(PDO::FETCH_ASSOC); $dor = $result['dor'] ?? null; $game_count = $result['game_count'] ?? null; $game_count++; $query = $db->prepare("UPDATE groups SET game_count = ? WHERE chat_id = ?"); $query->execute([$game_count, $chat_id]); $query = $db->prepare("SELECT created_at FROM games WHERE chat_id = ?"); $query->execute([$chat_id]); $startTime = $query->fetchColumn(); $start = new DateTime($startTime); $now = new DateTime(); $durationInSeconds = $now->getTimestamp() - $start->getTimestamp(); $minutes = floor($durationInSeconds / 60); $seconds = $durationInSeconds % 60; $hours = floor($minutes / 60); $minutes = $minutes % 60; if ($hours > 0) { $game_time = "⏳ زمان بازی : $hours ساعت، $minutes دقیقه و $seconds ثانیه"; } else { $game_time = "⏳ زمان بازی : $minutes دقیقه و $seconds ثانیه"; } $gozaresh = ''; if ($mode == 1) { // 1. گرفتن برنده $query = $db->prepare(" SELECT first_name, user_id, point FROM players WHERE chat_id = ? AND win_rands = ( SELECT MAX(win_rands) FROM players WHERE chat_id = ? ) AND ( (SELECT COUNT(*) FROM players WHERE chat_id = ? AND win_rands = ( SELECT MAX(win_rands) FROM players WHERE chat_id = ? ) ) > 1 OR is_dead_real = 0 ) AND is_dead_real = 0 ORDER BY is_alive DESC LIMIT 1; "); $query->execute([$chat_id, $chat_id, $chat_id, $chat_id]); $winner = $query->fetch(PDO::FETCH_ASSOC); // فقط اگه برنده وجود داشته باشه ادامه بده if ($winner) { // 2. گرفتن بازنده‌هایی که user_id != برنده $query = $db->prepare("SELECT user_id FROM players WHERE chat_id = ? AND user_id != ?"); $query->execute([$chat_id, $winner['user_id']]); $losers = $query->fetchAll(PDO::FETCH_COLUMN); // 3. کم کردن سکه از بازنده‌ها $loserCount = count($losers); $totalCollected = $loserCount * $shart; $query = $db->prepare("UPDATE users SET coin = coin - ? WHERE user_id = ?"); foreach ($losers as $loser_id) { $query->execute([$shart, $loser_id]); } // 4. محاسبه و جایزه $burnAmount = $totalCollected * 0.2; $reward = $totalCollected - $burnAmount; $query = $db->prepare("UPDATE users SET coin = coin + ? WHERE user_id = ?"); $query->execute([$reward, $winner['user_id']]); // گزارش $gozaresh = "🔥 حق کمیسیون : $burnAmount\n🏆 جایزه برنده : $reward"; } } $count_Players = '🚻 تعداد نفرات : ' . "$count"; $persian_date = '🗓 تاریخ بازی : ' . "$date"; $group_name = '👥 نام گروه : ' . "$group"; $tedad_bazi = '🧩 شماره بازی : ' . "$game_count"; $dorcount = '🔁 تعداد دور : ' . "$dor"; $model_game = '💠 مدل بازی : '. "$model"; return [ 'dor'=>$dorcount, 'gozaresh'=>$gozaresh, 'game_time'=>$game_time, 'game_count'=>$tedad_bazi, 'persian_date'=>$persian_date, 'model' => $model_game, 'count' => $count_Players, 'group_name' => $group_name, 'count_game' => $count_game ]; } function generateStrongPassword(int $length = 12): string { $chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()-_=+[]{}<>?'; $password = ''; $maxIndex = strlen($chars) - 1; for ($i = 0; $i < $length; $i++) { $password .= $chars[random_int(0, $maxIndex)]; } return $password; } function give_point($db,$user_id){ $query = $db->prepare("SELECT is_vip FROM users WHERE user_id = ?"); $query->execute([$user_id]); $is_vip = $query->fetchColumn(); if($is_vip == 1){ $query = $db->prepare("UPDATE leaderboard SET point = point + ? WHERE user_id = ?"); $query->execute([10,$user_id]); bot('sendMessage', [ 'chat_id' => $user_id, 'text' => "شما 10 امتیاز به دلیل داشتن اکانت vip بیشتر دریافت کردید 💕", 'parse_mode' => 'HTML' ]); }else{ return; } } function send_Message($db,$user_id,$message_id){ gethome($db, $user_id); $msg = bot('sendMessage', [ 'chat_id' => $user_id, 'text' => "📬 درحال ارسال پیام...\n✅ موفق: 0\n❌ ناموفق: 0", 'parse_mode' => 'HTML', ]); $message_id_status = $msg['result']['message_id']; if (!$message_id_status) { bot('sendMessage', [ 'chat_id' => $user_id, 'text' => "⚠ خطا در ارسال پیام وضعیت!", 'parse_mode' => 'HTML', ]); exit; } // دریافت کاربران از دیتابیس $query = $db->prepare("SELECT user_id FROM users"); $query->execute(); $users = $query->fetchAll(PDO::FETCH_ASSOC); $successCount = 0; $failCount = 0; $counter = 0; $failedUsers = []; foreach ($users as $user) { try { $response = bot('copyMessage', [ 'chat_id' => $user['user_id'], 'from_chat_id' => $user_id, 'message_id' => $message_id, ]); $response = json_decode(json_encode($response), true); if (isset($response['ok']) && $response['ok']) { $successCount++; } else { $failCount++; } } catch (Exception $e) { $failCount++; } $counter++; if ($counter % 60 == 0) { bot('editMessageText', [ 'chat_id' => $user_id, 'message_id' => $message_id_status, 'text' => "📬 درحال ارسال پیام...\n✅ موفق: $successCount\n❌ ناموفق: $failCount", 'parse_mode' => 'HTML', ]); delay(2); } } bot('editMessageText', [ 'chat_id' => $user_id, 'message_id' => $message_id_status, 'text' => "ارسال به اتمام رسید 📨\n\n📬 ارسال موفق: $successCount\n❌ ارسال ناموفق: $failCount\n", 'parse_mode' => 'HTML', ]); } function ensgame($db,$user_id,$callback_query_id,$message_id,$chat_id){ $query = $db->prepare("SELECT COUNT(*) FROM players WHERE user_id = ? AND chat_id = ?"); $query->execute([$user_id,$chat_id]); $isJoined = $query->fetchColumn(); if($isJoined){ $query = $db->prepare("DELETE FROM players WHERE user_id = ? AND chat_id = ?"); $query->execute([$user_id,$chat_id]); bot('answerCallbackQuery', [ 'callback_query_id' => $callback_query_id, 'text' => 'با موفقیت انصراف دادید', 'show_alert' => false ]); playerslist($db,$chat_id,$message_id); }else{ bot('answerCallbackQuery', [ 'callback_query_id' => $callback_query_id, 'text' => 'تو بازی نیستی ', 'show_alert' => false ]); } } ?>