ashoksarande3/ASHOK_HACK_STORE_BOTPublic ยท Bot Template
AIThis bot operates as a commercial storefront for selling Free Fire game hacks and cheats via UPI QR code payments. It features a dynamic pricing system with separate normal and reseller prices, product plans with flexible durations (days, hours, minutes), and a reseller program requiring a one-time upgrade fee. The bot handles payment verification through QR code generation and expiry tracking, user verification via Telegram contact sharing, and admin tools for stock management, plan creation, and ownership transfer. It includes a balance system, maintenance mode, and Telegram Stars payment fallback. The codebase uses TeleBotHost's TBL JavaScript APIs (Bot, Api, HTTP, db properties, Libs) for all logic.
commands/_process_buy.js
javascript ยท 257 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 === "8660373585");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 = Bot.getProperty("balance" + userId) || 0;125 var unifiedTotalBalance = Number(userRes.value()) + Number(bonusBal);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=7796796576@yesfam&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 if (bonusBal >= finalCost) {158 Bot.setProperty("balance" + userId, bonusBal - finalCost, "number");159 } else {160 var remainingDeduction = finalCost - bonusBal;161 Bot.setProperty("balance" + userId, 0, "number");162 userRes.remove(remainingDeduction);163 }164 165 var accountExtracted = stockData.shift();166 167 if (isDynamicCategory && selectedCat) {168 selectedCat.stock_list = stockData;169 Bot.setProperty("fb_categories", fbCategories, "json");170 } else if (isGeneralCategory && selectedCat) {171 selectedCat.stock_list = stockData;172 var categories = Bot.getProperty("ff_categories") || {};173 categories[rawType] = selectedCat;174 Bot.setProperty("ff_categories", categories, "json");175 Bot.setProperty("ff_stock_" + rawType, stockData, "json");176 } else {177 Bot.setProperty("ff_stock_" + rawType, stockData, "json");178 }179 180 var fullRawString = String(accountExtracted || "").trim();181 var emailData = fullRawString;182 var passwordData = "No Password Found";183 184 if (fullRawString.indexOf("|") !== -1) {185 var lastPipeIndex = fullRawString.lastIndexOf("|");186 var firstPart = fullRawString.substring(0, lastPipeIndex).trim();187 var secondPart = fullRawString.substring(lastPipeIndex + 1).trim();188 189 if (firstPart.indexOf(" ") !== -1) {190 var spaceParts = firstPart.split(" ");191 emailData = spaceParts[spaceParts.length - 1].trim();192 } else {193 emailData = firstPart;194 }195 passwordData = secondPart;196 }197 198 let purchasedKeys = User.getProperty("my_purchased_keys") || [];199 if (!Array.isArray(purchasedKeys)) { purchasedKeys = []; }200 201 let currentDate = new Date().toLocaleDateString('en-IN', { timeZone: 'Asia/Kolkata' });202 purchasedKeys.push({203 productName: displayTypeName,204 cost: finalCost.toString(),205 key: emailData + (passwordData !== "No Password Found" ? " | " + passwordData : ""),206 days: "Permanent", 207 date: currentDate208 });209 User.setProperty("my_purchased_keys", purchasedKeys, "json");210 211 var deliveryText = 212 "โโโโโโโโโโโโโโโโโโโโโโโโโโ\n" +213 "โ โค๏ธโ๐ฅ <b>PURCHASE SUCCESSFUL!</b> โค๏ธโ๐ฅ โ\n" +214 "โโโโโโโโโโโโโโโโโโโโโโโโโโ\n\n" +215 "๐ฆ <b>Item:</b> <code>" + displayTypeName + "</code>\n" +216 "๐ฐ <b>Paid:</b> <code>โน" + finalCost + "</code> " + (isReseller ? "<b>(Reseller)</b>" : "") + "\n" +217 "โโโโโโโโโโโโโโโโโโโโโโโโโโ\n" +218 "๐ค <b>ACCOUNT DETAILS:</b>\n\n" +219 "๐ <b>Email:</b> <code>" + emailData + "</code>\n" +220 "๐ <b>Password:</b> <code>" + passwordData + "</code>\n" +221 "โโโโโโโโโโโโโโโโโโโโโโโโโโ\n" +222 "โ ๏ธ <i>Copy details instantly.</i>";223 224 Api.sendMessage({225 chat_id: chatID,226 text: deliveryText,227 parse_mode: "HTML"228 });229 230 if (queryId) {231 Api.answerCallbackQuery({232 callback_query_id: String(queryId),233 text: "โ
Released Successfully!",234 show_alert: false235 });236 }237 238 var adminLogChannel = "8660373585"; 239 var adminNotificationMsg = 240 "<blockquote>โ ๏ธ <b>NEW ORDER ALERT</b>" + (isReseller ? " [RESELLER]" : "") + "</blockquote>\n" +241 "๐ค <b>User:</b> <a href='tg://user?id=" + userId + "'>" + user.first_name + "</a> (<code>" + userId + "</code>)\n" +242 "๐ฆ <b>Item:</b> <code>" + displayTypeName + "</code>\n" +243 "๐ฐ <b>Revenue:</b> <code>โน" + finalCost + "</code>\n" +244 "โก <b>Stock Left:</b> <code>" + stockData.length + " units</code>\n\n" +245 "๐ฅ <b>ACCOUNT DETAILS:</b>\n" +246 "โ <b>Email:</b> <code>" + emailData + "</code>\n" +247 "โ <b>Password:</b> <code>" + passwordData + "</code>";248 249 Api.sendMessage({250 chat_id: adminLogChannel,251 text: adminNotificationMsg,252 parse_mode: "HTML"253 });254 255} catch(e) {256 Bot.sendMessage("Critical Execution Failure Module Error: " + e.message);257}