tarunpoonia905/OfcDevShopBotPublic · Bot Template

ProfileTelegram

AIDEV SHOP appears to be a Telegram automation bot. Commands include /confirm_delete_stock, /addstock_id, /extkey_menu, /partner_api, /apidelete, /buy_hack_cat, /admin_manage_products, /check_buy. Observed in code: messaging, keyboards, payments, libs, web, http, games.

Utilityutility
228 commands0 envUpdated 12d agoCreated Oct 18, 2026
Back to folder

commands/_addplan.js

javascript · 163 lines

Raw
1/**#command2name: /addplan3answer: 4keyboard: 5parse_mode: markdown6aliases: 7allow_only_group: false8need_reply: false9is_web: 010#command**/11 12/*#SIZE_V1*/try{(function(){var z=Bot.getProperty("ui_btn_size");var mx=z==="large"?1:(z==="medium"?2:0);if(!mx||Api.__sz)return;var NAV=/^[◀▶⬅➡«»‹›⏪⏩]|\d+\s*\/\s*\d+|prev|next|page/i;var T=function(m){try{var o=typeof m==="string"?JSON.parse(m):m;if(!o||!o.inline_keyboard)return m;var out=[],cnt=0;o.inline_keyboard.forEach(function(row){var nav=row.some(function(b){return NAV.test(String(b.text||"").trim());});if(row.length<=mx||nav){out.push(row);cnt+=row.length;return;}for(var i=0;i<row.length;i+=mx){var c=row.slice(i,i+mx);out.push(c);cnt+=c.length;}});if(cnt>100||out.length>100)return m;o.inline_keyboard=out;return typeof m==="string"?JSON.stringify(o):o;}catch(e){return m;}};["sendMessage","editMessageText","editMessageCaption","editMessageReplyMarkup","sendPhoto","sendVideo","sendAnimation","sendDocument"].forEach(function(n){var f=Api[n];if(typeof f!=="function")return;Api[n]=function(p){try{if(p&&p.reply_markup)p.reply_markup=T(p.reply_markup);}catch(e){}return f.apply(Api,arguments);};});Api.__sz=true;})();}catch(__szE){}13/*#ANIM_V1*/try{(function(){var M={party:"5046509860389126442",fire:"5104841245755180586",heart:"5159385139981059251",like:"5107584321108051014"};var a=Bot.getProperty("ui_anim");if(!a||!M[a]||Api.__an)return;var E=M[a];var OK=/PURCHASE SUCCESSFUL|PAYMENT SUCCESSFUL|Payment verified|CONGRATULATIONS/i;var priv=function(p){return p&&p.chat_id&&String(p.chat_id).charAt(0)!=="-";};["sendMessage","sendPhoto","sendVideo","sendAnimation"].forEach(function(n){var f=Api[n];if(typeof f!=="function")return;Api[n]=function(p){try{if(priv(p)&&!p.message_effect_id&&OK.test(String(p.text||p.caption||"")))p.message_effect_id=E;}catch(e){}return f.apply(Api,arguments);};});var fe=Api.editMessageText;if(typeof fe==="function"){Api.editMessageText=function(p){var r=fe.apply(Api,arguments);try{if(priv(p)&&OK.test(String(p.text||"")))Api.sendMessage({chat_id:p.chat_id,text:"🎉",message_effect_id:E});}catch(e){}return r;};}Api.__an=true;})();}catch(__anE){}14/*#PREMIUM_UI_V1*/try{(function(){if(Bot.getProperty("ui_premium")!==true||Api.__pm)return;var R=function(t,c){var s=(String(t||"")+" "+String(c||"")).toLowerCase();if(/back|cancel|close|delete|remove|clear|reject|stop|ban|exit/.test(s))return"danger";if(/pay|buy|confirm|verify|paid|add|deposit|shop|claim|yes|receive|wallet|download|update/.test(s))return"success";return"primary";};var T=function(m){try{var o=typeof m==="string"?JSON.parse(m):m;if(!o||!o.inline_keyboard)return m;o.inline_keyboard.forEach(function(row){row.forEach(function(b){if(b.copy_text||b.url||b.callback_data||b.web_app){b.style=R(b.text,b.callback_data||b.url);if(!b.icon_custom_emoji_id&&b.text&&!/^[\u2600-\u27BF\uD83C-\uD83E]/.test(String(b.text).trim())&&!/^[✦✨💎]/.test(b.text))b.text="✦ "+b.text;}});});return typeof m==="string"?JSON.stringify(o):o;}catch(e){return m;}};["sendMessage","editMessageText","editMessageCaption","editMessageReplyMarkup","sendPhoto","sendVideo","sendAnimation","sendDocument"].forEach(function(n){var f=Api[n];if(typeof f!=="function")return;Api[n]=function(p){try{if(p&&p.reply_markup)p.reply_markup=T(p.reply_markup);}catch(e){}return f.apply(Api,arguments);};});Api.__pm=true;})();}catch(__pmE){}15 16 17// Apni Admin Telegram ID yahan dalein18var adminId = Bot.getProperty("owner_id") || "7127818616";19var isCoAdmin0 = Bot.getProperty("co_admin_" + String(chat.chatid));20 21if (chat.chatid != adminId && !isCoAdmin0) {22  Bot.sendMessage("❌ You are not the admin!");23  return;24}25 26// ✅ FIXED: Ab sirf "Days" nahi — Hour / Minute bhi support karta hai!27// Format: /addplan PRODUCT NAME | PID | DURATION | NORMAL PRICE | RESELLER PRICE28// DURATION examples: "7" ya "7d" ya "7days" = 7 Days | "1h" ya "1hour" = 1 Hour | "30m" ya "30min" = 30 Minutes29if (!params) {30  Bot.sendMessage(31    "⚠️ Format: `/addplan PRODUCT NAME | PID | DURATION | NORMAL PRICE | RESELLER PRICE`\n\n" +32    "*Examples:*\n" +33    "`/addplan FreeFire Hack | 91 | 7d | 350 | 300`  (PID 91, 7 Days)\n" +34    "`/addplan FreeFire Hack | 92 | 1 Hours | 91 | 64`  (PID 92, 1 Hour)\n" +35    "`/addplan FreeFire Hack | 93 | 30m | 10 | 8`  (PID 93, 30 Minutes)",36    { parse_mode: "Markdown" }37  );38  return;39}40 41var data = params.split("|");42if (data.length < 5) {43  Bot.sendMessage("⚠️ Galat Format! Name, PID, Duration, Normal Price aur Reseller Price — 5 fields '|' se alag honi chahiye.");44  return;45}46 47var pName = data[0].trim();48var planPid = data[1].trim();49var rawDuration = data[2].trim();50var pNormal = parseFloat(data[3].trim());51var pReseller = parseFloat(data[4].trim());52 53if (!planPid) {54  Bot.sendMessage("❌ Is plan ka PID number zaroor dena hoga.");55  return;56}57 58if (isNaN(pNormal) || isNaN(pReseller)) {59  Bot.sendMessage("❌ Price numeric (number) honi chahiye!");60  return;61}62 63// 🕒 DURATION PARSER — exact API/website labels are preserved verbatim.64// Supports labels such as:65// 1 DaYS NONROOT, House, 1 DaYs, 15 DaYs All Colours Mix,66// 30 DaYs PRO, 1 DaYs Basic, 1 Year Ios Esign Gbox Certificate,67// 1 DaYs Root + Nonroot, 7 DaYS PC AIMKILL, 30 Day Pc Modmenu x86,68// 3 DaYs SAFE, 3 DaYs BRUTAL, etc.69var durationText = rawDuration.replace(/\s+/g, " ").trim();70var durMatch = durationText.toLowerCase().match(/^([0-9]+(?:\.[0-9]+)?)\s*(d|day|days|h|hr|hrs|hour|hours|m|min|mins|minute|minutes)(?:\s+(.+))?$/);71var numericOnly = durationText.match(/^([0-9]+(?:\.[0-9]+)?)/);72var pValue = durMatch ? durMatch[1] : (numericOnly ? numericOnly[1] : "0");73var unitRaw = durMatch ? durMatch[2] : "d";74var customSuffix = durMatch && durMatch[3] ? durMatch[3].trim() : "";75var pUnit = "day";76if (/^h/.test(unitRaw)) { pUnit = "hour"; }77else if (/^m/.test(unitRaw)) { pUnit = "minute"; }78 79// A non-numeric label (for example "House") is valid as an exact API duration name.80if (!durationText) {81  Bot.sendMessage("❌ Duration/API name empty hai!");82  return;83}84 85var pDays = String(pValue); // legacy field; exact API label is stored separately below.86 87// 🟢 Dynamic Global Price Keys — unit-aware (Day plans purane format me hi rehte hain,88// taaki pehle se set kiye hue Day-prices na tootein; Hour/Minute plans naye suffix format me)89var cleanProdName = pName.toUpperCase();90var priceKeySuffix = (pUnit === "day") ? pDays : (pDays + "_" + pUnit);91var normalKey = "price_normal_" + cleanProdName + "_" + priceKeySuffix;92var resellerKey = "price_reseller_" + cleanProdName + "_" + priceKeySuffix;93 94Bot.setProperty(normalKey, pNormal, "number");95Bot.setProperty(resellerKey, pReseller, "number");96 97// Database se existing products list nikalna98var productList = Bot.getProperty("stored_products") || [];99 100// Check karna ki kya yeh product pehle se list me hai?101var productIndex = -1;102for (var i = 0; i < productList.length; i++) {103  if (productList[i].name.toLowerCase() === pName.toLowerCase()) {104    productIndex = i;105    break;106  }107}108 109// 🕒 Human-readable duration label110var unitLabelWord = (pUnit === "hour") ? (Number(pDays) === 1 ? "Hour" : "Hours") :111                     (pUnit === "minute") ? (Number(pDays) === 1 ? "Minute" : "Minutes") :112                     (Number(pDays) === 1 ? "Day" : "Days");113var durationDisplay = durationText;114 115// 🪄 EXACT WEBSITE/API DURATION LABEL116// Never rewrite casing, pluralisation, suffixes, or custom names.117// This fixes labels such as "1 DaYs NONROOT" and "1 Year Ios Esign Gbox Certificate".118var autoWebsiteName = durationText;119 120// Setup complete plan object with dynamic fallback name + unit info121var newPlan = {122  days: pDays,                 // ab ye numeric "value" hai (backward-compat naam)123  unit: pUnit,                 // "day" | "hour" | "minute"  ✅ NEW124  durationDisplay: durationDisplay, // ✅ NEW — human readable, jaise "1 Hour", "30 Minutes", "7 Days"125  normal_price: pNormal,126  reseller_price: pReseller,127  name_on_website: autoWebsiteName,128  api_duration: autoWebsiteName,129  // ✅ PID belongs to the individual plan, not the hack/product.130  pid: planPid,131  product_id: planPid,132  variant_id: planPid133};134 135if (productIndex !== -1) {136  if (!productList[productIndex].plans) { productList[productIndex].plans = []; }137  138  var planUpdated = false;139  for (var p = 0; p < productList[productIndex].plans.length; p++) {140    var existingUnit = productList[productIndex].plans[p].unit || "day";141    if (String(productList[productIndex].plans[p].days) === pDays && existingUnit === pUnit) {142      productList[productIndex].plans[p] = newPlan;143      planUpdated = true;144      break;145    }146  }147  148  if (!planUpdated) {149    productList[productIndex].plans.push(newPlan);150  }151  Bot.sendMessage("✅ Product <b>" + pName + "</b> me PID <code>" + planPid + "</code> ka <code>" + durationDisplay + "</code> plan ₹" + pNormal + " (Reseller: ₹" + pReseller + ") par set ho gaya!\nℹ️ <i>API Target Format: " + autoWebsiteName + "</i>", { parse_mode: "HTML" });152} else {153  var defaultEmoji = "5226656353744862682"; 154  productList.push({155    name: pName,156    emoji: defaultEmoji,157    plans: [newPlan]158  });159  Bot.sendMessage("✅ Naya Product <b>" + pName + "</b> successfully register ho gaya! PID <code>" + planPid + "</code> ke saath.\nℹ️ <i>API Target Format: " + autoWebsiteName + "</i>", { parse_mode: "HTML" });160}161 162// Database array update execution163Bot.setProperty("stored_products", productList, "json");
commands/_addplan.js · tarunpoonia905/OfcDevShopBot · TeleDevs