ayushyadav7970824760/goldensellingstore_botPublic · Bot Template
AIThis Telegram store bot lets customers browse digital products and plans, apply coupons, add funds via UPI, and receive purchased keys. It includes a full admin panel for managing products, reordering items, setting reseller prices, viewing and removing key stock, configuring UPI payment details and update links, and checking user balances. Co-admins and resellers are supported, and support tickets are forwarded to the admin.
Commercedigital_storeadmin_panelupi_paymentsresellercouponskey_stock
146 commands0 envUpdated 2d agoCreated Sep 5, 2026
commands/_addplan.js
javascript · 148 lines
1/**#command2name: /addplan3answer: 4keyboard: 5parse_mode: markdown6aliases: 7allow_only_group: false8need_reply: false9is_web: 010#command**/11 12// Apni Admin Telegram ID yahan dalein13var adminId = Bot.getProperty("owner_id") || "8477746023";14var isCoAdmin0 = Bot.getProperty("co_admin_" + String(chat.chatid));15 16if (chat.chatid != adminId && !isCoAdmin0) {17 Bot.sendMessage("❌ You are not the admin!");18 return;19}20 21// ✅ FIXED: Ab sirf "Days" nahi — Hour / Minute bhi support karta hai!22// Format: /addplan PRODUCT NAME | DURATION | NORMAL PRICE | RESELLER PRICE23// DURATION examples: "7" ya "7d" ya "7days" = 7 Days | "1h" ya "1hour" = 1 Hour | "30m" ya "30min" = 30 Minutes24if (!params) {25 Bot.sendMessage(26 "⚠️ Format: `/addplan PRODUCT NAME | DURATION | NORMAL PRICE | RESELLER PRICE`\n\n" +27 "*Examples:*\n" +28 "`/addplan FreeFire Hack | 7d | 91 | 64` (7 Days)\n`/addplan FreeFire Hack | 1 Hours | 91 | 64` (Exact API duration: 1 Hours)\n" +29 "`/addplan FreeFire Hack | 1h | 10 | 8` (1 Hour)\n" +30 "`/addplan FreeFire Hack | 30m | 5 | 4` (30 Minutes)",31 { parse_mode: "Markdown" }32 );33 return;34}35 36var data = params.split("|");37if (data.length < 4) {38 Bot.sendMessage("⚠️ Galat Format! Charo cheezein '|' se alag honi chahiye.");39 return;40}41 42var pName = data[0].trim();43var rawDuration = data[1].trim();44var pNormal = parseFloat(data[2].trim());45var pReseller = parseFloat(data[3].trim());46 47if (isNaN(pNormal) || isNaN(pReseller)) {48 Bot.sendMessage("❌ Price numeric (number) honi chahiye!");49 return;50}51 52// 🕒 DURATION PARSER — exact API/website labels are preserved verbatim.53// Supports labels such as:54// 1 DaYS NONROOT, House, 1 DaYs, 15 DaYs All Colours Mix,55// 30 DaYs PRO, 1 DaYs Basic, 1 Year Ios Esign Gbox Certificate,56// 1 DaYs Root + Nonroot, 7 DaYS PC AIMKILL, 30 Day Pc Modmenu x86,57// 3 DaYs SAFE, 3 DaYs BRUTAL, etc.58var durationText = rawDuration.replace(/\s+/g, " ").trim();59var durMatch = durationText.toLowerCase().match(/^([0-9]+(?:\.[0-9]+)?)\s*(d|day|days|h|hr|hrs|hour|hours|m|min|mins|minute|minutes)(?:\s+(.+))?$/);60var numericOnly = durationText.match(/^([0-9]+(?:\.[0-9]+)?)/);61var pValue = durMatch ? durMatch[1] : (numericOnly ? numericOnly[1] : "0");62var unitRaw = durMatch ? durMatch[2] : "d";63var customSuffix = durMatch && durMatch[3] ? durMatch[3].trim() : "";64var pUnit = "day";65if (/^h/.test(unitRaw)) { pUnit = "hour"; }66else if (/^m/.test(unitRaw)) { pUnit = "minute"; }67 68// A non-numeric label (for example "House") is valid as an exact API duration name.69if (!durationText) {70 Bot.sendMessage("❌ Duration/API name empty hai!");71 return;72}73 74var pDays = String(pValue); // legacy field; exact API label is stored separately below.75 76// 🟢 Dynamic Global Price Keys — unit-aware (Day plans purane format me hi rehte hain,77// taaki pehle se set kiye hue Day-prices na tootein; Hour/Minute plans naye suffix format me)78var cleanProdName = pName.toUpperCase();79var priceKeySuffix = (pUnit === "day") ? pDays : (pDays + "_" + pUnit);80var normalKey = "price_normal_" + cleanProdName + "_" + priceKeySuffix;81var resellerKey = "price_reseller_" + cleanProdName + "_" + priceKeySuffix;82 83Bot.setProperty(normalKey, pNormal, "number");84Bot.setProperty(resellerKey, pReseller, "number");85 86// Database se existing products list nikalna87var productList = Bot.getProperty("stored_products") || [];88 89// Check karna ki kya yeh product pehle se list me hai?90var productIndex = -1;91for (var i = 0; i < productList.length; i++) {92 if (productList[i].name.toLowerCase() === pName.toLowerCase()) {93 productIndex = i;94 break;95 }96}97 98// 🕒 Human-readable duration label99var unitLabelWord = (pUnit === "hour") ? (Number(pDays) === 1 ? "Hour" : "Hours") :100 (pUnit === "minute") ? (Number(pDays) === 1 ? "Minute" : "Minutes") :101 (Number(pDays) === 1 ? "Day" : "Days");102var durationDisplay = durationText;103 104// 🪄 EXACT WEBSITE/API DURATION LABEL105// Never rewrite casing, pluralisation, suffixes, or custom names.106// This fixes labels such as "1 DaYs NONROOT" and "1 Year Ios Esign Gbox Certificate".107var autoWebsiteName = durationText;108 109// Setup complete plan object with dynamic fallback name + unit info110var newPlan = {111 days: pDays, // ab ye numeric "value" hai (backward-compat naam)112 unit: pUnit, // "day" | "hour" | "minute" ✅ NEW113 durationDisplay: durationDisplay, // ✅ NEW — human readable, jaise "1 Hour", "30 Minutes", "7 Days"114 normal_price: pNormal,115 reseller_price: pReseller,116 name_on_website: autoWebsiteName,117 api_duration: autoWebsiteName118};119 120if (productIndex !== -1) {121 if (!productList[productIndex].plans) { productList[productIndex].plans = []; }122 123 var planUpdated = false;124 for (var p = 0; p < productList[productIndex].plans.length; p++) {125 var existingUnit = productList[productIndex].plans[p].unit || "day";126 if (String(productList[productIndex].plans[p].days) === pDays && existingUnit === pUnit) {127 productList[productIndex].plans[p] = newPlan;128 planUpdated = true;129 break;130 }131 }132 133 if (!planUpdated) {134 productList[productIndex].plans.push(newPlan);135 }136 Bot.sendMessage("✅ Product <b>" + pName + "</b> me <code>" + durationDisplay + "</code> ka plan ₹" + pNormal + " (Reseller: ₹" + pReseller + ") par set ho gaya!\nℹ️ <i>API Target Format: " + autoWebsiteName + "</i>", { parse_mode: "HTML" });137} else {138 var defaultEmoji = "5226656353744862682"; 139 productList.push({140 name: pName,141 emoji: defaultEmoji,142 plans: [newPlan]143 });144 Bot.sendMessage("✅ Naya Product <b>" + pName + "</b> successfully register ho gaya!\nℹ️ <i>API Target Format: " + autoWebsiteName + "</i>", { parse_mode: "HTML" });145}146 147// Database array update execution148Bot.setProperty("stored_products", productList, "json");