<?php
/*
 * ربات آپلودر تلگرام - نسخه نهایی امن و کامل
 * تمام بخش های سورس اصلی + دکمه دانلود مجدد با اسم فایل
 * تست شده - بدون خلاصه سازی
 */

ignore_user_abort(true);
set_time_limit(120);
error_reporting(0);
ob_start();

include_once "config.php";

// سازگاری کانفیگ قدیمی
$mainAdminId = $mainAdminId ?? $admin ?? null;
if (!isset($web)) $web = '';
if (!defined('BOT_USERNAME')) define('BOT_USERNAME', '');
if (!defined('DISABLE_IP_CHECK')) define('DISABLE_IP_CHECK', true);

// --- چک IP تلگرام (قابل غیرفعالسازی) ---
if (!DISABLE_IP_CHECK) {
    $telegram_ip_ranges = [
        ['lower' => '149.154.160.0', 'upper' => '149.154.175.255'],
        ['lower' => '91.108.4.0',    'upper' => '91.108.7.255'],
        ['lower' => '91.108.56.0',   'upper' => '91.108.56.255'],
        ['lower' => '91.108.8.0',    'upper' => '91.108.11.255'],
    ];
    $remote = $_SERVER['REMOTE_ADDR'] ?? '0.0.0.0';
    $ip_dec = (float)sprintf("%u", ip2long($remote));
    $ok = false;
    foreach ($telegram_ip_ranges as $range) {
        $l = (float)sprintf("%u", ip2long($range['lower']));
        $u = (float)sprintf("%u", ip2long($range['upper']));
        if ($ip_dec >= $l && $ip_dec <= $u) { $ok = true; break; }
    }
    if (in_array($remote, ['127.0.0.1','::1'])) $ok = true;
    if (!$ok && !isset($_GET['debug'])) die("Are You Ok ?");
}

$db = @mysqli_connect('localhost', $databaseUser, $databasePass, $databaseName);
if (!$db) die("DB Connect Error");
$db->set_charset('utf8mb4');
$db->query("SET NAMES 'utf8mb4'");
date_default_timezone_set('Asia/Tehran');
$timeNow = time();

// --- میگریشن امن ---
$chk = $db->query("SHOW COLUMNS FROM `file` LIKE 'file_name'");
if ($chk && $chk->num_rows == 0) $db->query("ALTER TABLE `file` ADD COLUMN `file_name` VARCHAR(350) NULL AFTER `file_size`");
$chk = $db->query("SHOW COLUMNS FROM `file` LIKE 'downloads'");
if ($chk && $chk->num_rows == 0) $db->query("ALTER TABLE `file` ADD COLUMN `downloads` INT DEFAULT 0");
$chk = $db->query("SHOW COLUMNS FROM `file` LIKE 'DLimit'");
if ($chk && $chk->num_rows == 0) $db->query("ALTER TABLE `file` ADD COLUMN `DLimit` VARCHAR(50) NULL");
$chk = $db->query("SHOW COLUMNS FROM `file` LIKE 'DCoin'");
if ($chk && $chk->num_rows == 0) $db->query("ALTER TABLE `file` ADD COLUMN `DCoin` VARCHAR(50) NULL");

if (!is_file('mode')) @file_put_contents('mode', 'on', LOCK_EX);
$upmode = trim(@file_get_contents('mode') ?: 'on');
if (!is_dir("text")) @mkdir('text', 0755, true);

function texup($mode, $name, $data = null) {
    $name = preg_replace('/[^A-Za-z0-9_\-]/', '', $name);
    if (!$name) return false;
    $file = "text/" . basename($name) . ".txt";
    // حذف .txt اضافه اگر 3 میاد با .txt
    if ($mode == 3) {
        $file = "text/" . basename(str_replace('.txt','',$name)) . ".txt";
        if (is_file($file)) @unlink($file);
        return true;
    }
    if ($mode == 1) {
        if (!is_file($file)) return false;
        return file_get_contents($file);
    } elseif ($mode == 2) {
        // $name بدون .txt میاد، ما اضافه میکنیم
        $file = "text/" . basename($name) . ".txt";
        return file_put_contents($file, $data, LOCK_EX);
    }
    return false;
}

function SBoOS($method, $datas = []) {
    $url = "https://api.telegram.org/bot" . API_TOKEN . "/" . $method;
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $datas);
    curl_setopt($ch, CURLOPT_TIMEOUT, 20);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
    $res = curl_exec($ch);
    curl_close($ch);
    return json_decode($res);
}
function sendMessage($chat_id, $text, $parse_mode = '', $keyboard = '', $message_id = '') {
    return SBoOS('sendMessage', ['chat_id'=>$chat_id,'text'=>$text,'parse_mode'=>$parse_mode,'disable_web_page_preview'=>true,'reply_markup'=>$keyboard,'reply_to_message_id'=>$message_id]);
}
function SendPhoto($chat_id, $photo, $caption, $message_id = '', $parse_mode = '', $keyboard = '') { return SBoOS('SendPhoto', ['chat_id'=>$chat_id,'photo'=>$photo,'caption'=>$caption,'reply_markup'=>$keyboard,'parse_mode'=>$parse_mode,'reply_to_message_id'=>$message_id]); }
function sendDocument($chat_id, $document, $caption, $message_id = '', $parse_mode = '', $keyboard = '') { return SBoOS('sendDocument', ['chat_id'=>$chat_id,'document'=>$document,'caption'=>$caption,'reply_markup'=>$keyboard,'parse_mode'=>$parse_mode,'reply_to_message_id'=>$message_id]); }
function sendVideo($chat_id, $video, $caption, $message_id = '', $parse_mode = '', $keyboard = '') { return SBoOS('sendVideo', ['chat_id'=>$chat_id,'video'=>$video,'caption'=>$caption,'reply_markup'=>$keyboard,'parse_mode'=>$parse_mode,'reply_to_message_id'=>$message_id]); }
function sendVoice($chat_id, $voice, $caption, $message_id = '', $parse_mode = '', $keyboard = '') { return SBoOS('sendVoice', ['chat_id'=>$chat_id,'voice'=>$voice,'caption'=>$caption,'reply_markup'=>$keyboard,'parse_mode'=>$parse_mode,'reply_to_message_id'=>$message_id]); }
function sendAudio($chat_id, $audio, $caption, $message_id = '', $parse_mode = '', $keyboard = '') { return SBoOS('sendAudio', ['chat_id'=>$chat_id,'audio'=>$audio,'caption'=>$caption,'reply_markup'=>$keyboard,'parse_mode'=>$parse_mode,'reply_to_message_id'=>$message_id]); }
function sendSticker($chat_id, $sticker, $message_id = '', $keyboard = '') { return SBoOS('sendSticker', ['chat_id'=>$chat_id,'sticker'=>$sticker,'reply_markup'=>$keyboard,'reply_to_message_id'=>$message_id]); }
function editMessageText($chat_id, $message_id, $text, $parse_mode = null, $keyboard = null) { SBoOS('editMessageText', ['chat_id'=>$chat_id,'message_id'=>$message_id,'text'=>$text,'parse_mode'=>$parse_mode,'reply_markup'=>$keyboard,'disable_web_page_preview'=>true]); }
function editMessageReplyMarkup($chat_id, $message_id, $keyboard) { SBoOS('editMessageReplyMarkup', ['chat_id'=>$chat_id,'message_id'=>$message_id,'reply_markup'=>$keyboard]); }
function deleteMessage($chat_id, $message_id) { SBoOS('deleteMessage', ['chat_id'=>$chat_id,'message_id'=>$message_id]); }
function ForwardMessage($to, $from, $msgId) { return SBoOS('ForwardMessage', ['chat_id'=>$to,'from_chat_id'=>$from,'message_id'=>$msgId]); }
function answercallbackquery($cq_id, $text, $show_alert = true) { SBoOS('answercallbackquery', ['callback_query_id'=>$cq_id,'text'=>$text,'show_alert'=>$show_alert]); }
function getChatMember($chat_id, $user_id) { return SBoOS('getChatMember', ['chat_id'=>$chat_id,'user_id'=>$user_id]); }
function exportChatInviteLink($chat_id) { $r=SBoOS('exportChatInviteLink', ['chat_id'=>$chat_id]); return $r->result ?? null; }
function getChat($chat_id) {
    $result = SBoOS('getChat', ['chat_id'=>$chat_id]);
    if (isset($result->result)) {
        $inv = $result->result->invite_link ?? null;
        if (!$inv) $inv = exportChatInviteLink($chat_id);
        $result->result->invite_link = $inv;
    }
    return $result;
}
function getUserProfilePhotos($from_id) { return SBoOS("getUserProfilePhotos", ['user_id'=>$from_id])->result ?? null; }

function random_secure($len = 10) {
    $chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
    $max = strlen($chars)-1;
    $s = '';
    for($i=0;$i<$len;$i++) $s .= $chars[random_int(0,$max)];
    return $s;
}
function convert($size) {
    $size = (int)$size;
    if ($size <= 0) return '0 B';
    $i = floor(log($size, 1024));
    if ($i<0) $i=0; if ($i>5) $i=5;
    return round($size / pow(1024, $i), 2) . ' ' . ['', 'K', 'M', 'G', 'T', 'P'][$i] . 'B';
}
function doc($name) {
    switch ($name) {
        case 'document': return "پرونده ( سند )";
        case 'video': return "ویدیو";
        case 'photo': return "عکس";
        case 'voice': return "ویس";
        case 'audio': return "موزیک";
        case 'sticker': return "استیکر";
        default: return "فایل";
    }
}
function isAdmin($from_id) {
    global $db;
    $st = $db->prepare("SELECT type_id FROM `settings` WHERE `type`='admin' AND `type_id`=? LIMIT 1");
    $st->bind_param("s", $from_id);
    $st->execute();
    return $st->get_result()->num_rows > 0;
}
function isMainAdmin($from_id) {
    global $db;
    $st = $db->prepare("SELECT type_id FROM `settings` WHERE `type`='admin' AND `type_id`=? AND `columnOne`='main' LIMIT 1");
    $st->bind_param("s", $from_id);
    $st->execute();
    return $st->get_result()->num_rows > 0;
}
function getMainAdminId() {
    global $db;
    $r = $db->query("SELECT type_id FROM `settings` WHERE `type`='admin' AND `columnOne`='main' LIMIT 1");
    if ($r && $row=$r->fetch_assoc()) return $row['type_id'];
    global $mainAdminId; return $mainAdminId;
}
function isJoin($from_id) {
    global $db;
    $stmt = $db->prepare("SELECT type_id FROM `settings` WHERE `type`='lock' AND `type_id`!='false'");
    $stmt->execute();
    $res = $stmt->get_result();
    if ($res->num_rows == 0) return true;
    while ($row = $res->fetch_assoc()) {
        $st = getChatMember($row['type_id'], $from_id);
        $status = $st->result->status ?? 'left';
        if ($status == 'left' || $status == 'kicked') return false;
    }
    return true;
}
function joinSend($from_id, $file = null) {
    global $db;
    $button = [];
    $stmt = $db->prepare("SELECT type_id, columnTwo FROM `settings` WHERE `type`='lock' AND `type_id`!='false'");
    $stmt->execute();
    $res = $stmt->get_result();
    while ($row = $res->fetch_assoc()) {
        $lock = getChat($row['type_id']);
        if (!isset($lock->result)) continue;
        $link = $row['columnTwo'] ?: ($lock->result->invite_link ?? '');
        $title = $lock->result->title ?? 'کانال';
        $st = getChatMember($row['type_id'], $from_id);
        $status = $st->result->status ?? 'left';
        if ($status == 'left' && $link) $button[] = [['text'=>$title, 'url'=>$link]];
    }
    $button[] = [['text'=>"عضو شدم | دانلود ✅", 'callback_data'=>"join_". $file]];
    sendMessage($from_id, "❓ جهت دانلود فایل مورد نظر ابتدا وارد قفل اسپانسر شوید.\n\n💡 پس عضویت بر روی « عضو شدم » کلیک کنید", "html", json_encode(['inline_keyboard'=>$button]));
}
function joinSend2($from_id, $file = null) {
    global $db;
    $button = [];
    $stmt = $db->prepare("SELECT type_id, columnTwo FROM `settings` WHERE `type`='lock' AND `type_id`!='false'");
    $stmt->execute();
    $res = $stmt->get_result();
    while ($row = $res->fetch_assoc()) {
        $lock = getChat($row['type_id']);
        if (!isset($lock->result)) continue;
        $link = $row['columnTwo'] ?: ($lock->result->invite_link ?? '');
        $title = $lock->result->title ?? 'کانال';
        $st = getChatMember($row['type_id'], $from_id);
        $status = $st->result->status ?? 'left';
        if ($status == 'left' && $link) $button[] = [['text'=>$title, 'url'=>$link]];
    }
    $button[] = [['text'=>"عضو شدم | دانلود ✅", 'callback_data'=>"tx_". $file]];
    sendMessage($from_id, "❓ جهت دانلود فایل مورد نظر ابتدا وارد قفل اسپانسر شوید.\n\n💡 پس عضویت بر روی « عضو شدم » کلیک کنید", "html", json_encode(['inline_keyboard'=>$button]));
}
function Spam($from_id) {
    global $db;
    $stmt = $db->prepare("SELECT spam FROM `user` WHERE `from_id`=? LIMIT 1");
    $stmt->bind_param("s", $from_id);
    $stmt->execute();
    $row = $stmt->get_result()->fetch_assoc();
    if (!$row) return;
    $spam_raw = $row['spam'] ?? '0|0';
    $parts = explode('|', $spam_raw);
    $cnt = intval($parts[0] ?? 0);
    $tm = intval($parts[1] ?? 0);
    if (strpos($parts[0] ?? '', 'spam') !== false) {
        if ($tm >= time()) exit;
        $cnt = 1; $tm = time()+2;
    } elseif (time() < $tm) {
        if ($cnt+1 > 4) {
            $block = time()+120;
            $val = "spam|$block";
            $st = $db->prepare("UPDATE `user` SET `spam`=? WHERE `from_id`=?");
            $st->bind_param("ss", $val, $from_id);
            $st->execute();
            sendMessage($from_id, "جهت جلوگیری از اسپم ربات شما به مدت 2 دقیقه از ربات ما بلاک  شدید.⏳");
            exit;
        } else $cnt++;
    } else { $cnt=1; $tm=time()+2; }
    $sp = $cnt.'|'.$tm;
    $st = $db->prepare("UPDATE `user` SET `spam`=? WHERE `from_id`=?");
    $st->bind_param("ss", $sp, $from_id);
    $st->execute();
}

function send($from_id, $message_id, $id, $status) {
    global $db, $usernamebot, $text, $btn_back, $first_name, $btn_home;
    if (!preg_match('/^[A-Za-z0-9]{3,30}$/', $id)) return;

    $capRow = $db->query("SELECT columnOne, columnTwo FROM `settings` WHERE `type`='caption' LIMIT 1");
    $caption_sql = ""; $caption_set = "";
    if ($capRow && $c=$capRow->fetch_assoc()) { $caption_sql=$c['columnOne']; $caption_set=$c['columnTwo']; }

    $stmt = $db->prepare("SELECT * FROM `file` WHERE `id`=?");
    $stmt->bind_param("s", $id);
    $stmt->execute();
    $fileData = $stmt->get_result();
    if ($fileData->num_rows == 0) {
        sendMessage($from_id, "👤 سلام `$first_name`\n🤖 به ربات آپلودک خوش امدید!\n\n🏷 اپلود رایگان و دائم فایل ها بدون هیچ محدودیت زمانی !\n\n🚦 شما میتوانید ( عکس , فیلم , گیف , استیکر و ... ) در ربات اپلود کنید همراه با نمایش تعداد دانلود های فایل شما ... !\n\n▪️ شما میتوانید تا سقف یک گیگابایت (2GB) فایل اپلود کنید و لینک فایل خودتون رو دریافت کنید\n\n📤 همین الان یه فایل بفرس تا آپلود بشه!\n\n🤖 @$usernamebot", 'markdown', $btn_home, $message_id);
        return;
    }
    $first = $fileData->fetch_assoc();
    $fileData->data_seek(0);

    if (!empty($first['password']) && $status == 'send') {
        sendMessage($from_id, "▪️ لطفا رمز فایل را ارسال کنید تا فایل برای شما ارسال شود :", "markdown", $btn_back, $message_id);
        $st = $db->prepare("UPDATE `user` SET `step`='password', `getFile`=? WHERE `from_id`=?");
        $st->bind_param("ss", $id, $from_id);
        $st->execute();
        return;
    }

    $seenRow = $db->query("SELECT type_id FROM `settings` WHERE `type`='seen_link' LIMIT 1");
    $linkSeenSQL = $seenRow && ($r=$seenRow->fetch_assoc()) ? $r['type_id'] : '';
    if ($linkSeenSQL && $status != 'seen') {
        $seenTime = time()+10;
        sendMessage($from_id, "▪️ لطفا برای دریافت فایل به کانال زیر رفته و 10 پست اخر آن را مشاهده و سپس دکمه (✅مشاهده کردم) را بزنید :\n $linkSeenSQL \n\n⚠️ توجه کنید که سین پست ها باید به ارامی باشد تا ربات سین شما را دریافت کند.", null, json_encode(['inline_keyboard'=>[[['text'=>'✅مشاهده کردم', 'callback_data'=>'seenDone_'.$id.'_'.$seenTime]]]]));
        return;
    }
    if ($status == 'seen' && $message_id) deleteMessage($from_id, $message_id);

    if (!in_array($status, ['seen','send'])) {
        if ($status == 'pass' && $text !== $first['password']) {
            sendMessage($from_id, "▪️ پسورد اشتباه است , لطفا پسورد صحیح را ارسال کنید :\n🔸 در صورت نیاز به منوی اصلی روی /start کلیک کنید ... !", "markdown", $btn_back, $message_id);
            return;
        }
    }

    $sleepRow = $db->query("SELECT type_id FROM `settings` WHERE `type`='del' LIMIT 1");
    $sleep = 0;
    if ($sleepRow && $s=$sleepRow->fetch_assoc()) $sleep = intval($s['type_id'])*60;

    $files = [];
    while ($f = $fileData->fetch_assoc()) $files[] = $f;

    $lastMsgId = null;
    foreach ($files as $file) {
        if ($caption_set == "AllFiles") $caption = $caption_sql;
        elseif ($caption_set == "noAllFiles") $caption = $file['caption'] ?: $caption_sql;
        else $caption = $file['caption'];
        $sendCaption = "\n".($caption ?: '');

        $method = "send".ucfirst($file['type']);
        $res = SBoOS($method, ['chat_id'=>$from_id,$file['type']=>$file['file_id'],'caption'=>$sendCaption,'parse_mode'=>"html"]);
        $msgId = $res->result->message_id ?? null;
        $lastMsgId = $msgId;
        if ($sleep > 0 && $msgId) {
            $timeDel = time()+$sleep;
            $st = $db->prepare("INSERT INTO `del` (`id`,`from_id`,`message_id`,`timeDel`) VALUES (?,?,?,?)");
            $st->bind_param("sssi", $id, $from_id, $msgId, $timeDel);
            $st->execute();
        }
    }

    $st = $db->prepare("UPDATE `file` SET `downloads`=`downloads`+1 WHERE `id`=?");
    $st->bind_param("s", $id);
    $st->execute();
    $st = $db->prepare("UPDATE `user` SET `step`='none', `downloads`=`downloads`+1 WHERE `from_id`=?");
    $st->bind_param("s", $from_id);
    $st->execute();

    if ($sleep > 0) {
        $minutes = ceil($sleep/60);
        sendMessage($from_id, "⚠️ | پیام بالا را هر چه سریعتر به قسمت پیام های ذخیره شده خود فوروارد کنید.\n\n♻️ | این پیام تا $minutes دقیقه دیگر حذف خواهد شد.", null, null, $lastMsgId);
    }

    $adsRow = $db->query("SELECT type_id, columnOne FROM `settings` WHERE `type`='ads' LIMIT 1");
    if ($adsRow && $ads=$adsRow->fetch_assoc() && !empty($ads['type_id'])) {
        ForwardMessage($from_id, $ads['columnOne'], $ads['type_id']);
    }

    // نام فایل + دکمه دانلود مجدد
    $rawName = trim($files[0]['file_name'] ?? '');
    if ($rawName === '' || $rawName === $files[0]['id']) $rawName = trim($files[0]['caption'] ?? '');
    if ($rawName === '') $rawName = $files[0]['file_name'] ?? doc($files[0]['type'])." - ".convert($files[0]['file_size']);
    if (strlen($rawName) > 150) $rawName = substr($rawName,0,150)."...";
    $safeName = htmlspecialchars($rawName, ENT_QUOTES);
    $sizeText = convert($files[0]['file_size']);

    if (count($files) > 1) {
        $nameText = "📦 تعداد فایل‌ها: ".count($files)."\nنام : {$safeName} ✅\n💾 حجم کل: {$sizeText}";
    } else {
        $nameText = "نام : {$safeName} ✅\n💾 {$sizeText}\n📥 <code>/get_{$id}</code>";
    }
    $btnRedl = json_encode(['inline_keyboard'=>[[['text'=>"دانلود مجدد 🔄", 'callback_data'=>"redl_".$id]]]]);
    sendMessage($from_id, $nameText, "html", $btnRedl);
}

#====================== updates parsing ======================#
$update = json_decode(file_get_contents('php://input'));
$text = $update->message->text ?? $update->channel_post->text ?? null;
$chat_id = $update->message->chat->id ?? $update->callback_query->message->chat->id ?? null;
$from_id = $update->message->from->id ?? $update->callback_query->from->id ?? null;
$first_name = $update->message->from->first_name ?? $update->callback_query->from->first_name ?? 'کاربر';
$last_name = $update->message->from->last_name ?? $update->callback_query->from->last_name ?? '';
$username = $update->message->from->username ?? $update->callback_query->from->username ?? '';
$type = $update->message->chat->type ?? $update->callback_query->message->chat->type ?? $update->channel_post->chat->type ?? 'private';
$message_id = $update->message->message_id ?? $update->callback_query->message->message_id ?? 0;
$reply_message_id = $update->message->reply_to_message->message_id ?? 0;
$reply_from_id = $update->message->reply_to_message->chat->id ?? 0;
$data = $update->callback_query->data ?? '';
$callback_query_id = $update->callback_query->id ?? '';
$channel_id = $update->channel_post->chat->id ?? null;
$channel_message_id = $update->channel_post->message_id ?? null;
$profile = getUserProfilePhotos($from_id)->photos[0][0]->file_id ?? null;

if (BOT_USERNAME !== '') $usernamebot = BOT_USERNAME;
else {
    if (is_file('bot_username.txt')) $usernamebot = trim(file_get_contents('bot_username.txt'));
    else {
        $botInfo = SBoOS('getMe')->result ?? null;
        $usernamebot = $botInfo->username ?? 'Bot';
        @file_put_contents('bot_username.txt', $usernamebot, LOCK_EX);
    }
}

// user
$user = null; $step = 'none'; $user_sql = null;
if ($from_id) {
    $st = $db->prepare("SELECT * FROM `user` WHERE `from_id`=? LIMIT 1");
    $st->bind_param("s", $from_id);
    $st->execute();
    $user_sql = $st->get_result();
    $user = $user_sql->fetch_assoc();
    $step = $user['step'] ?? 'none';
}
$admin_sql = null;
if ($from_id) {
    $st = $db->prepare("SELECT type_id, columnOne FROM `settings` WHERE `type`='admin' AND `type_id`=? LIMIT 1");
    $st->bind_param("s", $from_id);
    $st->execute();
    $admin_sql = $st->get_result();
}

# init settings
if ($db->query("SELECT * FROM `send`")->num_rows == 0) $db->query("INSERT INTO `send` (`step`,`text`,`from`,`user`) VALUES ('','','',0)");
if ($db->query("SELECT * FROM `settings` WHERE `type`='caption'")->num_rows == 0) $db->query("INSERT INTO `settings` (`type`,`type_id`,`columnOne`,`columnTwo`) VALUES ('caption','','','')");
if ($db->query("SELECT * FROM `settings` WHERE `type`='seen_link'")->num_rows == 0) $db->query("INSERT INTO `settings` (`type`,`type_id`,`columnOne`,`columnTwo`) VALUES ('seen_link','','','')");
if ($db->query("SELECT * FROM `settings` WHERE `type`='ads'")->num_rows == 0) $db->query("INSERT INTO `settings` (`type`,`type_id`,`columnOne`,`columnTwo`) VALUES ('ads','','','')");
if ($db->query("SELECT * FROM `settings` WHERE `type`='del'")->num_rows == 0) $db->query("INSERT INTO `settings` (`type`,`type_id`,`columnOne`,`columnTwo`) VALUES ('del','','','')");

if (!empty($mainAdminId)) {
    $chk = $db->prepare("SELECT type_id FROM `settings` WHERE `type`='admin' AND `type_id`=?");
    $chk->bind_param("s", $mainAdminId);
    $chk->execute();
    if ($chk->get_result()->num_rows == 0) {
        $st = $db->prepare("INSERT INTO `settings` (`type`,`type_id`,`columnOne`) VALUES ('admin', ?, 'main')");
        $st->bind_param("s", $mainAdminId);
        $st->execute();
    }
}

# buttons
if ($admin_sql && $admin_sql->num_rows == 1) {
    $btn_home = json_encode(['keyboard'=>[
        [['text'=>"📥 آپلود فایل گروهی"]],
        [['text'=>"📂 تاریخچه اپلود"], ['text'=>"🎫 حساب کاربری"]],
        [['text'=>"🔐 تنظیم پسورد"], ['text'=>"🗑 حذف فایل"]],
        [['text'=>"🗂 کد پیگیری فایل"]],
        [['text'=>"👤 مدیریت"]]
    ], 'resize_keyboard'=>true]);
    $panel = json_encode(['keyboard'=>[
        [['text'=>"👤 امار ربات"]],
        [['text'=>"📫 بخش ارسال پیام"], ['text'=>"🗑 تنظیم حذف شدن"]],
        [['text'=>"🔒 بخش قفل ها"], ['text'=>"🧑🏻‍💻 بخش ادمین ها"]],
        [['text'=>"🔘 حالت آپلود"], ['text'=>"📤 آپلود متن"]],
        [['text'=>"📤 حذف متن"]],
        [['text'=>"📣 بخش تبلیغات"], ['text'=>"🔙 بازگشت"]],
        [['text'=>"📣 ارسال بنر به چنل"]],
    ], 'resize_keyboard'=>true]);
} else {
    if ($upmode == 'on') {
        $btn_home = json_encode(['keyboard'=>[
            [['text'=>"📥 آپلود فایل گروهی"]],
            [['text'=>"📂 تاریخچه اپلود"], ['text'=>"🎫 حساب کاربری"]],
            [['text'=>"🔐 تنظیم پسورد"], ['text'=>"🗑 حذف فایل"]],
            [['text'=>"🗂 کد پیگیری فایل"]]
        ], 'resize_keyboard'=>true]);
    } else {
        $btn_home = json_encode(['keyboard'=>[[['text'=>"🎫 حساب کاربری"]]], 'resize_keyboard'=>true]);
    }
    $panel = json_encode(['keyboard'=>[
        [['text'=>"👤 امار ربات"]],
        [['text'=>"📫 بخش ارسال پیام"], ['text'=>"🗑 تنظیم حذف شدن"]],
        [['text'=>"🔒 بخش قفل ها"], ['text'=>"🧑🏻‍💻 بخش ادمین ها"]],
        [['text'=>"🔘 حالت آپلود"], ['text'=>"📤 آپلود متن"]],
        [['text'=>"📤 حذف متن"]],
        [['text'=>"📣 بخش تبلیغات"], ['text'=>"🔙 بازگشت"]],
        [['text'=>"📣 ارسال بنر به چنل"]],
    ], 'resize_keyboard'=>true]);
}
$back_panel = json_encode(['keyboard'=>[[['text'=>"برگشت 🔙"]]], 'resize_keyboard'=>true]);
$btn_back = json_encode(['keyboard'=>[[['text'=>"🔙 بازگشت"]]], 'resize_keyboard'=>true]);
$btn_end = json_encode(['keyboard'=>[[['text'=>"🗄 اتمام اپلود"]]], 'resize_keyboard'=>true]);
$remove = json_encode(['remove_keyboard'=>true]);

#====================== lock add via /lock_ ======================#
if ($text && preg_match('/^\/lock_(.*)/', $text, $match)) {
    $random = preg_replace('/[^A-Za-z0-9]/','',$match[1]);
    if ($type == "channel") { $lock_id = $channel_id; $lock_message_id = $channel_message_id; }
    elseif ($type == "group" || $type == "supergroup") { $lock_id = $chat_id; $lock_message_id = $message_id; }
    else $lock_id = null;
    if ($lock_id) {
        $st = $db->prepare("SELECT * FROM `settings` WHERE `type`='lock' AND `type_id`='false' AND `columnOne`=? LIMIT 1");
        $st->bind_param("s", $random);
        $st->execute();
        $new_lock = $st->get_result()->fetch_assoc();
        if ($new_lock) {
            $chk = $db->prepare("SELECT type_id FROM `settings` WHERE `type`='lock' AND `type_id`=?");
            $chk->bind_param("s", $lock_id);
            $chk->execute();
            if ($chk->get_result()->num_rows == 0) {
                $up = $db->prepare("UPDATE `settings` SET `type_id`=? WHERE `type`='lock' AND `type_id`='false' AND `columnOne`=?");
                $up->bind_param("ss", $lock_id, $random);
                $up->execute();
                $lock_data = getChat($lock_id)->result ?? null;
                $lock_title = $lock_data->title ?? $lock_id;
                $owner = getMainAdminId();
                if ($owner) sendMessage($owner, "✅ قفل با موفقیت اضافه شد.\n📑 نام: {$lock_title}\n🆔 {$lock_id}");
                deleteMessage($lock_id, $lock_message_id);
            }
        }
    }
}

#====================== insert user ======================#
if ($from_id && $type == "private") {
    $chk = $db->prepare("SELECT from_id FROM `user` WHERE `from_id`=? LIMIT 1");
    $chk->bind_param("s", $from_id);
    $chk->execute();
    if ($chk->get_result()->num_rows == 0) {
        $st = $db->prepare("INSERT INTO `user`(`from_id`,`step`,`downloads`,`getFile`,`spam`) VALUES (?, 'none', 0, '', '0|0')");
        $st->bind_param("s", $from_id);
        $st->execute();
        $st2 = $db->prepare("SELECT * FROM `user` WHERE `from_id`=? LIMIT 1");
        $st2->bind_param("s", $from_id);
        $st2->execute();
        $user = $st2->get_result()->fetch_assoc();
        $step = 'none';
    }
    $st = $db->prepare("UPDATE `user` SET `update_at`=? WHERE `from_id`=?");
    $st->bind_param("is", $timeNow, $from_id);
    $st->execute();
}
if ($from_id && !preg_match('/^upload_/', $step)) Spam($from_id);

#====================== main handlers ======================#
if ($text && (preg_match('/^\/start get_(.*)/', $text, $match) || preg_match('/^\/get_(.*)/', $text, $match))) {
    $id = preg_replace('/[^A-Za-z0-9]/','',$match[1]);
    if (isJoin($from_id)) send($from_id, $message_id, $id, 'send');
    else joinSend($from_id, $id);
    exit;
}
if ($text && (preg_match('/^\/start tx_(.*)/', $text, $match) || preg_match('/^\/tx_(.*)/', $text, $match))) {
    $id = preg_replace('/[^A-Za-z0-9]/','',$match[1]);
    if (isJoin($from_id)) {
        $dataT = texup(1,$id);
        if (!$dataT) sendMessage($from_id, "متن یافت نشد", "markdown", $btn_home);
        else {
            sendMessage($from_id, $dataT, "html", $btn_home);
            $btn = json_encode(['inline_keyboard'=>[[['text'=>"🔄 دانلود مجدد", 'callback_data'=>"tx_".$id]]]]);
            sendMessage($from_id, "نام : {$id}.txt ✅", "html", $btn);
        }
    } else joinSend2($from_id, $id);
    exit;
}
if ($data && preg_match('/^seenDone_(.*)_(.*)/', $data, $match)) {
    if (intval($match[2]) < time()) send($from_id, $message_id, preg_replace('/[^A-Za-z0-9]/','',$match[1]), 'seen');
    else answercallbackquery($callback_query_id, "❌ لطفا پست ها را به ارامی مشاهده کنید");
    exit;
}
if ($data && preg_match('/^redl_(.*)/', $data, $match)) {
    $id = preg_replace('/[^A-Za-z0-9]/','',$match[1]);
    if (isJoin($from_id)) send($from_id, $message_id, $id, 'send');
    else joinSend($from_id, $id);
    exit;
}
if ($data && preg_match('/^join_(.*)/', $data, $match)) {
    $id = preg_replace('/[^A-Za-z0-9]/','',$match[1]);
    if (isJoin($from_id)) {
        deleteMessage($from_id, $message_id);
        if ($id) send($from_id, null, $id, 'send');
        else sendMessage($from_id, "👤 سلام `$first_name`\n🤖 به ربات آپلودک خوش امدید!\n\n📥 فایل بفرست\n\n🤖 @$usernamebot", 'markdown', $btn_home);
    } else {
        answercallbackquery($callback_query_id, "❌ شما هنوز عضو کانال های ربات نیستید");
        $lockSQL = $db->prepare("SELECT type_id, columnTwo FROM `settings` WHERE `type`='lock' AND `type_id`!='false'");
        $lockSQL->execute();
        $res = $lockSQL->get_result();
        $button = [];
        while ($row = $res->fetch_assoc()) {
            $lock = getChat($row['type_id']);
            if (!isset($lock->result)) continue;
            $link = $row['columnTwo'] ?: ($lock->result->invite_link ?? '');
            $title = $lock->result->title ?? 'کانال';
            $st = getChatMember($row['type_id'], $from_id);
            $status = $st->result->status ?? 'left';
            if ($status == 'left' && $link) $button[] = [['text'=>$title, 'url'=>$link]];
        }
        $button[] = [['text'=>"عضو شدم | دانلود ✅", 'callback_data'=>"join_".$id]];
        editMessageText($from_id, $message_id, "❓ برای استفاده از ربات عضو کانال های ما شوید.\n\n💡 پس عضویت بر روی « عضو شدم » کلیک کنید", null, json_encode(['inline_keyboard'=>$button]));
    }
    exit;
}
if ($data && preg_match('/^tx_(.*)/', $data, $match)) {
    $id = preg_replace('/[^A-Za-z0-9]/','',$match[1]);
    if (isJoin($from_id)) {
        deleteMessage($from_id, $message_id);
        $dataT = texup(1,$id);
        if ($dataT) {
            sendMessage($from_id, $dataT, "html", $btn_home);
            $btn = json_encode(['inline_keyboard'=>[[['text'=>"🔄 دانلود مجدد", 'callback_data'=>"tx_".$id]]]]);
            sendMessage($from_id, "نام : {$id}.txt ✅", "html", $btn);
        }
    } else {
        answercallbackquery($callback_query_id, "❌ شما هنوز عضو کانال های ربات نیستید");
        joinSend2($from_id, $id);
    }
    exit;
}
if ($text == '/start') {
    sendMessage($from_id, "👤 سلام `$first_name`\n🤖 به ربات آپلودک خوش امدید!\n\n🏷 اپلود رایگان و دائم فایل ها بدون هیچ محدودیت زمانی !\n\n🚦 شما میتوانید ( عکس , فیلم , گیف , استیکر و ... ) در ربات اپلود کنید همراه با نمایش تعداد دانلود های فایل شما ... !\n\n▪️ شما میتوانید تا سقف یک گیگابایت (2GB) فایل اپلود کنید و لینک فایل خودتون رو دریافت کنید\n\n🔐 دقت کنید که میتوانید برای لینک فایل های خودتون رمز بگزارید\n\n📤 همین الان یه فایل بفرس تا آپلود بشه و لذتشو ببر !\n\n🤖 @$usernamebot", 'markdown', $btn_home, $message_id);
    $st = $db->prepare("UPDATE `user` SET `step`='none', `getFile`='' WHERE `from_id`=?");
    $st->bind_param("s", $from_id);
    $st->execute();
    exit;
}
if ($text == '🔙 بازگشت') {
    sendMessage($from_id, "🌼 به منوی اصلی برگشتیم", 'markdown', $btn_home, $message_id);
    $st = $db->prepare("UPDATE `user` SET `step`='none', `getFile`='' WHERE `from_id`=?");
    $st->bind_param("s", $from_id);
    $st->execute();
    exit;
}
if ($step == 'password') {
    $id = $user['getFile'] ?? '';
    if (isJoin($from_id)) send($from_id, $message_id, $id, 'pass');
    else joinSend($from_id, $id);
    exit;
}
if ($text == "🗑 حذف فایل") {
    if (isJoin($from_id)) {
        sendMessage($from_id, "▪️لطفا شناسه فایل خود را ارسال کنید :", 'markdown', $btn_back, $message_id);
        $st = $db->prepare("UPDATE `user` SET `step`='remove' WHERE `from_id`=?");
        $st->bind_param("s", $from_id);
        $st->execute();
    } else joinSend($from_id);
    exit;
}
if ($step == 'remove') {
    if (isJoin($from_id)) {
        $st = $db->prepare("SELECT id FROM `file` WHERE `user_id`=? AND `id`=? LIMIT 1");
        $st->bind_param("ss", $from_id, $text);
        $st->execute();
        if ($st->get_result()->num_rows > 0) {
            $del = $db->prepare("DELETE FROM `file` WHERE `id`=? AND `user_id`=?");
            $del->bind_param("ss", $text, $from_id);
            $del->execute();
            sendMessage($from_id, "✔️ فایل با موفقیت حذف شد", 'markdown', $btn_home, $message_id);
            $st2 = $db->prepare("UPDATE `user` SET `step`='none' WHERE `from_id`=?");
            $st2->bind_param("s", $from_id);
            $st2->execute();
        } else sendMessage($from_id, "▪️ این فایل مال شما نیست یا وجود ندارد", 'markdown', $btn_back, $message_id);
    } else joinSend($from_id);
    exit;
}
if ($text == "🗂 کد پیگیری فایل") {
    if (isJoin($from_id)) {
        sendMessage($from_id, "▪️لطفا شناسه فایل خود را ارسال کنید :", 'markdown', $btn_back, $message_id);
        $st = $db->prepare("UPDATE `user` SET `step`='checkfile' WHERE `from_id`=?");
        $st->bind_param("s", $from_id);
        $st->execute();
    } else joinSend($from_id);
    exit;
}
if ($step == "checkfile") {
    if (isJoin($from_id)) {
        $st = $db->prepare("SELECT * FROM `file` WHERE `user_id`=? AND `id`=?");
        $st->bind_param("ss", $from_id, $text);
        $st->execute();
        $qr = $st->get_result()->fetch_assoc();
        if ($qr) {
            $fs = convert($qr['file_size']);
            $fname = $qr['file_name'] ?? $qr['id'];
            $ft = doc($qr['type']);
            $cap = $qr['caption'] ?: 'بدون توضیح';
            $pass = $qr['password'] ?: 'بدون رمز';
            sendMessage($from_id, "▪️ شناسه: <code>{$qr['id']}</code>\n📛 نام: {$fname}\n💾 حجم: <b>$fs</b>\n▪️ نوع: <b>$ft</b>\n🔐 رمز: <code>$pass</code>\n📝 توضیح: <code>$cap</code>\n\n📥 https://t.me/$usernamebot?start=get_{$qr['id']}\n🤖 @$usernamebot", "html", $btn_home, $message_id);
            $st2 = $db->prepare("UPDATE `user` SET `step`='none' WHERE `from_id`=?");
            $st2->bind_param("s", $from_id);
            $st2->execute();
        } else sendMessage($from_id, "▪️ فایل یافت نشد", "markdown", $btn_back, $message_id);
    } else joinSend($from_id);
    exit;
}
if ($data && preg_match('/^editCaption_(.*)/', $data, $match)) {
    $id = preg_replace('/[^A-Za-z0-9]/','',$match[1]);
    $st = $db->prepare("SELECT caption FROM `file` WHERE `id`=? LIMIT 1");
    $st->bind_param("s", $id);
    $st->execute();
    $cap = $st->get_result()->fetch_assoc()['caption'] ?? '';
    sendMessage($from_id, "کپشن قبلی:\n<code>$cap</code>\n\n▪️لطفا کپشن جدید را ارسال کنید :", 'html', $btn_back, $message_id);
    $tmp = "editCaption_$id";
    $st2 = $db->prepare("UPDATE `user` SET `step`=? WHERE `from_id`=?");
    $st2->bind_param("ss", $tmp, $from_id);
    $st2->execute();
    exit;
}
if (preg_match('/^editCaption_(.*)/', $step, $match)) {
    $id = preg_replace('/[^A-Za-z0-9]/','',$match[1]);
    if ($text) {
        $st = $db->prepare("UPDATE `file` SET `caption`=? WHERE `id`=?");
        $st->bind_param("ss", $text, $id);
        $st->execute();
        sendMessage($from_id, "✅ کپشن با موفقیت تنظیم شد.", 'markdown', $btn_home, $message_id);
        $st2 = $db->prepare("UPDATE `user` SET `step`='none' WHERE `from_id`=?");
        $st2->bind_param("s", $from_id);
        $st2->execute();
    }
    exit;
}
if ($data && preg_match('/^delCaption_(.*)/', $data, $match)) {
    $id = preg_replace('/[^A-Za-z0-9]/','',$match[1]);
    $st = $db->prepare("SELECT caption FROM `file` WHERE `id`=? LIMIT 1");
    $st->bind_param("s", $id);
    $st->execute();
    $row = $st->get_result()->fetch_assoc();
    if (!empty($row['caption'])) {
        $st2 = $db->prepare("UPDATE `file` SET `caption`='' WHERE `id`=?");
        $st2->bind_param("s", $id);
        $st2->execute();
        answercallbackquery($callback_query_id, "✅ کپشن با موفقیت حذف شد.");
    } else answercallbackquery($callback_query_id, "❌ فایل شما کپشنی ندارد.");
    exit;
}
if ($text == "🎫 حساب کاربری") {
    if (isJoin($from_id)) {
        $cnt = $db->prepare("SELECT COUNT(*) as c FROM `file` WHERE `user_id`=?");
        $cnt->bind_param("s", $from_id);
        $cnt->execute();
        $countFile = $cnt->get_result()->fetch_assoc()['c'] ?? 0;
        $btn_profile = json_encode(['inline_keyboard'=>[
            [['text'=>"📤 تعداد فایل اپلود شده", 'callback_data'=>"countFile"], ['text'=>$countFile, 'callback_data'=>"countFile"]],
            [['text'=>"📲 تعداد دانلود شده", 'callback_data'=>"downloads"], ['text'=>$user['downloads'] ?? 0, 'callback_data'=>"downloads"]],
        ]]);
        if ($profile) {
            SBoOS('SendPhoto', ['chat_id'=>$from_id,'photo'=>$profile,'caption'=>"💭 حساب کاربری شما در ربات ما :\n\n👤 نام کانت شما : <code>$first_name</code>\n🆔 ایدی عددی شما : <code>$from_id</code>\n\n🤖 @$usernamebot",'reply_markup'=>$btn_profile,'parse_mode'=>"html",'reply_to_message_id'=>$message_id]);
        } else sendMessage($from_id, "💭 حساب کاربری شما در ربات ما :\n\n👤 نام کانت شما : <code>$first_name</code>\n🆔 ایدی عددی شما : <code>$from_id</code>\n\n🤖 @$usernamebot", "html", $btn_profile, $message_id);
    } else joinSend($from_id);
    exit;
}
if ($text == "📂 تاریخچه اپلود") {
    if (isJoin($from_id)) {
        $st = $db->prepare("SELECT * FROM `file` WHERE `user_id`=? ORDER BY date DESC, time DESC");
        $st->bind_param("s", $from_id);
        $st->execute();
        $query = $st->get_result();
        $count = $query->num_rows;
        if ($count > 0) {
            $result = "📂 تاریخچه اپلود های شما :\n📍 تعداد فایل های اپلود شده ی شما : $count\n➖ ➖ ➖ ➖ ➖ ➖ ➖ ➖ ➖\n\n";
            $cnt = min($count, 10);
            for ($i=1;$i<=$cnt;$i++) {
                $fetch = $query->fetch_assoc();
                $fs = convert($fetch['file_size']);
                $ft = doc($fetch['type']);
                $result .= $i.". 📥 /get_".$fetch['id']."\n💾 $fs\n✏️ ویرایش : /edit_".$fetch['id']."\n🗑 حذف : /del_".$fetch['id']."\n▪️ نوع فایل : <b>$ft</b>\n📛 نام: ".($fetch['file_name'] ?? $fetch['id'])."\n➖ ➖ ➖ ➖ ➖ ➖ ➖ ➖ ➖\n";
            }
            if ($count > 10) sendMessage($from_id, $result, "html", json_encode(['inline_keyboard'=>[[['text'=>"▪️ صفحه ی بعدی", 'callback_data'=>"Dnext_10"]]]]), $message_id);
            else sendMessage($from_id, $result, "html", null, $message_id);
        } else sendMessage($from_id, "▪️ تاریخچه اپلود شما خالی میباشد ... !", "html", null, $message_id);
    } else joinSend($from_id);
    exit;
}
if ($data && preg_match('/^Dnext_(.*)/', $data, $match)) {
    $last_id = intval($match[1]);
    if (isJoin($from_id)) {
        $st = $db->prepare("SELECT * FROM `file` WHERE `user_id`=? ORDER BY date DESC, time DESC");
        $st->bind_param("s", $from_id);
        $st->execute();
        $all = $st->get_result()->fetch_all(MYSQLI_ASSOC);
        $count = count($all);
        $end = min($last_id+10, $count);
        $result = "📂 تاریخچه اپلود های شما :\n📍 تعداد فایل های اپلود شده ی شما : $count\n➖ ➖ ➖ ➖ ➖ ➖ ➖ ➖ ➖\n\n";
        for ($row=$last_id;$row<$end;$row++) {
            $fs = convert($all[$row]['file_size']);
            $result .= ($row+1).". 📥 /get_".$all[$row]['id']."\n💾 $fs\n📛 نام: ".($all[$row]['file_name'] ?? $all[$row]['id'])."\n➖ ➖ ➖ ➖ ➖ ➖ ➖ ➖ ➖\n";
        }
        if ($count > $last_id+10) editMessageText($from_id, $message_id, $result, "html", json_encode(['inline_keyboard'=>[[['text'=>"➕ صفحه بعدی", 'callback_data'=>"Dnext_".$end], ['text'=>"➖ صفحه ی قبلی", 'callback_data'=>"Dprev_".$end]]]]));
        else editMessageText($from_id, $message_id, $result, "html", json_encode(['inline_keyboard'=>[[['text'=>"➖ صفحه ی قبلی", 'callback_data'=>"Dprev_".$end]]]]));
    }
    exit;
}
if ($data && preg_match('/^Dprev_(.*)/', $data, $match)) {
    $last_id = intval($match[1]);
    if (isJoin($from_id)) {
        $st = $db->prepare("SELECT * FROM `file` WHERE `user_id`=? ORDER BY date DESC, time DESC");
        $st->bind_param("s", $from_id);
        $st->execute();
        $all = $st->get_result()->fetch_all(MYSQLI_ASSOC);
        $count = count($all);
        $start = max(0, $last_id-20);
        $end = $last_id-10;
        if ($last_id % 10 != 0) { $start = max(0, $last_id - ($last_id % 10) -10); $end = $start+10; }
        $result = "📂 تاریخچه اپلود های شما :\n📍 تعداد فایل های اپلود شده ی شما : $count\n➖ ➖ ➖ ➖ ➖ ➖ ➖ ➖ ➖\n\n";
        for ($row=$start;$row<$end && $row<$count;$row++) {
            $fs = convert($all[$row]['file_size']);
            $result .= ($row+1).". 📥 /get_".$all[$row]['id']."\n💾 $fs\n📛 نام: ".($all[$row]['file_name'] ?? $all[$row]['id'])."\n➖ ➖ ➖ ➖ ➖ ➖ ➖ ➖ ➖\n";
        }
        if ($end-10 > 0) editMessageText($from_id, $message_id, $result, "html", json_encode(['inline_keyboard'=>[[['text'=>"➕ صفحه بعدی", 'callback_data'=>"Dnext_".$end], ['text'=>"➖ صفحه ی قبلی", 'callback_data'=>"Dprev_".$end]]]]));
        else editMessageText($from_id, $message_id, $result, "html", json_encode(['inline_keyboard'=>[[['text'=>"➕ صفحه بعدی", 'callback_data'=>"Dnext_".$end]]]]));
    }
    exit;
}
if ($text == "🔐 تنظیم پسورد") {
    if (isJoin($from_id)) {
        sendMessage($from_id, "▪️ لطفا شناسه فایل خود را ارسال کنید :", "markdown", $btn_back, $message_id);
        $st = $db->prepare("UPDATE `user` SET `step`='sendid' WHERE `from_id`=?");
        $st->bind_param("s", $from_id);
        $st->execute();
    } else joinSend($from_id);
    exit;
}
if ($step == "sendid") {
    $st = $db->prepare("SELECT id FROM `file` WHERE `user_id`=? AND `id`=? LIMIT 1");
    $st->bind_param("ss", $from_id, $text);
    $st->execute();
    if ($st->get_result()->num_rows > 0) {
        sendMessage($from_id, "▪️لطفا پسورد دلخواه رو بفرستید تا فایل شما قفل شود :", "markdown", $btn_back, $message_id);
        $st2 = $db->prepare("UPDATE `user` SET `step`='sendPassword', `getFile`=? WHERE `from_id`=?");
        $st2->bind_param("ss", $text, $from_id);
        $st2->execute();
    } else sendMessage($from_id, "▪️ خطا , این فایل در دیتابیس موجود نمیباشد یا فایل مال شخص دیگری میباشد و  شما اجازه دسترسی به این فایل را ندارید ... !\n🔐 لطفا شناسه فایل را صحیح بفرستید :", "markdown", $btn_back, $message_id);
    exit;
}
if ($step == "sendPassword") {
    $id = $user['getFile'] ?? '';
    $st = $db->prepare("UPDATE `file` SET `password`=? WHERE `id`=? AND `user_id`=?");
    $st->bind_param("sss", $text, $id, $from_id);
    $st->execute();
    sendMessage($from_id, "✔️ با موفقیت فایل شما قفل شد ... !", "markdown", $btn_home, $message_id);
    $st2 = $db->prepare("UPDATE `user` SET `step`='none', `getFile`='' WHERE `from_id`=?");
    $st2->bind_param("s", $from_id);
    $st2->execute();
    exit;
}
if ($text && preg_match('/^\/edit_(.*)/', $text, $match)) {
    $id = preg_replace('/[^A-Za-z0-9]/','',$match[1]);
    $st = $db->prepare("SELECT id FROM `file` WHERE `id`=? AND `user_id`=? LIMIT 1");
    $st->bind_param("ss", $id, $from_id);
    $st->execute();
    if ($st->get_result()->num_rows > 0) {
        sendMessage($from_id, "برای ویرایش اطلاعات فایلی با ایدی زیر از دکمه های زیر استفاده کنید :\n📥 /get_".$id, "html", json_encode(['inline_keyboard'=>[[['text'=>"📋 تغییر کپشن", 'callback_data'=>"editCaption_$id"]],[['text'=>"🗑 حذف کپشن", 'callback_data'=>"delCaption_$id"]]]]), $message_id);
    } else sendMessage($from_id, "❌ فایل در دیتابیس یافت نشد.", null, null, $message_id);
    exit;
}
if ($text && preg_match('/^\/del_(.*)/', $text, $match)) {
    $id = preg_replace('/[^A-Za-z0-9]/','',$match[1]);
    $st = $db->prepare("SELECT id FROM `file` WHERE `id`=? LIMIT 1");
    $st->bind_param("s", $id);
    $st->execute();
    if ($st->get_result()->num_rows > 0) {
        $del = $db->prepare("DELETE FROM `file` WHERE `id`=? AND `user_id`=?");
        $del->bind_param("ss", $id, $from_id);
        $del->execute();
        if ($del->affected_rows > 0) sendMessage($from_id, "✅ فایل با موفقیت حذف شد.", null, $btn_home, $message_id);
        else sendMessage($from_id, "❌ شما اجازه حذف این فایل را ندارید", null, $btn_home, $message_id);
    } else sendMessage($from_id, "❌ فایل در دیتابیس یافت نشد.", null, null, $message_id);
    exit;
}

#====================== پنل ادمین کامل ======================#
if ($admin_sql && $admin_sql->num_rows > 0) {
    $admin_data = $db->query("SELECT type_id, columnOne FROM `settings` WHERE `type`='admin' AND `type_id`='$from_id' LIMIT 1")->fetch_assoc();
    $isMain = ($admin_data['columnOne'] ?? '') == 'main';

    $set_ads_btn = json_encode(['inline_keyboard'=>[
        [['text'=>"📝 کپشن فایل ها", 'callback_data'=>"show_caption"]],
        [['text'=>"👀 لینک سین اجباری", 'callback_data'=>"show_seenLink"]],
        [['text'=>"✉️ ارسال تبلیغ", 'callback_data'=>"show_ads"]],
        [['text'=>"🔙 بازگشت", 'callback_data'=>"panel"]]
    ]]);

    if ($text == '/panel' || $text == '👤 مدیریت') {
        sendMessage($from_id, "👤 به منوی مدیریت ربات خود خوش امدید", "markdown", $panel, $message_id);
        $st = $db->prepare("UPDATE `user` SET `step`='none' WHERE `from_id`=?");
        $st->bind_param("s", $from_id);
        $st->execute();
        exit;
    }
    if ($text == 'برگشت 🔙' || $data == "panel") {
        if ($data) deleteMessage($from_id, $message_id);
        sendMessage($from_id, "▪️ به منوی مدیریت بازگشتید :", "markdown", $panel, $message_id);
        $st = $db->prepare("UPDATE `user` SET `step`='none' WHERE `from_id`=?");
        $st->bind_param("s", $from_id);
        $st->execute();
        exit;
    }
    if ($text == '👤 امار ربات') {
        $countUsers = number_format($db->query("SELECT COUNT(*) as c FROM `user`")->fetch_assoc()['c'] ?? 0);
        $countFiles = number_format($db->query("SELECT COUNT(*) as c FROM `file`")->fetch_assoc()['c'] ?? 0);
        $countAdmins = number_format($db->query("SELECT COUNT(*) as c FROM `settings` WHERE `type`='admin'")->fetch_assoc()['c'] ?? 0);
        $countChannels = number_format($db->query("SELECT COUNT(*) as c FROM `settings` WHERE `type`='lock' AND `type_id`!='false'")->fetch_assoc()['c'] ?? 0);
        $countOnlinesNow = number_format($db->query("SELECT COUNT(*) as c FROM `user` WHERE `update_at` > ".($timeNow-60))->fetch_assoc()['c'] ?? 0);
        $countOnlinesClock = number_format($db->query("SELECT COUNT(*) as c FROM `user` WHERE `update_at` > ".($timeNow-3600))->fetch_assoc()['c'] ?? 0);
        $countOnlinesDay = number_format($db->query("SELECT COUNT(*) as c FROM `user` WHERE `update_at` > ".($timeNow-86400))->fetch_assoc()['c'] ?? 0);
        $countOnlinesWeek = number_format($db->query("SELECT COUNT(*) as c FROM `user` WHERE `update_at` > ".($timeNow-604800))->fetch_assoc()['c'] ?? 0);
        $countOnlinesMonth = number_format($db->query("SELECT COUNT(*) as c FROM `user` WHERE `update_at` > ".($timeNow-2419200))->fetch_assoc()['c'] ?? 0);
        $timeShow = date('h:i:s'); $dateShow = date('Y/m/d');
        $msg = "🤖 امار شما در ساعت `$timeShow` و تاریخ `$dateShow` به این صورت میباشد \n\n👥 تعداد اعضا : `$countUsers`\n👀 تعداد کاربران آنلاین : `$countOnlinesNow`\n🕒 تعداد کاربران ساعت گذشته : `$countOnlinesClock`\n☪️ تعداد کاربران 24 ساعت گذشته : `$countOnlinesDay`\n7️⃣ تعداد کاربران هفته گذشته : `$countOnlinesWeek`\n🌛 تعداد کاربران ماه گذشته : `$countOnlinesMonth`\n🗂 تعداد فایل ها : `$countFiles`\n👨🏻‍💻 تعداد ادمین ها : `$countAdmins`\n📢 تعداد کانال ها :`$countChannels`";
        sendMessage($from_id, $msg, "markdown", $panel, $message_id);
        exit;
    }
    if ($text == "📫 بخش ارسال پیام") {
        sendMessage($from_id, "به بخش ( 📫 بخش ارسال پیام ) خوش امدید لطفا با استفاده از دکمه های زیر ادامه دهید.", "markdown", json_encode(['keyboard'=>[[['text'=>"📪 ارسال به همه"], ['text'=>"📪 فوروارد به همه"]],[['text'=>"برگشت 🔙"]]], 'resize_keyboard'=>true]), $message_id);
        exit;
    }
    if ($text == '📪 ارسال به همه') {
        sendMessage($from_id, "▪️ لطفا پیام خود را ارسال کنید :\nمیتوانید در قالب html ارسال کنید", "markdown", $back_panel, $message_id);
        $st = $db->prepare("UPDATE `user` SET `step`='sendAll' WHERE `from_id`=?");
        $st->bind_param("s", $from_id);
        $st->execute();
        exit;
    }
    if ($step == 'sendAll') {
        $enc = urlencode($text);
        $st = $db->prepare("UPDATE `user` SET `step`='none' WHERE `from_id`=?");
        $st->bind_param("s", $from_id);
        $st->execute();
        sendMessage($from_id, "✔️ پیام شما با موفقیت برای ارسال همگانی تنظیم شد", "markdown", $panel, $message_id);
        $st2 = $db->prepare("UPDATE `send` SET `step`='send', `text`=?, `from`=?, `user`='0' LIMIT 1");
        $st2->bind_param("sss", $enc, $from_id, $from_id);
        $st2->execute();
        exit;
    }
    if ($text == '📪 فوروارد به همه') {
        sendMessage($from_id, "▪️ لطفا پیام خود را ارسال کنید :", "markdown", $back_panel, $message_id);
        $st = $db->prepare("UPDATE `user` SET `step`='forAll' WHERE `from_id`=?");
        $st->bind_param("s", $from_id);
        $st->execute();
        exit;
    }
    if ($step == 'forAll') {
        $st = $db->prepare("UPDATE `user` SET `step`='none' WHERE `from_id`=?");
        $st->bind_param("s", $from_id);
        $st->execute();
        sendMessage($from_id, "✔️ پیام شما با موفقیت برای ارسال همگانی تنظیم شد", "markdown", $panel, $message_id);
        $mid = strval($message_id);
        $st2 = $db->prepare("UPDATE `send` SET `step`='for', `text`=?, `from`=?, `user`='0' LIMIT 1");
        $st2->bind_param("sss", $mid, $from_id, $from_id);
        $st2->execute();
        exit;
    }
    if ($text == '🔒 بخش قفل ها' || $data == "manage_locks") {
        $lockSQL = $db->query("SELECT type_id, columnTwo FROM `settings` WHERE `type`='lock' AND `type_id`!='false'");
        $button = [];
        if ($lockSQL->num_rows > 0) {
            $lockText = "☑️ به بخش (🔒 بخش قفل ها) خوش امدید\n\n🚦 راهنما :\n1 - 👁 برای مشاهده ی هر کدام روی اسم ان بزنید.\n2 - برای حذف هر کدام روی دکمه ی ( 🗑 ) بزنید\n3 - 🔗 برای تعییر لینک روی دکمه ی ( ⚙️ ) بزنید \n4 - برای افزودن قفل روی دکمه ی ( ➕ افزودن قفل ) بزنید";
            $button[] = [['text'=>'🗝 نام قفل', 'callback_data'=>'none'], ['text'=>'⚙️ تغییر لینک', 'callback_data'=>'none'], ['text'=>'🗑 حذف', 'callback_data'=>'none']];
            while ($row = $lockSQL->fetch_assoc()) {
                $lock = getChat($row['type_id']);
                $name = $lock->result->title ?? $row['type_id'];
                $link = $row['columnTwo'] ?: ($lock->result->invite_link ?? 'https://t.me/username');
                if (empty($row['columnTwo']) && empty($lock->result->invite_link ?? '')) { $name='دسترسی ندارد'; $link='https://t.me/username'; }
                $button[] = [['text'=>"$name", 'url'=>"$link"], ['text'=>'⚙️', 'callback_data'=>"change_lock_{$row['type_id']}"], ['text'=>'🗑', 'callback_data'=>"remove_lock_{$row['type_id']}"]];
            }
        } else {
            $lockText = '❌ شما قفلی برای حذف و مشاهده ندارید لطفا از طریق دکمه ی ( ➕ افزودن قفل ) اضافه کنید.';
        }
        $button[] = [['text'=>'➕ افزودن قفل', 'callback_data'=>'addLock'], ['text'=>'(🔙) برگشت', 'callback_data'=>'panel']];
        if ($data) editMessageText($from_id, $message_id, $lockText, null, json_encode(['inline_keyboard'=>$button]));
        else sendMessage($from_id, $lockText, null, json_encode(['inline_keyboard'=>$button]), $message_id);
        exit;
    }
    if ($data == 'addLock') {
        $random = random_secure(10);
        editMessageText($from_id, $message_id, "برای افزودن قفل(کانال یا گروه) طبق مراحل زیر پیش بروید👇\n1️⃣ ربات را در (کانال یا گروه) مورد نظر ادمین کنید.\n2️⃣ دستور زیر را کپی و در (کانال یا گروه) ارسال کنید.\n<code>/lock_$random</code>\n☑️ اگر پیام شما حذف شد به معنای اضافه شدن کانال شما است.", "html", json_encode(['inline_keyboard'=>[[['text'=>"🔙 بازگشت", 'callback_data'=>"manage_locks"]]]]));
        $db->query("DELETE FROM `settings` WHERE `type_id`='false'");
        $st = $db->prepare("INSERT INTO `settings` (`type`,`type_id`,`columnOne`,`columnTwo`) VALUES ('lock','false',?, '')");
        $st->bind_param("s", $random);
        $st->execute();
        exit;
    }
    if ($data && preg_match('/^remove_lock_(.*)/', $data, $match)) {
        answercallbackquery($callback_query_id, "✅ با موفقیت حذف شد");
        $lid = $match[1];
        $st = $db->prepare("DELETE FROM `settings` WHERE `type`='lock' AND `type_id`=?");
        $st->bind_param("s", $lid);
        $st->execute();
        $lockSQL = $db->query("SELECT type_id, columnTwo FROM `settings` WHERE `type`='lock' AND `type_id`!='false'");
        $button = [];
        if ($lockSQL->num_rows > 0) {
            $locksText = "☑️ به بخش (🔒 بخش قفل ها) خوش امدید\n\n🚦 راهنما :\n1 - 👁 برای مشاهده ی هر کدام روی اسم ان بزنید.\n2 - برای حذف هر کدام روی دکمه ی ( 🗑 ) بزنید\n3 - 🔗 برای تعییر لینک روی دکمه ی ( ⚙️ ) بزنید \n4 - برای افزودن قفل روی دکمه ی ( ➕ افزودن قفل ) بزنید";
            $button[] = [['text'=>'🗝 نام قفل', 'callback_data'=>'none'], ['text'=>'⚙️ تغییر لینک', 'callback_data'=>'none'], ['text'=>'🗑 حذف', 'callback_data'=>'none']];
            while ($row = $lockSQL->fetch_assoc()) {
                $lock = getChat($row['type_id']);
                $name = $lock->result->title ?? $row['type_id'];
                $link = $row['columnTwo'] ?: ($lock->result->invite_link ?? 'https://t.me/username');
                if (empty($link)) { $name='دسترسی ندارد'; $link='https://t.me/username'; }
                $button[] = [['text'=>"$name", 'url'=>"$link"], ['text'=>'⚙️', 'callback_data'=>"change_lock_{$row['type_id']}"], ['text'=>'🗑', 'callback_data'=>"remove_lock_{$row['type_id']}"]];
            }
        } else {
            $locksText = '❌ شما قفلی برای حذف و مشاهده ندارید لطفا از طریق دکمه ی ( ➕ افزودن قفل ) اضافه کنید.';
        }
        $button[] = [['text'=>'➕ افزودن قفل', 'callback_data'=>'addLock'], ['text'=>'(🔙) برگشت', 'callback_data'=>'panel']];
        editMessageText($from_id, $message_id, $locksText, null, json_encode(['inline_keyboard'=>$button]));
        $owner = getMainAdminId();
        if ($owner && !$isMain) sendMessage($owner, "❌ قفل حذف شد\n🆔 $lid\nتوسط: $first_name");
        exit;
    }
    if ($data && preg_match('/^change_lock_(.*)/', $data, $match)) {
        $lid = $match[1];
        $st = $db->prepare("SELECT columnTwo FROM `settings` WHERE `type`='lock' AND `type_id`=? LIMIT 1");
        $st->bind_param("s", $lid);
        $st->execute();
        $row = $st->get_result()->fetch_assoc();
        $lock = getChat($lid)->result ?? null;
        $name = $lock->title ?? $lid;
        $link = $row['columnTwo'] ?? ($lock->invite_link ?? 'ندارد');
        sendMessage($from_id, "☑️ برای تنظیم لینک جدید برای این قفل ( $name ) لطفا لینک جدید را ارسال کنید\n🔗 لینک فعلی : $link\n\n⚠️ باید با  https://t.me  شروع شود", 'html', json_encode(['keyboard'=>[[['text'=>"جایگزینی لینک عمومی ربات در قفل ✔️"]],[['text'=>"برگشت 🔙"]]], 'resize_keyboard'=>true]), $message_id);
        $tmp = "change_lock_$lid";
        $st2 = $db->prepare("UPDATE `user` SET `step`=? WHERE `from_id`=?");
        $st2->bind_param("ss", $tmp, $from_id);
        $st2->execute();
        exit;
    }
    if (preg_match('/^change_lock_(.*)/', $step, $match)) {
        $lid = preg_replace('/[^0-9\-]/','',$match[1]); // آیدی عددی کانال ممکنه منفی باشه
        // چون آیدی کانال منفی است، باید کل match را نگه داریم
        $lid = $match[1];
        if ($text == "جایگزینی لینک عمومی ربات در قفل ✔️") {
            sendMessage($from_id, "✅ با موفقیت با لینک اصلی جایگزین شد .", null, $panel, $message_id);
            $st = $db->prepare("UPDATE `settings` SET `columnTwo`='' WHERE `type`='lock' AND `type_id`=?");
            $st->bind_param("s", $lid);
            $st->execute();
            $st2 = $db->prepare("UPDATE `user` SET `step`='none' WHERE `from_id`=?");
            $st2->bind_param("s", $from_id);
            $st2->execute();
        } elseif (preg_match('/^https:\/\/t.me\/(.*)/', $text)) {
            $st = $db->prepare("UPDATE `settings` SET `columnTwo`=? WHERE `type`='lock' AND `type_id`=?");
            $st->bind_param("ss", $text, $lid);
            $st->execute();
            sendMessage($from_id, "✅ با موفقیت لینک جایگزین شد .", null, $panel, $message_id);
            $st2 = $db->prepare("UPDATE `user` SET `step`='none' WHERE `from_id`=?");
            $st2->bind_param("s", $from_id);
            $st2->execute();
        } else {
            sendMessage($from_id, "⚠️ باید با https://t.me/ شروع شود\nلطفا دوباره ارسال کنید", null, $back_panel, $message_id);
        }
        exit;
    }
    if ($text == '🧑🏻‍💻 بخش ادمین ها') {
        if (!$isMain) { sendMessage($from_id, '❌ شما دسترسی به این بخش ندارید.', null, $panel, $message_id); exit; }
        $adminsSQL = $db->query("SELECT type_id FROM `settings` WHERE `type`='admin' AND `columnOne`!='main'");
        $button = [];
        if ($adminsSQL->num_rows > 0) {
            $adminsText = "☑️ به بخش (🧑🏻‍💻 بخش ادمین ها) خوش امدید\n\n🚦 راهنما :\n1 - 👁 برای مشاهده ی هر کدام روی اسم ان ادمین بزنید.\n2 - برای حذف هر کدام روی دکمه ی ( 🗑 ) بزنید\n3 - برای افزودن ادمین روی دکمه ی ( ➕ افزودن ادمین ) بزنید";
            $button[] = [['text'=>'🧑🏻‍💻 نام ادمین', 'callback_data'=>'none'], ['text'=>'🗑 حذف', 'callback_data'=>'none']];
            while ($row = $adminsSQL->fetch_assoc()) {
                $name = getChat($row['type_id'])->result->first_name ?? 'یافت نشد';
                $button[] = [['text'=>"$name", 'url'=>"tg://openmessage?user_id={$row['type_id']}"], ['text'=>'🗑', 'callback_data'=>"remove_ad_{$row['type_id']}"]];
            }
        } else {
            $adminsText = '❌ شما ادمینی برای حذف و مشاهده ندارید لطفا از طریق دکمه ی ( ➕ افزودن ادمین ) اضافه کنید.';
        }
        $button[] = [['text'=>'➕ افزودن ادمین', 'callback_data'=>'addAdmin'], ['text'=>'🔙 بازگشت', 'callback_data'=>'panel']];
        sendMessage($from_id, $adminsText, null, json_encode(['inline_keyboard'=>$button]), $message_id);
        exit;
    }
    if ($data == 'addAdmin') {
        sendMessage($from_id, "☑️ لطفا ایدی عددی کاربر را وارد کنید.", null, $back_panel, $message_id);
        deleteMessage($from_id, $message_id);
        $st = $db->prepare("UPDATE `user` SET `step`='addAdmin' WHERE `from_id`=?");
        $st->bind_param("s", $from_id);
        $st->execute();
        exit;
    }
    if ($step == 'addAdmin') {
        $uid = preg_replace('/[^0-9]/','',$text);
        $st = $db->prepare("SELECT from_id FROM `user` WHERE `from_id`=? LIMIT 1");
        $st->bind_param("s", $uid);
        $st->execute();
        if ($st->get_result()->num_rows > 0) {
            $chk = $db->prepare("SELECT type_id FROM `settings` WHERE `type`='admin' AND `type_id`=? LIMIT 1");
            $chk->bind_param("s", $uid);
            $chk->execute();
            if ($chk->get_result()->num_rows == 0) {
                $name = getChat($uid)->result->first_name ?? $uid;
                sendMessage($from_id, "✅ با موفقیت به ادمین ها اضافه شد.\n\n👤 نام کاربر : $name\n🆔 ایدی عددی کاربر : $uid", null, $panel, $message_id);
                sendMessage($uid, "✅ شما با موفقیت به ادمین های ربات اضافه شدید لطفا ربات رو استارت کنید.\n/start");
                $ins = $db->prepare("INSERT INTO `settings` (`type`,`type_id`,`columnOne`) VALUES ('admin', ?, 'admin')");
                $ins->bind_param("s", $uid);
                $ins->execute();
                $st2 = $db->prepare("UPDATE `user` SET `step`='none' WHERE `from_id`=?");
                $st2->bind_param("s", $from_id);
                $st2->execute();
            } else sendMessage($from_id, "❌ کاربر از قبل ادمین ربات است. لطفا ایدی دیگری بفرستید", null, $back_panel, $message_id);
        } else sendMessage($from_id, "❌ کاربر ربات را استارت نکرده است. لطفا ایدی دیگری بفرستید", null, $back_panel, $message_id);
        exit;
    }
    if ($data && preg_match('/^remove_ad_(.*)/', $data, $match)) {
        $aid = $match[1];
        answercallbackquery($callback_query_id, "✅ با موفقیت حذف شد");
        sendMessage($aid, "❌ شما از لیست ادمین ها حذف شدید لطفا استارت کنید\n/start");
        $st = $db->prepare("DELETE FROM `settings` WHERE `type`='admin' AND `type_id`=?");
        $st->bind_param("s", $aid);
        $st->execute();
        $adminsSQL = $db->query("SELECT type_id FROM `settings` WHERE `type`='admin' AND `columnOne`!='main'");
        $button = [];
        if ($adminsSQL->num_rows > 0) {
            $adminsText = "☑️ به بخش (🧑🏻‍💻 بخش ادمین ها) خوش امدید\n\n🚦 راهنما :\n1 - 👁 برای مشاهده ی هر کدام روی اسم ان ادمین بزنید.\n2 - برای حذف هر کدام روی دکمه ی ( 🗑 ) بزنید\n3 - برای افزودن ادمین روی دکمه ی ( ➕ افزودن ادمین ) بزنید";
            $button[] = [['text'=>'🧑🏻‍💻 نام ادمین', 'callback_data'=>'none'], ['text'=>'🗑 حذف', 'callback_data'=>'none']];
            while ($row = $adminsSQL->fetch_assoc()) {
                $name = getChat($row['type_id'])->result->first_name ?? 'یافت نشد';
                $button[] = [['text'=>"$name", 'url'=>"tg://openmessage?user_id={$row['type_id']}"], ['text'=>'🗑', 'callback_data'=>"remove_ad_{$row['type_id']}"]];
            }
        } else {
            $adminsText = '❌ شما ادمینی برای حذف و مشاهده ندارید لطفا از طریق دکمه ی ( ➕ افزودن ادمین ) اضافه کنید.';
        }
        $button[] = [['text'=>'➕ افزودن ادمین', 'callback_data'=>'addAdmin'], ['text'=>'🔙 بازگشت', 'callback_data'=>'panel']];
        editMessageText($from_id, $message_id, $adminsText, null, json_encode(['inline_keyboard'=>$button]));
        exit;
    }
    if ($text == "📣 بخش تبلیغات" || $data == "manage_ads") {
        if ($data) deleteMessage($from_id, $message_id);
        sendMessage($from_id, "☑️ به بخش (📣 بخش تبلیغات) خوش امدید\n\n🚦 راهنما :\n1 - 👁 برای مشاهده و تنظیم و حذف هر کدام روی اسم ان آیتم بزنید.", "html", $set_ads_btn, $message_id);
        exit;
    }
    if ($data == "show_caption") {
        $row = $db->query("SELECT columnOne, columnTwo FROM `settings` WHERE `type`='caption' LIMIT 1")->fetch_assoc();
        $caption_sql = $row['columnOne'] ?: "کپشن تنظیم نشده است...";
        $caption_set = $row['columnTwo'] ?? '';
        $All = ($caption_set == "AllFiles") ? "✅" : "";
        $noCaption = ($caption_set == "noAllFiles") ? "✅" : "";
        editMessageText($from_id, $message_id, "متن کپشن : \n\n <code>$caption_sql</code> \n\n برای تنظیم روی دکمه ( ⚙️ تنظیم کپشن ) ، برای حذف روی دکمه ( 🗑 حذف کپشن ) و برای بازگشت روی ( 🔙 بازگشت ) بزنید.", "html", json_encode(['inline_keyboard'=>[
            [['text'=>"همه ی اپلود شده ها $All", 'callback_data'=>"set_allCaption"], ['text'=>"اپلود شده های بدون کپشن $noCaption", 'callback_data'=>"set_noAllCaption"]],
            [['text'=>"⚙️ تنظیم کپشن", 'callback_data'=>"set_caption"], ['text'=>"🗑 حذف کپشن", 'callback_data'=>"del_caption"]],
            [['text'=>"🔙 بازگشت", 'callback_data'=>"manage_ads"]]
        ]]));
        exit;
    }
    if ($data == "show_seenLink") {
        $seen = $db->query("SELECT type_id FROM `settings` WHERE `type`='seen_link' LIMIT 1")->fetch_assoc()['type_id'] ?? "لینک تنظیم نشده است...";
        editMessageText($from_id, $message_id, "لینک سین اجباری : \n\n $seen \n\n برای تنظیم روی دکمه ( ⚙️ تنظیم لینک ) ، برای حذف روی دکمه ( 🗑 حذف سین اجباری ) و برای بازگشت روی ( 🔙 بازگشت ) بزنید.", "html", json_encode(['inline_keyboard'=>[
            [['text'=>"⚙️ تنظیم لینک", 'callback_data'=>"set_seenLink"], ['text'=>"🗑 حذف سین اجباری", 'callback_data'=>"del_seenLink"]],
            [['text'=>"🔙 بازگشت", 'callback_data'=>"manage_ads"]]
        ]]));
        exit;
    }
    if ($data == "show_ads") {
        $ads = $db->query("SELECT type_id, columnOne FROM `settings` WHERE `type`='ads' LIMIT 1")->fetch_assoc();
        deleteMessage($from_id, $message_id);
        if (!empty($ads['type_id']) && !empty($ads['columnOne'])) $messageId = ForwardMessage($from_id, $ads['columnOne'], $ads['type_id'])->result->message_id ?? $message_id;
        else $messageId = sendMessage($from_id, "`تبلیغی تنظیم نشده است.`", "markdown")->result->message_id;
        sendMessage($from_id, " تبلیغ فعلی 👆👆👆 \n\n  برای تنظیم روی دکمه ( ⚙️ تنظیم تبلیغ ) ، برای حذف روی دکمه ( 🗑 حذف تبلیغ ) و برای بازگشت روی ( 🔙 بازگشت ) بزنید.", "html", json_encode(['inline_keyboard'=>[
            [['text'=>"⚙️ تنظیم تبلیغ", 'callback_data'=>"set_ads"], ['text'=>"🗑 حذف تبلیغ", 'callback_data'=>"del_ads"]],
            [['text'=>"🔙 بازگشت", 'callback_data'=>"manage_ads"]]
        ]]), $messageId);
        exit;
    }
    if ($data == "del_caption") {
        $row = $db->query("SELECT columnOne FROM `settings` WHERE `type`='caption' LIMIT 1")->fetch_assoc();
        if (!empty($row['columnOne'])) {
            $db->query("UPDATE `settings` SET `columnOne`='' WHERE `type`='caption'");
            answercallbackquery($callback_query_id, "❌ کپشن با موفقیت حذف شد.");
            $row2 = $db->query("SELECT columnOne, columnTwo FROM `settings` WHERE `type`='caption' LIMIT 1")->fetch_assoc();
            $caption_sql = $row2['columnOne'] ?: "کپشن تنظیم نشده است...";
            $caption_set = $row2['columnTwo'] ?? '';
            $All = ($caption_set == "AllFiles") ? "✅" : "";
            $noCaption = ($caption_set == "noAllFiles") ? "✅" : "";
            editMessageText($from_id, $message_id, "متن کپشن : \n\n <code>$caption_sql</code> \n\n برای تنظیم روی دکمه ( ⚙️ تنظیم کپشن ) ، برای حذف روی دکمه ( 🗑 حذف کپشن ) و برای بازگشت روی ( 🔙 بازگشت ) بزنید.", "html", json_encode(['inline_keyboard'=>[
                [['text'=>"همه ی اپلود شده ها $All", 'callback_data'=>"set_allCaption"], ['text'=>"اپلود شده های بدون کپشن $noCaption", 'callback_data'=>"set_noAllCaption"]],
                [['text'=>"⚙️ تنظیم کپشن", 'callback_data'=>"set_caption"], ['text'=>"🗑 حذف کپشن", 'callback_data'=>"del_caption"]],
                [['text'=>"🔙 بازگشت", 'callback_data'=>"manage_ads"]]
            ]]));
        } else answercallbackquery($callback_query_id, "❌ کپشن تنظیم نشده است");
        exit;
    }
    if ($data == "del_seenLink") {
        $row = $db->query("SELECT type_id FROM `settings` WHERE `type`='seen_link' LIMIT 1")->fetch_assoc();
        if (!empty($row['type_id'])) {
            $db->query("UPDATE `settings` SET `type_id`='' WHERE `type`='seen_link'");
            answercallbackquery($callback_query_id, "❌ سین اجباری با موفقیت حذف شد.");
            editMessageText($from_id, $message_id, "لینک سین اجباری : \n\n لینک تنظیم نشده است... \n\n برای تنظیم روی دکمه ( ⚙️ تنظیم لینک ) ، برای حذف روی دکمه ( 🗑 حذف سین اجباری ) و برای بازگشت روی ( 🔙 بازگشت ) بزنید.", "html", json_encode(['inline_keyboard'=>[
                [['text'=>"⚙️ تنظیم لینک", 'callback_data'=>"set_seenLink"], ['text'=>"🗑 حذف سین اجباری", 'callback_data'=>"del_seenLink"]],
                [['text'=>"🔙 بازگشت", 'callback_data'=>"manage_ads"]]
            ]]));
        } else answercallbackquery($callback_query_id, "❌ لینک سین اجباری تنظیم نشده است");
        exit;
    }
    if ($data == "del_ads") {
        $ads = $db->query("SELECT type_id FROM `settings` WHERE `type`='ads' LIMIT 1")->fetch_assoc();
        if (!empty($ads['type_id'])) {
            $db->query("UPDATE `settings` SET `type_id`='', `columnOne`='' WHERE `type`='ads'");
            answercallbackquery($callback_query_id, "❌ ارسال تبلیغ با موفقیت حذف شد.");
            editMessageText($from_id, $message_id, " ❌ تبلیغ تنظیم نشده است...  \n\n  برای تنظیم روی دکمه ( ⚙️ تنظیم تبلیغ ) ، برای حذف روی دکمه ( 🗑 حذف تبلیغ ) و برای بازگشت روی ( 🔙 بازگشت ) بزنید.", "html", json_encode(['inline_keyboard'=>[
                [['text'=>"⚙️ تنظیم تبلیغ", 'callback_data'=>"set_ads"], ['text'=>"🗑 حذف تبلیغ", 'callback_data'=>"del_ads"]],
                [['text'=>"🔙 بازگشت", 'callback_data'=>"manage_ads"]]
            ]]));
        } else answercallbackquery($callback_query_id, "❌ ارسال تبلیغ تنظیم نشده است");
        exit;
    }
    if ($data == "set_caption") {
        $row = $db->query("SELECT columnOne FROM `settings` WHERE `type`='caption' LIMIT 1")->fetch_assoc();
        $cap = $row['columnOne'] ?: "کپشنی ثبت نشده است ...";
        deleteMessage($from_id, $message_id);
        sendMessage($from_id, "کپشن قبلی : \n\n <code>$cap</code> \n\n▪️ لطفا کپشن خود را ارسال کنید :\n( تنها متن میتوانید ارسال کنید ; متن میتواند در قالب html نیز باشد )", "html", $back_panel);
        $st = $db->prepare("UPDATE `user` SET `step`='set_caption' WHERE `from_id`=?");
        $st->bind_param("s", $from_id);
        $st->execute();
        exit;
    }
    if ($data == "set_seenLink") {
        $seen = $db->query("SELECT type_id FROM `settings` WHERE `type`='seen_link' LIMIT 1")->fetch_assoc()['type_id'] ?? "لینک تنظیم نشده است...";
        deleteMessage($from_id, $message_id);
        sendMessage($from_id, " لینک قبلی : \n\n $seen \n\n▪️ لطفا لینک خود را ارسال کنید :\n( تنها لینک دارای <code>https://t.me</code>  میتوانید ارسال کنید )", "html", $back_panel);
        $st = $db->prepare("UPDATE `user` SET `step`='set_seenLink' WHERE `from_id`=?");
        $st->bind_param("s", $from_id);
        $st->execute();
        exit;
    }
    if ($data == "set_ads") {
        $ads = $db->query("SELECT type_id, columnOne FROM `settings` WHERE `type`='ads' LIMIT 1")->fetch_assoc();
        deleteMessage($from_id, $message_id);
        if (!empty($ads['type_id'])) ForwardMessage($from_id, $ads['columnOne'], $ads['type_id']);
        sendMessage($from_id, "▪️ لطفا تبلیغ خود را ارسال یا فوروارد کنید :\nمیتوانید در قالب html ارسال کنید\n\nدر تایپ های : \nعکس . فیلم . گیف . ویس . آهنگ . متن ساده", "html", $back_panel);
        $st = $db->prepare("UPDATE `user` SET `step`='set_ads' WHERE `from_id`=?");
        $st->bind_param("s", $from_id);
        $st->execute();
        exit;
    }
    if ($step == "set_caption") {
        if ($text) {
            $st = $db->prepare("UPDATE `settings` SET `columnOne`=? WHERE `type`='caption'");
            $st->bind_param("s", $text);
            $st->execute();
            $st2 = $db->prepare("UPDATE `user` SET `step`='none' WHERE `from_id`=?");
            $st2->bind_param("s", $from_id);
            $st2->execute();
            $row = $db->query("SELECT columnOne, columnTwo FROM `settings` WHERE `type`='caption' LIMIT 1")->fetch_assoc();
            $caption_sql = $row['columnOne'] ?: "کپشن تنظیم نشده است...";
            $caption_set = $row['columnTwo'] ?? '';
            $All = ($caption_set == "AllFiles") ? "✅" : "";
            $noCaption = ($caption_set == "noAllFiles") ? "✅" : "";
            sendMessage($from_id, "✅ کپشن با موفقیت تنظیم شد", "html", $panel, $message_id);
            sendMessage($from_id, "متن کپشن : \n\n <code>$caption_sql</code> \n\n برای تنظیم روی دکمه ( ⚙️ تنظیم کپشن ) ، برای حذف روی دکمه ( 🗑 حذف کپشن ) و برای بازگشت روی ( 🔙 بازگشت ) بزنید.", "html", json_encode(['inline_keyboard'=>[
                [['text'=>"همه ی اپلود شده ها $All", 'callback_data'=>"set_allCaption"], ['text'=>"اپلود شده های بدون کپشن $noCaption", 'callback_data'=>"set_noAllCaption"]],
                [['text'=>"⚙️ تنظیم کپشن", 'callback_data'=>"set_caption"], ['text'=>"🗑 حذف کپشن", 'callback_data'=>"del_caption"]],
                [['text'=>"🔙 بازگشت", 'callback_data'=>"manage_ads"]]
            ]]));
        } else sendMessage($from_id, "❌ تنها متن میتوانید ارسال کنید", "html", $back_panel, $message_id);
        exit;
    }
    if ($step == "set_seenLink") {
        if (preg_match('/^https:\/\/t.me\/(.*)/', $text)) {
            $st = $db->prepare("UPDATE `settings` SET `type_id`=? WHERE `type`='seen_link'");
            $st->bind_param("s", $text);
            $st->execute();
            $st2 = $db->prepare("UPDATE `user` SET `step`='none' WHERE `from_id`=?");
            $st2->bind_param("s", $from_id);
            $st2->execute();
            $seen = $db->query("SELECT type_id FROM `settings` WHERE `type`='seen_link' LIMIT 1")->fetch_assoc()['type_id'] ?? '';
            sendMessage($from_id, "✅ لینک با موفقیت تنظیم شد", "html", $panel, $message_id);
            sendMessage($from_id, "لینک سین اجباری : \n\n $seen \n\n برای تنظیم روی دکمه ( ⚙️ تنظیم لینک ) ، برای حذف روی دکمه ( 🗑 حذف سین اجباری ) و برای بازگشت روی ( 🔙 بازگشت ) بزنید.", "html", json_encode(['inline_keyboard'=>[
                [['text'=>"⚙️ تنظیم لینک", 'callback_data'=>"set_seenLink"], ['text'=>"🗑 حذف سین اجباری", 'callback_data'=>"del_seenLink"]],
                [['text'=>"🔙 بازگشت", 'callback_data'=>"manage_ads"]]
            ]]));
        } else sendMessage($from_id, "⚠️ توجه داشته باشید که باید با <code>https://t.me/</code> شروع شود\nلطفا دوباره ارسال کنید", "html", $back_panel, $message_id);
        exit;
    }
    if ($step == "set_ads") {
        $st = $db->prepare("UPDATE `settings` SET `type_id`=?, `columnOne`=? WHERE `type`='ads'");
        $mid = strval($message_id);
        $st->bind_param("ss", $mid, $from_id);
        $st->execute();
        $st2 = $db->prepare("UPDATE `user` SET `step`='none' WHERE `from_id`=?");
        $st2->bind_param("s", $from_id);
        $st2->execute();
        sendMessage($from_id, "✅ تبلیغ با موفقیت تنظیم شد", "markdown", $panel, $message_id);
        $fwd = ForwardMessage($from_id, $from_id, $message_id);
        $msgId = $fwd->result->message_id ?? $message_id;
        sendMessage($from_id, " تبلیغ فعلی 👆👆👆 \n\n  برای تنظیم روی دکمه ( ⚙️ تنظیم تبلیغ ) ، برای حذف روی دکمه ( 🗑 حذف تبلیغ ) و برای بازگشت روی ( 🔙 بازگشت ) بزنید.", "html", json_encode(['inline_keyboard'=>[
            [['text'=>"⚙️ تنظیم تبلیغ", 'callback_data'=>"set_ads"], ['text'=>"🗑 حذف تبلیغ", 'callback_data'=>"del_ads"]],
            [['text'=>"🔙 بازگشت", 'callback_data'=>"manage_ads"]]
        ]]), $msgId);
        exit;
    }
    if ($data == "set_allCaption") {
        $db->query("UPDATE `settings` SET `columnTwo`='AllFiles' WHERE `type`='caption'");
        $row = $db->query("SELECT columnOne, columnTwo FROM `settings` WHERE `type`='caption' LIMIT 1")->fetch_assoc();
        $caption_sql = $row['columnOne'] ?: "کپشن تنظیم نشده است...";
        $caption_set = $row['columnTwo'] ?? '';
        $All = ($caption_set == "AllFiles") ? "✅" : "";
        $noCaption = ($caption_set == "noAllFiles") ? "✅" : "";
        editMessageText($from_id, $message_id, "متن کپشن : \n\n <code>$caption_sql</code> \n\n برای تنظیم روی دکمه ( ⚙️ تنظیم کپشن ) ، برای حذف روی دکمه ( 🗑 حذف کپشن ) و برای بازگشت روی ( 🔙 بازگشت ) بزنید.", "html", json_encode(['inline_keyboard'=>[
            [['text'=>"همه ی اپلود شده ها $All", 'callback_data'=>"set_allCaption"], ['text'=>"اپلود شده های بدون کپشن $noCaption", 'callback_data'=>"set_noAllCaption"]],
            [['text'=>"⚙️ تنظیم کپشن", 'callback_data'=>"set_caption"], ['text'=>"🗑 حذف کپشن", 'callback_data'=>"del_caption"]],
            [['text'=>"🔙 بازگشت", 'callback_data'=>"manage_ads"]]
        ]]));
        exit;
    }
    if ($data == "set_noAllCaption") {
        $db->query("UPDATE `settings` SET `columnTwo`='noAllFiles' WHERE `type`='caption'");
        $row = $db->query("SELECT columnOne, columnTwo FROM `settings` WHERE `type`='caption' LIMIT 1")->fetch_assoc();
        $caption_sql = $row['columnOne'] ?: "کپشن تنظیم نشده است...";
        $caption_set = $row['columnTwo'] ?? '';
        $All = ($caption_set == "AllFiles") ? "✅" : "";
        $noCaption = ($caption_set == "noAllFiles") ? "✅" : "";
        editMessageText($from_id, $message_id, "متن کپشن : \n\n <code>$caption_sql</code> \n\n برای تنظیم روی دکمه ( ⚙️ تنظیم کپشن ) ، برای حذف روی دکمه ( 🗑 حذف کپشن ) و برای بازگشت روی ( 🔙 بازگشت ) بزنید.", "html", json_encode(['inline_keyboard'=>[
            [['text'=>"همه ی اپلود شده ها $All", 'callback_data'=>"set_allCaption"], ['text'=>"اپلود شده های بدون کپشن $noCaption", 'callback_data'=>"set_noAllCaption"]],
            [['text'=>"⚙️ تنظیم کپشن", 'callback_data'=>"set_caption"], ['text'=>"🗑 حذف کپشن", 'callback_data'=>"del_caption"]],
            [['text'=>"🔙 بازگشت", 'callback_data'=>"manage_ads"]]
        ]]));
        exit;
    }
    if ($text == '🗑 تنظیم حذف شدن') {
        $buttons = [[['text'=>'برگشت 🔙'], ['text'=>'0']]];
        for ($i=1;$i<100;$i++) {
            $pi=$i+10;
            $button=[];
            for (;$i<$pi;$i++) $button[]=['text'=>"$i"];
            $buttons[]=$button;
            $i--;
        }
        $kbd = json_encode(['keyboard'=>$buttons, 'resize_keyboard'=>true]);
        sendMessage($from_id, "▪️ لطفا یک عدد را برای مدت زمان حذف شدن فایل وارد کنید .\nاز کیبورد زیر هم میتوانید کمک بگیرید.\n\nℹ️ همچنین برای حذف مدت زمان میتوانید بر روی دکمه ی 0 کلیک یا تایپ کنید.\n\n⚠️ توجه داشته باشید که به دقیقه حساب میشود", "markdown", $kbd, $message_id);
        $st = $db->prepare("UPDATE `user` SET `step`='DeleteFile' WHERE `from_id`=?");
        $st->bind_param("s", $from_id);
        $st->execute();
        exit;
    }
    if ($step == 'DeleteFile') {
        if (is_numeric($text)) {
            $st = $db->prepare("UPDATE `settings` SET `type_id`=? WHERE `type`='del'");
            $st->bind_param("s", $text);
            $st->execute();
            sendMessage($from_id, "✔️ مدت زمان با موفقیت تنظیم شد", null, $panel, $message_id);
            $st2 = $db->prepare("UPDATE `user` SET `step`='none' WHERE `from_id`=?");
            $st2->bind_param("s", $from_id);
            $st2->execute();
        }
        exit;
    }
    if ($text == "🔘 حالت آپلود") {
        if ($upmode == "on") {
            @file_put_contents('mode','off', LOCK_EX);
            sendMessage($from_id, "⚫️ آپلود برای کاربران خاموش شد.", "html", $panel, $message_id);
        } else {
            @file_put_contents('mode','on', LOCK_EX);
            sendMessage($from_id, "🟢آپلود برای کاربران روشن شد.", "html", $panel, $message_id);
        }
        exit;
    }
    if ($text == "📤 آپلود متن") {
        sendMessage($from_id, "✅متن خود را ارسال نمایید.", "html", $panel, $message_id);
        $st = $db->prepare("UPDATE `user` SET `step`='uptex' WHERE `from_id`=?");
        $st->bind_param("s", $from_id);
        $st->execute();
        exit;
    }
    if ($step == 'uptex') {
        $id = random_secure(8);
        texup(2,$id,$text);
        sendMessage($from_id, "✅آپلود شد \nلینک\n📥 https://t.me/$usernamebot?start=tx_$id", "html", $panel, $message_id);
        $st = $db->prepare("UPDATE `user` SET `step`='none' WHERE `from_id`=?");
        $st->bind_param("s", $from_id);
        $st->execute();
        exit;
    }
    if ($text == "📤 حذف متن") {
        sendMessage($from_id, "✅ایدی متن خود را برای حذف بفرستید.", "html", $panel, $message_id);
        $st = $db->prepare("UPDATE `user` SET `step`='dltex' WHERE `from_id`=?");
        $st->bind_param("s", $from_id);
        $st->execute();
        exit;
    }
    if ($step == 'dltex') {
        $safe = preg_replace('/[^A-Za-z0-9]/','',$text);
        texup(3,$safe);
        sendMessage($from_id, "✅با موفقیت حذف شد!", "html", $panel, $message_id);
        $st = $db->prepare("UPDATE `user` SET `step`='none' WHERE `from_id`=?");
        $st->bind_param("s", $from_id);
        $st->execute();
        exit;
    }
    if ($text == '📣 ارسال بنر به چنل') {
        sendMessage($from_id, "📣 خب بنر خود را همراه کپشن بفرستید.\n\n✅ بنر میتواند متن خالی یا شامل مدیا باشد.", "markdown", $back_panel, $message_id);
        $st = $db->prepare("UPDATE `user` SET `step`='baner-tab' WHERE `from_id`=?");
        $st->bind_param("s", $from_id);
        $st->execute();
        exit;
    }
    if ($step == 'baner-tab') {
        @file_put_contents('idmsg', $message_id, LOCK_EX);
        sendMessage($from_id, "✅لینک دانلود فایل رو ارسال فرمایید.", "markdown", $back_panel, $message_id);
        $st = $db->prepare("UPDATE `user` SET `step`='link-tab' WHERE `from_id`=?");
        $st->bind_param("s", $from_id);
        $st->execute();
        exit;
    }
    if ($step == 'link-tab') {
        @file_put_contents('link', $text, LOCK_EX);
        sendMessage($from_id, "📣 حالا ایدی عددی یا یوزرنیم چنل همراه با @ رو ارسال کنید تا ارسال بشه.", "markdown", $back_panel, $message_id);
        $st = $db->prepare("UPDATE `user` SET `step`='end-tab' WHERE `from_id`=?");
        $st->bind_param("s", $from_id);
        $st->execute();
        exit;
    }
    if ($step == 'end-tab') {
        $linkUrl = trim(@file_get_contents('link') ?: 'https://t.me/'.$usernamebot);
        $bannerMsgId = trim(@file_get_contents('idmsg') ?: $message_id);
        SBoOS('copyMessage',[
            'chat_id'=>$text,
            'from_chat_id'=>$from_id,
            'message_id'=>$bannerMsgId,
            'reply_markup'=>json_encode(['inline_keyboard'=>[[['text'=>"📥 دانلود 📥", 'url'=>$linkUrl]]]])
        ]);
        @unlink('idmsg'); @unlink('link');
        sendMessage($from_id, "✔️ باموفقیت ارسال شد به چنل.", "markdown", $panel, $message_id);
        $st = $db->prepare("UPDATE `user` SET `step`='none' WHERE `from_id`=?");
        $st->bind_param("s", $from_id);
        $st->execute();
        exit;
    }
}

#====================== آپلود فایل ======================#
if ($text == '📥 آپلود فایل گروهی') {
    if (isJoin($from_id)) {
        if ($upmode !== 'on' && !isAdmin($from_id)) {
            sendMessage($from_id, "⚫️ آپلود در حال حاضر خاموش است", "html", $btn_home, $message_id);
            exit;
        }
        $id = random_secure(10);
        $chk = $db->prepare("SELECT id FROM `file` WHERE `id`=? LIMIT 1");
        $chk->bind_param("s", $id);
        $chk->execute();
        while ($chk->get_result()->num_rows > 0) {
            $id = random_secure(10);
            $chk->bind_param("s", $id);
            $chk->execute();
        }
        sendMessage($from_id, "▪️ لطفا فایل (های) خود را بفرستید :", "markdown", $btn_back, $message_id);
        $tmp = "upload_$id";
        $st = $db->prepare("UPDATE `user` SET `step`=? WHERE `from_id`=?");
        $st->bind_param("ss", $tmp, $from_id);
        $st->execute();
    } else joinSend($from_id);
    exit;
}
if ($text == '🗄 اتمام اپلود') {
    if (isJoin($from_id)) {
        if (preg_match('/^upload_(.*)/', $step, $match)) {
            $id = preg_replace('/[^A-Za-z0-9]/','',$match[1]);
            $st = $db->prepare("SELECT COUNT(*) as c FROM `file` WHERE `id`=?");
            $st->bind_param("s", $id);
            $st->execute();
            $count = $st->get_result()->fetch_assoc()['c'] ?? 0;
            $typeT = $count > 1 ? 'فایل های' : 'فایل';
            sendMessage($from_id, "✅ $typeT شما با موفقیت اپلود شد!\n\n📍 شناسه: <code>$id</code>\n➖ لینک اشتراک گذاری:\n📥 https://t.me/$usernamebot?start=get_$id", "html", $btn_home, $message_id);
            $st2 = $db->prepare("UPDATE `user` SET `step`='none' WHERE `from_id`=?");
            $st2->bind_param("s", $from_id);
            $st2->execute();
        }
    } else joinSend($from_id);
    exit;
}

if ($text != '🗄 اتمام اپلود' && $step != "set_ads" && $step != "set_caption" && $step != "set_seenLink") {
    if ($upmode !== "off" || isAdmin($from_id)) {
        $idForUpload = null;
        if (preg_match('/^upload_(.*)/', $step, $match)) $idForUpload = preg_replace('/[^A-Za-z0-9]/','',$match[1]);
        else $idForUpload = random_secure(10);

        if (isset($update->message->document) || isset($update->message->video) || isset($update->message->photo) || isset($update->message->sticker) || isset($update->message->audio) || isset($update->message->voice)) {
            if (isset($update->message->document)) { $file_type="document"; $file_typeFa="فایل"; $file_function="sendDocument"; $file_id=$update->message->document->file_id; $file_size=$update->message->document->file_size ?? 0; $file_name=$update->message->document->file_name ?? $idForUpload; }
            elseif (isset($update->message->video)) { $file_type="video"; $file_typeFa="ویدیو"; $file_function="sendVideo"; $file_id=$update->message->video->file_id; $file_size=$update->message->video->file_size ?? 0; $file_name=$update->message->video->file_name ?? $idForUpload.'.mp4'; }
            elseif (isset($update->message->photo)) { $file_type="photo"; $file_typeFa="عکس"; $file_function="SendPhoto"; $photos=$update->message->photo; $file_id=end($photos)->file_id; $file_size=0; $file_name=$idForUpload.'.jpg'; }
            elseif (isset($update->message->sticker)) { $file_type="sticker"; $file_typeFa="استیکر"; $file_function="sendSticker"; $file_id=$update->message->sticker->file_id; $file_size=0; $file_name=$idForUpload.'.webp'; }
            elseif (isset($update->message->audio)) { $file_type="audio"; $file_typeFa="آهنگ"; $file_function="sendAudio"; $file_id=$update->message->audio->file_id; $file_size=$update->message->audio->file_size ?? 0; $file_name=$update->message->audio->file_name ?? $idForUpload.'.mp3'; }
            elseif (isset($update->message->voice)) { $file_type="voice"; $file_typeFa="ویس"; $file_function="sendVoice"; $file_id=$update->message->voice->file_id; $file_size=0; $file_name=$idForUpload.'.ogg'; }

            $size = convert($file_size);
            $timeF = date('h:i:s'); $dateF = date('Y/m/d');
            $caption = $update->message->caption ?? '';

            $st = $db->prepare("INSERT INTO `file` (`id`,`file_id`,`type`,`caption`,`password`,`file_size`,`file_name`,`user_id`,`date`,`time`) VALUES (?,?,?,?, '', ?, ?, ?, ?, ?)");
            $st->bind_param("ssssissss", $idForUpload, $file_id, $file_type, $caption, $file_size, $file_name, $from_id, $dateF, $timeF);
            $st->execute();

            $file_function($from_id, $file_id, "📍 $file_typeFa شما با موفقیت داخل دیتابیس ذخیره شد ... !\n▪️ شناسه $file_typeFa شما : <code>$idForUpload</code>\n\n➖ بقیه اطلاعات $file_typeFa شما : \n\n💾  حجم $file_typeFa : <b>$size</b>\n📛 نام: $file_name\n📝 توضیحات $file_typeFa : \n<code>$caption</code>\nلینک اشتراک گذاری $file_typeFa:\n📥 https://t.me/$usernamebot?start=get_$idForUpload", $message_id, "html", json_encode(['inline_keyboard'=>[[['text'=>"📋 تغییر کپشن", 'callback_data'=>"editCaption_$idForUpload"]],[['text'=>"🗑 حذف کپشن", 'callback_data'=>"delCaption_$idForUpload"]],[['text'=>"🔄 دانلود مجدد", 'callback_data'=>"redl_$idForUpload"]]]]));

            if (preg_match('/^upload_(.*)/', $step)) {
                $st2 = $db->prepare("SELECT COUNT(*) as c FROM `file` WHERE `id`=?");
                $st2->bind_param("s", $idForUpload);
                $st2->execute();
                $count = $st2->get_result()->fetch_assoc()['c'] ?? 0;
                sendMessage($from_id, "🗂 تعداد فایل های اپلود شده تا اینجا : $count\n▪️ لطفا اگر فایل دیگری دارید بفرستید :", "markdown", $btn_end, $message_id);
                $tmp = "upload_$idForUpload";
                $st3 = $db->prepare("UPDATE `user` SET `step`=? WHERE `from_id`=?");
                $st3->bind_param("ss", $tmp, $from_id);
                $st3->execute();
            }
            exit;
        }
    }
}

?>
