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/_process_buy.js
javascript · 252 lines
1/**#command2name: /process_buy3answer: 4keyboard: 5parse_mode: markdown6aliases: 7allow_only_group: false8need_reply: false9is_web: 010#command**/11 12// =========================================================13// 🛒 COMMAND = /process_buy (ORIGINAL)14// =========================================================15 16try {17 if (!params || typeof params !== "string") return;18 19 let data = params.split(" ");20 let rawType = data[0] ? data[0].toLowerCase().trim() : "";21 let actionState = data[1] ? data[1].toLowerCase().trim() : "";22 23 let queryId = request.id || (request.callback_query && request.callback_query.id);24 let userId = user.telegramid.toString().trim(); 25 let chatID = chat.chatid;26 27 let rawResellers = Bot.getProperty("resellers_list");28 let resellers = [];29 30 if (rawResellers) {31 if (Array.isArray(rawResellers)) {32 resellers = rawResellers;33 } else if (typeof rawResellers === "string") {34 try { resellers = JSON.parse(rawResellers); } catch(e) { resellers = rawResellers.split(","); }35 } else if (typeof rawResellers === "object") {36 resellers = rawResellers.resellers || rawResellers.list || rawResellers.users || Object.values(rawResellers);37 }38 }39 if (!Array.isArray(resellers)) { resellers = []; }40 41 let isReseller = resellers.map(function(id) {42 return id ? id.toString().toLowerCase().trim() : "";43 }).includes(userId) || (userId === "8477746023");44 45 let finalCost = 0;46 let stockData = [];47 let displayTypeName = "";48 let isDynamicCategory = false;49 let isGeneralCategory = false;50 let selectedCat = null;51 52 let fbCategories = Bot.getProperty("fb_categories", []);53 if (!Array.isArray(fbCategories)) { fbCategories = []; }54 55 if (rawType.startsWith("fb_")) {56 isDynamicCategory = true;57 let targetCatId = rawType.replace("fb_", "").trim();58 59 for (let i = 0; i < fbCategories.length; i++) {60 if (fbCategories[i].id === targetCatId) {61 selectedCat = fbCategories[i];62 break;63 }64 }65 66 if (!selectedCat) {67 if (queryId) Api.answerCallbackQuery({ callback_query_id: queryId, text: "❌ Category deleted!", show_alert: true });68 return;69 }70 71 if (isReseller && selectedCat.reseller_price !== undefined && selectedCat.reseller_price !== "") {72 finalCost = Number(selectedCat.reseller_price);73 } else {74 finalCost = Number(selectedCat.price || 0);75 }76 stockData = selectedCat.stock_list || [];77 displayTypeName = selectedCat.name;78 } else if (rawType == "fb" || rawType == "google") {79 let priceRes = parseFloat(Bot.getProperty("price_res_" + rawType) || 0);80 let priceNorm = parseFloat(Bot.getProperty("price_norm_" + rawType) || 0);81 finalCost = isReseller ? priceRes : priceNorm;82 stockData = Bot.getProperty("ff_stock_" + rawType) || [];83 displayTypeName = rawType.toUpperCase();84 } else {85 var categories = Bot.getProperty("ff_categories") || {};86 if (!categories[rawType]) {87 if (queryId) Api.answerCallbackQuery({ callback_query_id: String(queryId), text: "❌ Invalid Product!", show_alert: true });88 return;89 }90 isGeneralCategory = true;91 selectedCat = categories[rawType];92 93 if (isReseller) {94 if (selectedCat.reseller_price !== undefined && selectedCat.reseller_price !== "" && selectedCat.reseller_price !== null && Number(selectedCat.reseller_price) > 0) {95 finalCost = Number(selectedCat.reseller_price);96 } else if (selectedCat.price !== undefined && selectedCat.price !== "" && selectedCat.price !== null) {97 finalCost = Number(selectedCat.price); 98 } else {99 finalCost = Number(selectedCat.normal_price || 0);100 }101 } else {102 finalCost = Number(selectedCat.normal_price || selectedCat.price || 0);103 }104 105 let fallbackStock = Bot.getProperty("ff_stock_" + rawType) || [];106 stockData = (selectedCat.stock_list && selectedCat.stock_list.length > 0) ? selectedCat.stock_list : fallbackStock;107 displayTypeName = selectedCat.name;108 }109 110 if (!stockData || stockData.length === 0) {111 if (queryId) {112 Api.answerCallbackQuery({113 callback_query_id: String(queryId),114 text: "❌ Stock is empty! Cannot process purchase.",115 show_alert: true116 });117 } else {118 Api.sendMessage({ chat_id: chatID, text: "❌ Out of stock items cannot be processed." });119 }120 return;121 }122 123 var userRes = Libs.ResourcesLib.userRes("balance");124 var bonusBal = 0; // legacy balance property disabled125 var unifiedTotalBalance = Number(userRes.value()) || 0;126 127 if (unifiedTotalBalance < finalCost) {128 var needToPay = finalCost - unifiedTotalBalance;129 130 User.setProperty("buy_price", finalCost, "number");131 User.setProperty("buy_needpay", needToPay, "number");132 User.setProperty("buy_prod_name", displayTypeName, "string");133 134 if (queryId) {135 Api.answerCallbackQuery({ 136 callback_query_id: String(queryId), 137 text: "⚠️ Balance low! Generating QR for ₹" + needToPay + "...", 138 show_alert: true 139 });140 }141 142 var targetUrl = "https://fampay.anujbots.xyz/qr.php?upi=" + encodeURIComponent(Bot.getProperty("payment_upi_id") || "ayushrds@nyes") + "&amount=" + needToPay;143 144 Api.sendMessage({145 chat_id: chatID,146 text: "<b>📉 Requesting QR from server...\n<code>" + targetUrl + "</code></b>",147 parse_mode: "HTML"148 });149 150 HTTP.get({151 url: targetUrl,152 success: "/onBuyQR"153 });154 return;155 }156 157 // 💳 Deduct from the single canonical wallet.158 userRes.remove(finalCost);159 160 var accountExtracted = stockData.shift();161 162 if (isDynamicCategory && selectedCat) {163 selectedCat.stock_list = stockData;164 Bot.setProperty("fb_categories", fbCategories, "json");165 } else if (isGeneralCategory && selectedCat) {166 selectedCat.stock_list = stockData;167 var categories = Bot.getProperty("ff_categories") || {};168 categories[rawType] = selectedCat;169 Bot.setProperty("ff_categories", categories, "json");170 Bot.setProperty("ff_stock_" + rawType, stockData, "json");171 } else {172 Bot.setProperty("ff_stock_" + rawType, stockData, "json");173 }174 175 var fullRawString = String(accountExtracted || "").trim();176 var emailData = fullRawString;177 var passwordData = "No Password Found";178 179 if (fullRawString.indexOf("|") !== -1) {180 var lastPipeIndex = fullRawString.lastIndexOf("|");181 var firstPart = fullRawString.substring(0, lastPipeIndex).trim();182 var secondPart = fullRawString.substring(lastPipeIndex + 1).trim();183 184 if (firstPart.indexOf(" ") !== -1) {185 var spaceParts = firstPart.split(" ");186 emailData = spaceParts[spaceParts.length - 1].trim();187 } else {188 emailData = firstPart;189 }190 passwordData = secondPart;191 }192 193 let purchasedKeys = User.getProperty("my_purchased_keys") || [];194 if (!Array.isArray(purchasedKeys)) { purchasedKeys = []; }195 196 let currentDate = new Date().toLocaleDateString('en-IN', { timeZone: 'Asia/Kolkata' });197 purchasedKeys.push({198 productName: displayTypeName,199 cost: finalCost.toString(),200 key: emailData + (passwordData !== "No Password Found" ? " | " + passwordData : ""),201 days: "Permanent", 202 date: currentDate203 });204 User.setProperty("my_purchased_keys", purchasedKeys, "json");205 206 var deliveryText = 207 "┏━━━━━━━━━━━━━━━━━━━━━━━━┓\n" +208 "┃ ❤️🔥 <b>PURCHASE SUCCESSFUL!</b> ❤️🔥 ┃\n" +209 "┗━━━━━━━━━━━━━━━━━━━━━━━━┛\n\n" +210 "📦 <b>Item:</b> <code>" + displayTypeName + "</code>\n" +211 "💰 <b>Paid:</b> <code>₹" + finalCost + "</code> " + (isReseller ? "<b>(Reseller)</b>" : "") + "\n" +212 "━━━━━━━━━━━━━━━━━━━━━━━━━━\n" +213 "👤 <b>ACCOUNT DETAILS:</b>\n\n" +214 "🚀 <b>Email:</b> <code>" + emailData + "</code>\n" +215 "🔒 <b>Password:</b> <code>" + passwordData + "</code>\n" +216 "━━━━━━━━━━━━━━━━━━━━━━━━━━\n" +217 "⚠️ <i>Copy details instantly.</i>";218 219 Api.sendMessage({220 chat_id: chatID,221 text: deliveryText,222 parse_mode: "HTML"223 });224 225 if (queryId) {226 Api.answerCallbackQuery({227 callback_query_id: String(queryId),228 text: "✅ Released Successfully!",229 show_alert: false230 });231 }232 233 var adminLogChannel = "8477746023"; 234 var adminNotificationMsg = 235 "<blockquote>⚠️ <b>NEW ORDER ALERT</b>" + (isReseller ? " [RESELLER]" : "") + "</blockquote>\n" +236 "👤 <b>User:</b> <a href='tg://user?id=" + userId + "'>" + user.first_name + "</a> (<code>" + userId + "</code>)\n" +237 "📦 <b>Item:</b> <code>" + displayTypeName + "</code>\n" +238 "💰 <b>Revenue:</b> <code>₹" + finalCost + "</code>\n" +239 "⚡ <b>Stock Left:</b> <code>" + stockData.length + " units</code>\n\n" +240 "🖥 <b>ACCOUNT DETAILS:</b>\n" +241 "➔ <b>Email:</b> <code>" + emailData + "</code>\n" +242 "➔ <b>Password:</b> <code>" + passwordData + "</code>";243 244 Api.sendMessage({245 chat_id: adminLogChannel,246 text: adminNotificationMsg,247 parse_mode: "HTML"248 });249 250} catch(e) {251 Bot.sendMessage("Critical Execution Failure Module Error: " + e.message);252}