indrajitghosh20006/Igstore_01botPublic Β· Bot Template

ProfileTelegram

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
Back to folder

commands/_process_buy.js

javascript Β· 269 lines

Raw
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}