kkapil9112/Hguuuuuv45botPublic · Bot Template
AITelegram commerce bot for an admin-managed digital store: admins create categories, products, time-based plans, stock entries and license keys, and can grant reseller roles or adjust user balances. End users can view their balance, start a deposit flow with an inline amount keypad, apply coupon codes, and navigate back to the store menu. It uses Bot properties for product/stock/coupon data and Libs.ResourcesLib for per-user balances.
Commercecommerceshopreselleradmin-panelbalanceproduct-management
102 commands0 envUpdated 29d agoCreated Aug 7, 2026
commands/_addplan.js
javascript · 152 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") || "8812621370";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" +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 — value + unit (day / hour / minute) nikalta hai53var durMatch = rawDuration.toLowerCase().match(/^([0-9]+(?:\.[0-9]+)?)\s*(h|hr|hrs|hour|hours|m|min|mins|minute|minutes|d|day|days)?$/);54var pValue = durMatch ? durMatch[1] : rawDuration.replace(/[^0-9.]/g, "");55var unitRaw = durMatch ? (durMatch[2] || "d") : "d";56var pUnit = "day";57if (/^h/.test(unitRaw)) { pUnit = "hour"; }58else if (/^m/.test(unitRaw)) { pUnit = "minute"; }59else { pUnit = "day"; }60 61if (!pValue || isNaN(Number(pValue))) {62 Bot.sendMessage("❌ Duration samajh nahi aayi! Example: 7d, 1h, 30m");63 return;64}65 66var pDays = String(pValue); // (naam legacy rakha hai backward-compat ke liye, ab ye "value" hai)67 68// 🟢 Dynamic Global Price Keys — unit-aware (Day plans purane format me hi rehte hain,69// taaki pehle se set kiye hue Day-prices na tootein; Hour/Minute plans naye suffix format me)70var cleanProdName = pName.toUpperCase();71var priceKeySuffix = (pUnit === "day") ? pDays : (pDays + "_" + pUnit);72var normalKey = "price_normal_" + cleanProdName + "_" + priceKeySuffix;73var resellerKey = "price_reseller_" + cleanProdName + "_" + priceKeySuffix;74 75Bot.setProperty(normalKey, pNormal, "number");76Bot.setProperty(resellerKey, pReseller, "number");77 78// Database se existing products list nikalna79var productList = Bot.getProperty("stored_products") || [];80 81// Check karna ki kya yeh product pehle se list me hai?82var productIndex = -1;83for (var i = 0; i < productList.length; i++) {84 if (productList[i].name.toLowerCase() === pName.toLowerCase()) {85 productIndex = i;86 break;87 }88}89 90// 🕒 Human-readable duration label91var unitLabelWord = (pUnit === "hour") ? (Number(pDays) === 1 ? "Hour" : "Hours") :92 (pUnit === "minute") ? (Number(pDays) === 1 ? "Minute" : "Minutes") :93 (Number(pDays) === 1 ? "Day" : "Days");94var durationDisplay = pDays + " " + unitLabelWord;95 96// 🪄 AUTOMATIC WEBSITE PLAN NAME PREDICTOR ENGINE (sirf Day-unit plans ke liye — 97// external API generally sirf Day-based duration hi samajhta hai)98var lowerName = pName.toLowerCase();99var autoWebsiteName = durationDisplay; // Default fallback — Hour/Minute plans literal label use karte hain100 101if (pUnit === "day") {102 autoWebsiteName = pDays + " Days"; // Default Fallback103 if (lowerName.indexOf("pato") > -1) {104 autoWebsiteName = pDays + " DaYs All Colours Mix";105 } else if (lowerName.indexOf("prime") > -1 || lowerName.indexOf("hook") > -1) {106 autoWebsiteName = (pDays === "7") ? "7 Days NonRoot" : pDays + " Days Nonroot";107 } else if (lowerName.indexOf("nonroot") > -1 || lowerName.indexOf("non root") > -1) {108 autoWebsiteName = pDays + " DaYs NONROOT";109 } else if (lowerName.indexOf("all android") > -1 || lowerName.indexOf("mix") > -1) {110 autoWebsiteName = pDays + " DaYs All Colours Mix";111 }112}113 114// Setup complete plan object with dynamic fallback name + unit info115var newPlan = {116 days: pDays, // ab ye numeric "value" hai (backward-compat naam)117 unit: pUnit, // "day" | "hour" | "minute" ✅ NEW118 durationDisplay: durationDisplay, // ✅ NEW — human readable, jaise "1 Hour", "30 Minutes", "7 Days"119 normal_price: pNormal,120 reseller_price: pReseller,121 name_on_website: autoWebsiteName122};123 124if (productIndex !== -1) {125 if (!productList[productIndex].plans) { productList[productIndex].plans = []; }126 127 var planUpdated = false;128 for (var p = 0; p < productList[productIndex].plans.length; p++) {129 var existingUnit = productList[productIndex].plans[p].unit || "day";130 if (String(productList[productIndex].plans[p].days) === pDays && existingUnit === pUnit) {131 productList[productIndex].plans[p] = newPlan;132 planUpdated = true;133 break;134 }135 }136 137 if (!planUpdated) {138 productList[productIndex].plans.push(newPlan);139 }140 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" });141} else {142 var defaultEmoji = "5226656353744862682"; 143 productList.push({144 name: pName,145 emoji: defaultEmoji,146 plans: [newPlan]147 });148 Bot.sendMessage("✅ Naya Product <b>" + pName + "</b> successfully register ho gaya!\nℹ️ <i>API Target Format: " + autoWebsiteName + "</i>", { parse_mode: "HTML" });149}150 151// Database array update execution152Bot.setProperty("stored_products", productList, "json");