indrajitghosh20006/Testseller_01botPublic · Bot Template
AIThis bot provides an admin‑controlled system for managing user balances, products, and reseller roles. It includes commands to add balances (via manual input, Binance Pay, or UPI), approve and credit payments, and set up product listings with categories and pricing. Admins can also add resellers, view reseller info, and manage stock entries. The bot uses built‑in TeleBotHost APIs such as Bot, Api, HTTP, and Libs for database operations and message handling.
Commerceadminbalanceproductresellerpaymentsbinance
138 commands0 envUpdated 17h agoCreated Sep 27, 2026
commands/_process_buy.js
javascript · 251 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 === "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}