tarunpoonia905/OfcDevShopBotPublic · Bot Template
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
commands/_execute_id_buy.js
javascript · 302 lines
1/**#command2name: /execute_id_buy3answer: 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// =========================================================18// 🛒 COMMAND = /execute_id_buy19// STATUS: FIXED - Real QR HTTP call + FF ID flow tracking for delivery after QR pay20// =========================================================21 22try {23 if (!params || typeof params !== "string") return;24 25 let data = params.split(" ");26 let rawType = data[0] ? data[0].toLowerCase().trim() : "";27 let actionState = data[1] ? data[1].toLowerCase().trim() : "";28 29 // Safe Callback Query ID & Context Extraction30 let queryId = request.id || (request.callback_query && request.callback_query.id);31 let userId = user.telegramid.toString().trim(); 32 let chatID = chat.chatid;33 34 // ===================================================35 // 👑 DYNAMIC PRICING SYSTEM & CATEGORY RESOLVER36 // ===================================================37 let rawResellers = Bot.getProperty("resellers_list");38 let resellers = [];39 40 if (rawResellers) {41 if (Array.isArray(rawResellers)) {42 resellers = rawResellers;43 } else if (typeof rawResellers === "string") {44 try { resellers = JSON.parse(rawResellers); } catch(e) { resellers = rawResellers.split(","); }45 } else if (typeof rawResellers === "object") {46 resellers = rawResellers.resellers || rawResellers.list || rawResellers.users || Object.values(rawResellers);47 }48 }49 if (!Array.isArray(resellers)) { resellers = []; }50 51 // Check if User is Reseller OR Admin52 let isReseller = resellers.map(function(id) {53 return id ? id.toString().toLowerCase().trim() : "";54 }).includes(userId) || (userId === String(Bot.getProperty("owner_id") || "7127818616")) || (Bot.getProperty("is_reseller_" + userId) === true);55 56 let finalCost = 0;57 let stockData = [];58 let displayTypeName = "";59 let isDynamicCategory = false;60 let isGeneralCategory = false;61 let selectedCat = null;62 63 // ✅ FIX: BJS getProperty doesn't reliably take a default 2nd arg — use || [] pattern everywhere64 let fbCategories = Bot.getProperty("fb_categories") || [];65 if (!Array.isArray(fbCategories)) { fbCategories = []; }66 67 if (rawType.startsWith("fb_")) {68 isDynamicCategory = true;69 let targetCatId = rawType.replace("fb_", "").trim();70 71 for (let i = 0; i < fbCategories.length; i++) {72 if (fbCategories[i].id === targetCatId) {73 selectedCat = fbCategories[i];74 break;75 }76 }77 78 if (!selectedCat) {79 if (queryId) Api.answerCallbackQuery({ callback_query_id: String(queryId), text: "❌ Category deleted!", show_alert: true });80 return;81 }82 83 if (isReseller && selectedCat.reseller_price !== undefined && selectedCat.reseller_price !== "") {84 finalCost = Number(selectedCat.reseller_price);85 } else {86 finalCost = Number(selectedCat.price || 0);87 }88 stockData = selectedCat.stock_list || [];89 displayTypeName = selectedCat.name;90 } else if (rawType == "fb" || rawType == "google") {91 let priceRes = parseFloat(Bot.getProperty("price_res_" + rawType) || 0);92 let priceNorm = parseFloat(Bot.getProperty("price_norm_" + rawType) || 0);93 finalCost = isReseller ? priceRes : priceNorm;94 stockData = Bot.getProperty("ff_stock_" + rawType) || [];95 displayTypeName = rawType.toUpperCase();96 } else {97 var categories = Bot.getProperty("ff_categories") || {};98 if (!categories[rawType]) {99 if (queryId) Api.answerCallbackQuery({ callback_query_id: String(queryId), text: "❌ Invalid Product!", show_alert: true });100 return;101 }102 isGeneralCategory = true;103 selectedCat = categories[rawType];104 105 if (isReseller) {106 if (selectedCat.reseller_price !== undefined && selectedCat.reseller_price !== "" && selectedCat.reseller_price !== null && Number(selectedCat.reseller_price) > 0) {107 finalCost = Number(selectedCat.reseller_price);108 } else if (selectedCat.price !== undefined && selectedCat.price !== "" && selectedCat.price !== null) {109 finalCost = Number(selectedCat.price); 110 } else {111 finalCost = Number(selectedCat.normal_price || 0);112 }113 } else {114 finalCost = Number(selectedCat.normal_price || selectedCat.price || 0);115 }116 117 let fallbackStock = Bot.getProperty("ff_stock_" + rawType) || [];118 stockData = (selectedCat.stock_list && selectedCat.stock_list.length > 0) ? selectedCat.stock_list : fallbackStock;119 displayTypeName = selectedCat.name;120 }121 122 // Out of stock hard block check123 if (!stockData || stockData.length === 0) {124 if (queryId) {125 Api.answerCallbackQuery({126 callback_query_id: String(queryId),127 text: "❌ Stock is empty! Cannot process purchase.",128 show_alert: true129 });130 } else {131 Api.sendMessage({ chat_id: chatID, text: "❌ Out of stock items cannot be processed." });132 }133 return;134 }135 136 // Wallet engine balance extraction sequence137 var userRes = Libs.ResourcesLib.userRes("balance");138 var bonusBal = Bot.getProperty("balance" + userId) || 0;139 var unifiedTotalBalance = Number(userRes.value()) + Number(bonusBal);140 141 // 🚨 INSUFFICIENT BALANCE SYSTEM -> REDIRECT TO QR WITH SHORTAGE AMOUNT142 if (unifiedTotalBalance < finalCost) {143 var needToPay = finalCost - unifiedTotalBalance;144 145 // Save details for QR generation pipeline146 User.setProperty("buy_price", finalCost, "number");147 User.setProperty("buy_needpay", needToPay, "number");148 User.setProperty("buy_prod_name", displayTypeName, "string");149 150 // ✅ FIX: Tag this purchase as an FF-ID stock-based flow so /onBuyCheck151 // knows to deliver from local stock instead of the plan-based external API152 User.setProperty("buy_flow_type", "ffid", "string");153 User.setProperty("buy_ffid_rawtype", rawType, "string");154 User.setProperty("buy_ffid_is_reseller", isReseller ? true : false, "boolean");155 156 if (queryId) {157 Api.answerCallbackQuery({ 158 callback_query_id: String(queryId), 159 text: "⚠️ Balance low! Generating QR for ₹" + needToPay + "...", 160 show_alert: true 161 });162 }163 164 // ✅ FIX: Actually call the payment server for a QR instead of directly165 // triggering /onBuyQR (which needs a real HTTP response in `content`)166 // 🔒 v8: pehle yahan default UPI ID (hardcoded) use hoti thi — ab admin ne apni UPI + keys set ki hon tabhi QR banta hai.167 if (!(Bot.getProperty("paytm_upi") || Bot.getProperty("payment_upi_id") || "paytm.s1tk6od@pty") || !(Bot.getProperty("paytm_merchant_id") || "SDfRhW21109811758334") || !(Bot.getProperty("paytm_merchant_key") || "SDfRhW21109811758334")) {168 Api.sendMessage({ chat_id: chatID, text: "⚠️ UPI (Paytm) payment abhi configure nahi hai. Kripya FamPay se pay karo ya admin se contact karo." });169 return;170 }171 var targetUrl = "https://paytm.anujbots.xyz/qr.php?upi=" + encodeURIComponent(Bot.getProperty("paytm_upi") || Bot.getProperty("payment_upi_id") || "paytm.s1tk6od@pty") + "&amount=" + encodeURIComponent(needToPay) + "&merchantid=" + encodeURIComponent(Bot.getProperty("paytm_merchant_id") || "SDfRhW21109811758334") + "&merchantkey=" + encodeURIComponent(Bot.getProperty("paytm_merchant_key") || "SDfRhW21109811758334");172 173 Api.sendMessage({174 chat_id: chatID,175 text: "<b>📉 Requesting QR from server...\n<code>" + targetUrl + "</code></b>",176 parse_mode: "HTML"177 });178 179 HTTP.get({180 url: targetUrl,181 success: "/onBuyQR",182 error: "/onBuyQR"183 });184 return;185 }186 187 // Deduct balanced values systematically188 if (bonusBal >= finalCost) {189 Bot.setProperty("balance" + userId, bonusBal - finalCost, "number");190 } else {191 var remainingDeduction = finalCost - bonusBal;192 Bot.setProperty("balance" + userId, 0, "number");193 userRes.remove(remainingDeduction);194 }195 196 // Shift asset entry from inventory safely197 var accountExtracted = stockData.shift();198 199 // Stock data save back logic200 if (isDynamicCategory && selectedCat) {201 selectedCat.stock_list = stockData;202 Bot.setProperty("fb_categories", fbCategories, "json");203 } else if (isGeneralCategory && selectedCat) {204 selectedCat.stock_list = stockData;205 var categories = Bot.getProperty("ff_categories") || {};206 categories[rawType] = selectedCat;207 Bot.setProperty("ff_categories", categories, "json");208 Bot.setProperty("ff_stock_" + rawType, stockData, "json");209 } else {210 Bot.setProperty("ff_stock_" + rawType, stockData, "json");211 }212 213 // ===================================================214 // ⚡ CRITICAL SPLIT & BOUNDARY ISOLATION215 // ===================================================216 var fullRawString = String(accountExtracted || "").trim();217 var emailData = fullRawString;218 var passwordData = "No Password Found";219 220 if (fullRawString.indexOf("|") !== -1) {221 var lastPipeIndex = fullRawString.lastIndexOf("|");222 var firstPart = fullRawString.substring(0, lastPipeIndex).trim();223 var secondPart = fullRawString.substring(lastPipeIndex + 1).trim();224 225 if (firstPart.indexOf(" ") !== -1) {226 var spaceParts = firstPart.split(" ");227 emailData = spaceParts[spaceParts.length - 1].trim();228 } else {229 emailData = firstPart;230 }231 passwordData = secondPart;232 }233 234 // ===================================================235 // 💾 AUTOMATIC HISTORY STORAGE ENGINE236 // ===================================================237 let purchasedKeys = User.getProperty("my_purchased_keys") || [];238 if (!Array.isArray(purchasedKeys)) { purchasedKeys = []; }239 240 let currentDate = new Date().toLocaleDateString('en-IN', { timeZone: 'Asia/Kolkata' });241 purchasedKeys.push({242 productName: displayTypeName,243 cost: finalCost.toString(),244 key: emailData + (passwordData !== "No Password Found" ? " | " + passwordData : ""),245 days: "Permanent", 246 date: currentDate247 });248 User.setProperty("my_purchased_keys", purchasedKeys, "json");249 250 // ===================================================251 // ⭐ COMPACT USER DISPLAY LOGIC252 // ===================================================253 var deliveryText = 254 "┏━━━━━━━━━━━━━━━━━━━━━━━━┓\n" +255 "┃ <tg-emoji emoji-id='6267140231632262769'>❤️🔥</tg-emoji> <b>PURCHASE SUCCESSFUL!</b> <tg-emoji emoji-id='6267140231632262769'>❤️🔥</tg-emoji> ┃\n" +256 "┗━━━━━━━━━━━━━━━━━━━━━━━━┛\n\n" +257 "<tg-emoji emoji-id='5463172695132745432'>📦</tg-emoji> <b>Item:</b> <code>" + displayTypeName + "</code>\n" +258 "<tg-emoji emoji-id='6267068789146260253'>💰</tg-emoji> <b>Paid:</b> <code>₹" + finalCost + "</code> " + (isReseller ? "<b>(Reseller)</b>" : "") + "\n" +259 "━━━━━━━━━━━━━━━━━━━━━━━━━━\n" +260 "<tg-emoji emoji-id='6145572393499762737'>👤</tg-emoji> <b>ACCOUNT DETAILS:</b>\n\n" +261 "<tg-emoji emoji-id='6041705726206808304'>🚀</tg-emoji> <b>Email:</b> <code>" + emailData + "</code>\n" +262 "<tg-emoji emoji-id='5902002809573740949'>🔒</tg-emoji> <b>Password:</b> <code>" + passwordData + "</code>\n" +263 "━━━━━━━━━━━━━━━━━━━━━━━━━━\n" +264 "<tg-emoji emoji-id='5210956306952758910'>⚠️</tg-emoji> <i>Copy details instantly.</i>";265 266 Api.sendMessage({267 chat_id: chatID,268 text: deliveryText,269 parse_mode: "HTML"270 });271 272 if (queryId) {273 Api.answerCallbackQuery({274 callback_query_id: String(queryId),275 text: "✅ Released Successfully!",276 show_alert: false277 });278 }279 280 // ===================================================281 // 🔔 COMPACT ADMIN NOTIFICATION PIPELINE282 // ===================================================283 var adminLogChannel = String(Bot.getProperty("owner_id") || "7127818616"); 284 var adminNotificationMsg = 285 "<blockquote><tg-emoji emoji-id='5447644880824181073'>⚠️</tg-emoji> <b>NEW ORDER ALERT</b>" + (isReseller ? " [RESELLER]" : "") + "</blockquote>\n" +286 "👤 <b>User:</b> <a href='tg://user?id=" + userId + "'>" + user.first_name + "</a> (<code>" + userId + "</code>)\n" +287 "📦 <b>Item:</b> <code>" + displayTypeName + "</code>\n" +288 "💰 <b>Revenue:</b> <code>₹" + finalCost + "</code>\n" +289 "⚡ <b>Stock Left:</b> <code>" + stockData.length + " units</code>\n\n" +290 "🖥 <b>ACCOUNT DETAILS:</b>\n" +291 "➔ <b>Email:</b> <code>" + emailData + "</code>\n" +292 "➔ <b>Password:</b> <code>" + passwordData + "</code>";293 294 Api.sendMessage({295 chat_id: adminLogChannel,296 text: adminNotificationMsg,297 parse_mode: "HTML"298 });299 300} catch(e) {301 Bot.sendMessage("Critical Execution Failure Module Error: " + e.message);302}