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
ProfileTelegram
146 commands0 envUpdated 2d agoCreated Sep 5, 2026
Back to folder

commands/_process_buy.js

javascript · 252 lines

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