indrajitghosh20006/Igstore_01botPublic Β· Bot Template
AIThe bot provides an admin interface for a digital store, allowing the owner or coβadmins to add balances, products, plans, and categories. It supports payment workflows via UPI and Binance Pay, automatically generating QR codes and handling manual approval of deposits. The code patches inline keyboards to use premium emoji icons and includes helper functions for user and bot properties. Overall, it serves as a commerce management tool for a Telegram-based storefront.
Commercestoreadminbalanceproductplancategory
170 commands0 envUpdated 8h agoCreated Oct 30, 2026
commands/_process_buy.js
javascript Β· 269 lines
1/**#command2name: /process_buy3answer: 4keyboard: 5parse_mode: markdown6aliases: 7allow_only_group: false8need_reply: false9is_web: 010#command**/11 12/**#command13name: /process_buy14answer: 15keyboard: 16parse_mode: markdown17aliases: 18allow_only_group: false19need_reply: false20case_insensitive: false21is_web: 022#command**/23 24// =========================================================25// π COMMAND = /process_buy (ORIGINAL)26// =========================================================27 28try {29 if (!params || typeof params !== "string") return;30 31 let data = params.split(" ");32 let rawType = data[0] ? data[0].toLowerCase().trim() : "";33 let actionState = data[1] ? data[1].toLowerCase().trim() : "";34 35 let queryId = request.id || (request.callback_query && request.callback_query.id);36 let userId = user.telegramid.toString().trim(); 37 let chatID = chat.chatid;38 39 let rawResellers = Bot.getProperty("resellers_list");40 let resellers = [];41 42 if (rawResellers) {43 if (Array.isArray(rawResellers)) {44 resellers = rawResellers;45 } else if (typeof rawResellers === "string") {46 try { resellers = JSON.parse(rawResellers); } catch(e) { resellers = rawResellers.split(","); }47 } else if (typeof rawResellers === "object") {48 resellers = rawResellers.resellers || rawResellers.list || rawResellers.users || Object.values(rawResellers);49 }50 }51 if (!Array.isArray(resellers)) { resellers = []; }52 53 let isReseller = resellers.map(function(id) {54 return id ? id.toString().toLowerCase().trim() : "";55 }).includes(userId) || (userId === "7839151435");56 57 let finalCost = 0;58 let stockData = [];59 let displayTypeName = "";60 let isDynamicCategory = false;61 let isGeneralCategory = false;62 let selectedCat = null;63 64 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: 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 if (!stockData || stockData.length === 0) {123 if (queryId) {124 Api.answerCallbackQuery({125 callback_query_id: String(queryId),126 text: "β Stock is empty! Cannot process purchase.",127 show_alert: true128 });129 } else {130 Api.sendMessage({ chat_id: chatID, text: "β Out of stock items cannot be processed." });131 }132 return;133 }134 135 var userRes = Libs.ResourcesLib.userRes("balance");136 var bonusBal = Bot.getProperty("balance" + userId) || 0;137 var unifiedTotalBalance = Number(userRes.value()) + Number(bonusBal);138 139 if (unifiedTotalBalance < finalCost) {140 var needToPay = finalCost - unifiedTotalBalance;141 142 User.setProperty("buy_price", finalCost, "number");143 User.setProperty("buy_needpay", needToPay, "number");144 User.setProperty("buy_prod_name", displayTypeName, "string");145 146 if (queryId) {147 Api.answerCallbackQuery({ 148 callback_query_id: String(queryId), 149 text: "β οΈ Balance low! Generating QR for βΉ" + needToPay + "...", 150 show_alert: true 151 });152 }153 154 var gramApiKey = String(Bot.getProperty("gramupi_api_key") || "").trim();155 if (!gramApiKey) {156 Api.sendMessage({ chat_id: chatID, text: "β Gram UPI Gateway API Key configured nahi hai. Admin Panel se set karein.", parse_mode: "HTML" });157 return;158 }159 var exactGramAmount = Number(needToPay.toFixed(2));160 Api.sendMessage({ chat_id: chatID, text: "<b>π Creating Gram UPI Gateway order for βΉ" + exactGramAmount.toFixed(2) + "...</b>", parse_mode: "HTML" });161 HTTP.get({162 url: "https://gateway.anujbots.in/autoqr.php?api_key=" + encodeURIComponent(String(gramApiKey)) + "&amount=" + encodeURIComponent(String(exactGramAmount)),163 success: "/onBuyQR",164 error: "/onApiError"165 });166 return;167 }168 169 if (bonusBal >= finalCost) {170 Bot.setProperty("balance" + userId, bonusBal - finalCost, "number");171 } else {172 var remainingDeduction = finalCost - bonusBal;173 Bot.setProperty("balance" + userId, 0, "number");174 userRes.remove(remainingDeduction);175 }176 177 var accountExtracted = stockData.shift();178 179 if (isDynamicCategory && selectedCat) {180 selectedCat.stock_list = stockData;181 Bot.setProperty("fb_categories", fbCategories, "json");182 } else if (isGeneralCategory && selectedCat) {183 selectedCat.stock_list = stockData;184 var categories = Bot.getProperty("ff_categories") || {};185 categories[rawType] = selectedCat;186 Bot.setProperty("ff_categories", categories, "json");187 Bot.setProperty("ff_stock_" + rawType, stockData, "json");188 } else {189 Bot.setProperty("ff_stock_" + rawType, stockData, "json");190 }191 192 var fullRawString = String(accountExtracted || "").trim();193 var emailData = fullRawString;194 var passwordData = "No Password Found";195 196 if (fullRawString.indexOf("|") !== -1) {197 var lastPipeIndex = fullRawString.lastIndexOf("|");198 var firstPart = fullRawString.substring(0, lastPipeIndex).trim();199 var secondPart = fullRawString.substring(lastPipeIndex + 1).trim();200 201 if (firstPart.indexOf(" ") !== -1) {202 var spaceParts = firstPart.split(" ");203 emailData = spaceParts[spaceParts.length - 1].trim();204 } else {205 emailData = firstPart;206 }207 passwordData = secondPart;208 }209 210 let purchasedKeys = User.getProperty("my_purchased_keys") || [];211 if (!Array.isArray(purchasedKeys)) { purchasedKeys = []; }212 213 let currentDate = new Date().toLocaleDateString('en-IN', { timeZone: 'Asia/Kolkata' });214 purchasedKeys.push({215 productName: displayTypeName,216 cost: finalCost.toString(),217 key: emailData + (passwordData !== "No Password Found" ? " | " + passwordData : ""),218 days: "Permanent", 219 date: currentDate220 });221 User.setProperty("my_purchased_keys", purchasedKeys, "json");222 223 var deliveryText = 224 "ββββββββββββββββββββββββββ\n" +225 "β β€οΈβπ₯ <b>PURCHASE SUCCESSFUL!</b> β€οΈβπ₯ β\n" +226 "ββββββββββββββββββββββββββ\n\n" +227 "π¦ <b>Item:</b> <code>" + displayTypeName + "</code>\n" +228 "π° <b>Paid:</b> <code>βΉ" + finalCost + "</code> " + (isReseller ? "<b>(Reseller)</b>" : "") + "\n" +229 "ββββββββββββββββββββββββββ\n" +230 "π€ <b>ACCOUNT DETAILS:</b>\n\n" +231 "π <b>Email:</b> <code>" + emailData + "</code>\n" +232 "π <b>Password:</b> <code>" + passwordData + "</code>\n" +233 "ββββββββββββββββββββββββββ\n" +234 "β οΈ <i>Copy details instantly.</i>";235 236 Api.sendMessage({237 chat_id: chatID,238 text: deliveryText,239 parse_mode: "HTML"240 });241 242 if (queryId) {243 Api.answerCallbackQuery({244 callback_query_id: String(queryId),245 text: "β
Released Successfully!",246 show_alert: false247 });248 }249 250 var adminLogChannel = "7839151435"; 251 var adminNotificationMsg = 252 "<blockquote>β οΈ <b>NEW ORDER ALERT</b>" + (isReseller ? " [RESELLER]" : "") + "</blockquote>\n" +253 "π€ <b>User:</b> <a href='tg://user?id=" + userId + "'>" + user.first_name + "</a> (<code>" + userId + "</code>)\n" +254 "π¦ <b>Item:</b> <code>" + displayTypeName + "</code>\n" +255 "π° <b>Revenue:</b> <code>βΉ" + finalCost + "</code>\n" +256 "β‘ <b>Stock Left:</b> <code>" + stockData.length + " units</code>\n\n" +257 "π₯ <b>ACCOUNT DETAILS:</b>\n" +258 "β <b>Email:</b> <code>" + emailData + "</code>\n" +259 "β <b>Password:</b> <code>" + passwordData + "</code>";260 261 Api.sendMessage({262 chat_id: adminLogChannel,263 text: adminNotificationMsg,264 parse_mode: "HTML"265 });266 267} catch(e) {268 Bot.sendMessage("Critical Execution Failure Module Error: " + e.message);269}