indrajitghosh20006/HgfhhuybotPublic · Bot Template

ProfileTelegram

AIThis bot provides a command‑based admin interface for managing user balances, products, and resellers. It supports adding balances via UPI or Binance Pay, approving payments, and configuring product details and categories. The bot also handles user role changes, stock uploads, and offers a simple calculator UI for entering amounts. All interactions are handled through short commands and inline keyboards, with no long‑running listeners or external frameworks.

Utilityadminbalanceproductresellerpaymentupi
138 commands0 envUpdated 15h agoCreated Sep 27, 2026
Back to folder

commands/_process_buy.js

javascript · 251 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 === "7839151435");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 unifiedTotalBalance = Number(userRes.value()) || 0;125 126  if (unifiedTotalBalance < finalCost) {127      var needToPay = finalCost - unifiedTotalBalance;128      129      User.setProperty("buy_price", finalCost, "number");130      User.setProperty("buy_needpay", needToPay, "number");131      User.setProperty("buy_prod_name", displayTypeName, "string");132 133      if (queryId) {134          Api.answerCallbackQuery({ 135              callback_query_id: String(queryId), 136              text: "⚠️ Balance low! Generating QR for ₹" + needToPay + "...", 137              show_alert: true 138          });139      }140 141      var targetUrl = "https://fampay.anujbots.xyz/qr.php?upi=" + encodeURIComponent(Bot.getProperty("payment_upi_id") || "devreang@fam") + "&amount=" + needToPay;142 143      Api.sendMessage({144          chat_id: chatID,145          text: "<b>📉 Requesting QR from server...\n<code>" + targetUrl + "</code></b>",146          parse_mode: "HTML"147      });148 149      HTTP.get({150          url: targetUrl,151          success: "/onBuyQR"152      });153      return;154  }155 156  // Single wallet deduction — prevents double-balance accounting.157  userRes.remove(finalCost);158 159  var accountExtracted = stockData.shift();160  161  if (isDynamicCategory && selectedCat) {162      selectedCat.stock_list = stockData;163      Bot.setProperty("fb_categories", fbCategories, "json");164  } else if (isGeneralCategory && selectedCat) {165      selectedCat.stock_list = stockData;166      var categories = Bot.getProperty("ff_categories") || {};167      categories[rawType] = selectedCat;168      Bot.setProperty("ff_categories", categories, "json");169      Bot.setProperty("ff_stock_" + rawType, stockData, "json");170  } else {171      Bot.setProperty("ff_stock_" + rawType, stockData, "json");172  }173 174  var fullRawString = String(accountExtracted || "").trim();175  var emailData = fullRawString;176  var passwordData = "No Password Found";177 178  if (fullRawString.indexOf("|") !== -1) {179      var lastPipeIndex = fullRawString.lastIndexOf("|");180      var firstPart = fullRawString.substring(0, lastPipeIndex).trim();181      var secondPart = fullRawString.substring(lastPipeIndex + 1).trim();182 183      if (firstPart.indexOf(" ") !== -1) {184          var spaceParts = firstPart.split(" ");185          emailData = spaceParts[spaceParts.length - 1].trim();186      } else {187          emailData = firstPart;188      }189      passwordData = secondPart;190  }191 192  let purchasedKeys = User.getProperty("my_purchased_keys") || [];193  if (!Array.isArray(purchasedKeys)) { purchasedKeys = []; }194  195  let currentDate = new Date().toLocaleDateString('en-IN', { timeZone: 'Asia/Kolkata' });196  purchasedKeys.push({197      productName: displayTypeName,198      cost: finalCost.toString(),199      key: emailData + (passwordData !== "No Password Found" ? " | " + passwordData : ""),200      days: "Permanent", 201      date: currentDate202  });203  User.setProperty("my_purchased_keys", purchasedKeys, "json");204 205  var deliveryText = 206    "┏━━━━━━━━━━━━━━━━━━━━━━━━┓\n" +207    "┃ ❤️‍🔥 <b>PURCHASE SUCCESSFUL!</b> ❤️‍🔥 ┃\n" +208    "┗━━━━━━━━━━━━━━━━━━━━━━━━┛\n\n" +209    "📦 <b>Item:</b> <code>" + displayTypeName + "</code>\n" +210    "💰 <b>Paid:</b> <code>₹" + finalCost + "</code> " + (isReseller ? "<b>(Reseller)</b>" : "") + "\n" +211    "━━━━━━━━━━━━━━━━━━━━━━━━━━\n" +212    "👤 <b>ACCOUNT DETAILS:</b>\n\n" +213    "🚀 <b>Email:</b> <code>" + emailData + "</code>\n" +214    "🔒 <b>Password:</b> <code>" + passwordData + "</code>\n" +215    "━━━━━━━━━━━━━━━━━━━━━━━━━━\n" +216    "⚠️ <i>Copy details instantly.</i>";217 218  Api.sendMessage({219      chat_id: chatID,220      text: deliveryText,221      parse_mode: "HTML"222  });223 224  if (queryId) {225      Api.answerCallbackQuery({226          callback_query_id: String(queryId),227          text: "✅ Released Successfully!",228          show_alert: false229      });230  }231 232  var adminLogChannel = "7839151435"; 233  var adminNotificationMsg = 234    "<blockquote>⚠️ <b>NEW ORDER ALERT</b>" + (isReseller ? " [RESELLER]" : "") + "</blockquote>\n" +235    "👤 <b>User:</b> <a href='tg://user?id=" + userId + "'>" + user.first_name + "</a> (<code>" + userId + "</code>)\n" +236    "📦 <b>Item:</b> <code>" + displayTypeName + "</code>\n" +237    "💰 <b>Revenue:</b> <code>₹" + finalCost + "</code>\n" +238    "⚡ <b>Stock Left:</b> <code>" + stockData.length + " units</code>\n\n" +239    "🖥 <b>ACCOUNT DETAILS:</b>\n" +240    "➔ <b>Email:</b> <code>" + emailData + "</code>\n" +241    "➔ <b>Password:</b> <code>" + passwordData + "</code>";242 243  Api.sendMessage({244      chat_id: adminLogChannel,245      text: adminNotificationMsg,246      parse_mode: "HTML"247  });248 249} catch(e) {250  Bot.sendMessage("Critical Execution Failure Module Error: " + e.message);251}