kkapil9112/Aestheticmodes9_botPublic · Bot Template
AIA Telegram-based digital goods store bot with a full admin panel for managing products, plans, stock, keys, categories, resellers, balances, and coupons. It uses TeleBotHost APIs like Bot, Api, User, Libs.ResourcesLib, and HTTP to run a shop interface, handle admin-only commands, track users, and send inventory/balance summaries. The implementation appears focused on selling game-related accounts and keys such as FreeFire items, with customer-facing store, balance, coupon, and back-to-menu flows.
Commerceshopadmin-panelbalanceresellercouponsstock-management
102 commands1 envUpdated 29d agoCreated Aug 9, 2026
commands/_onBuyCheck.js
javascript · 338 lines
1/**#command2name: /onBuyCheck3answer: 4keyboard: 5parse_mode: markdown6aliases: 7allow_only_group: false8need_reply: false9is_web: 010#command**/11 12try {13 var userId = user.telegramid;14 15 // 🛑 Verifying Lock Check16 var isChecking = User.getProperty("buy_verifying_lock_" + userId);17 if (isChecking) {18 if (request && request.id) {19 Api.answerCallbackQuery({20 callback_query_id: String(request.id),21 text: "⏳ ALREADY CHECKING — PLEASE WAIT...",22 show_alert: true23 });24 }25 return;26 }27 28 User.setProperty("buy_verifying_lock_" + userId, true, "boolean");29 30 if (!content) {31 Api.editMessageCaption({32 chat_id: chat.chatid, message_id: request.message.message_id,33 caption: "<blockquote>⚠️ <b>Server didn't respond.</b>\nClick 'I have paid' again.</blockquote>", parse_mode: "HTML"34 });35 return;36 }37 38 var res = (typeof content === "object") ? content : JSON.parse(content);39 40 if (res.status === "success" && res.data) {41 var utr = res.data.utr;42 var isPaid = Bot.getProperty("paid_" + utr);43 44 if (isPaid) {45 // ✅ FIX: Vanish the QR completely instead of leaving a stale "already used" caption behind46 try {47 Api.deleteMessage({ chat_id: chat.chatid, message_id: request.message.message_id });48 } catch (e) {}49 50 try {51 Bot.setProperty("buy_qr_msg_id_" + userId, null, "string");52 User.setProperty("buy_qr_msg_id_" + userId, null, "string");53 } catch (e) {}54 55 if (request && request.id) {56 try {57 Api.answerCallbackQuery({58 callback_query_id: String(request.id),59 text: "✅ ALREADY CLAIMED ✅\nYe order pehle hi deliver ho chuka hai.",60 show_alert: true61 });62 } catch (e) {}63 }64 65 Api.sendMessage({66 chat_id: chat.chatid,67 text: "<blockquote><tg-emoji emoji-id='5330237710655306682'>✅</tg-emoji> <b>ORDER ALREADY CLAIMED</b>\n<i>Ye payment pehle hi verify ho kar item deliver ho chuka hai. Apni keys 'All History' me check karein.</i></blockquote>",68 parse_mode: "HTML",69 reply_markup: JSON.stringify({70 inline_keyboard: [[71 { text: "📜 My Keys", callback_data: "/mykey", style: "primary" },72 { text: "🛒 Shop Menu", callback_data: "/buy_hack", style: "success" }73 ]]74 })75 });76 return;77 }78 Bot.setProperty("paid_" + utr, true, "boolean");79 80 Api.editMessageCaption({81 chat_id: chat.chatid, message_id: request.message.message_id,82 caption: "<tg-emoji emoji-id='6192822213486321961'>🔄</tg-emoji> <b>Payment verified! Delivering your key...</b>",83 parse_mode: "HTML"84 });85 86 // ✅ FIX: Detect which purchase pipeline this QR payment belongs to.87 // "ffid" = local stock-based FF ID item (set by /execute_id_buy on low balance)88 // default/"plan" = original plan-based product via external xyzcheats API89 var flowType = User.getProperty("buy_flow_type") || "plan";90 91 if (flowType === "ffid") {92 // =========================================================93 // 🎮 FF ID STOCK DELIVERY (after successful QR payment)94 // =========================================================95 try {96 var rawType = User.getProperty("buy_ffid_rawtype") || "";97 var isResellerFlow = User.getProperty("buy_ffid_is_reseller") === true;98 var finalCost = Number(User.getProperty("buy_price") || 0);99 var displayTypeName = User.getProperty("buy_prod_name") || rawType;100 101 var stockData = [];102 var isDynamicCategory = false;103 var isGeneralCategory = false;104 var selectedCat = null;105 106 var fbCategories = Bot.getProperty("fb_categories") || [];107 if (!Array.isArray(fbCategories)) { fbCategories = []; }108 109 if (rawType.indexOf("fb_") === 0) {110 isDynamicCategory = true;111 var targetCatId = rawType.replace("fb_", "").trim();112 for (var i = 0; i < fbCategories.length; i++) {113 if (fbCategories[i].id === targetCatId) { selectedCat = fbCategories[i]; break; }114 }115 if (selectedCat) { stockData = selectedCat.stock_list || []; }116 } else if (rawType === "fb" || rawType === "google") {117 stockData = Bot.getProperty("ff_stock_" + rawType) || [];118 } else {119 isGeneralCategory = true;120 var categoriesFF = Bot.getProperty("ff_categories") || {};121 selectedCat = categoriesFF[rawType];122 if (selectedCat) {123 var fallbackStock = Bot.getProperty("ff_stock_" + rawType) || [];124 stockData = (selectedCat.stock_list && selectedCat.stock_list.length > 0) ? selectedCat.stock_list : fallbackStock;125 }126 }127 128 if (!stockData || stockData.length === 0) {129 Api.editMessageCaption({130 chat_id: chat.chatid, message_id: request.message.message_id,131 caption: "⚠️ Payment received but item went out of stock. Contact admin with UTR: " + utr,132 parse_mode: "HTML"133 });134 return;135 }136 137 var accountExtracted = stockData.shift();138 139 if (isDynamicCategory && selectedCat) {140 selectedCat.stock_list = stockData;141 Bot.setProperty("fb_categories", fbCategories, "json");142 } else if (isGeneralCategory && selectedCat) {143 selectedCat.stock_list = stockData;144 var categoriesFF2 = Bot.getProperty("ff_categories") || {};145 categoriesFF2[rawType] = selectedCat;146 Bot.setProperty("ff_categories", categoriesFF2, "json");147 Bot.setProperty("ff_stock_" + rawType, stockData, "json");148 } else {149 Bot.setProperty("ff_stock_" + rawType, stockData, "json");150 }151 152 var fullRawString = String(accountExtracted || "").trim();153 var emailData = fullRawString;154 var passwordData = "No Password Found";155 156 if (fullRawString.indexOf("|") !== -1) {157 var lastPipeIndex = fullRawString.lastIndexOf("|");158 var firstPart = fullRawString.substring(0, lastPipeIndex).trim();159 var secondPart = fullRawString.substring(lastPipeIndex + 1).trim();160 161 if (firstPart.indexOf(" ") !== -1) {162 var spaceParts = firstPart.split(" ");163 emailData = spaceParts[spaceParts.length - 1].trim();164 } else {165 emailData = firstPart;166 }167 passwordData = secondPart;168 }169 170 var purchasedKeys = User.getProperty("my_purchased_keys") || [];171 if (!Array.isArray(purchasedKeys)) { purchasedKeys = []; }172 var currentDate = new Date().toLocaleDateString('en-IN', { timeZone: "Asia/Kolkata" });173 purchasedKeys.push({174 productName: displayTypeName,175 cost: finalCost.toString(),176 key: emailData + (passwordData !== "No Password Found" ? " | " + passwordData : ""),177 days: "Permanent",178 date: currentDate179 });180 User.setProperty("my_purchased_keys", purchasedKeys, "json");181 182 var deliveryText =183 "┏━━━━━━━━━━━━━━━━━━━━━━━━┓\n" +184 "┃ ❤️🔥 <b>PURCHASE SUCCESSFUL!</b> ❤️🔥 ┃\n" +185 "┗━━━━━━━━━━━━━━━━━━━━━━━━┛\n\n" +186 "📦 <b>Item:</b> <code>" + displayTypeName + "</code>\n" +187 "💰 <b>Paid:</b> <code>₹" + finalCost + "</code> " + (isResellerFlow ? "<b>(Reseller)</b>" : "") + "\n" +188 "━━━━━━━━━━━━━━━━━━━━━━━━━━\n" +189 "👤 <b>ACCOUNT DETAILS:</b>\n\n" +190 "🚀 <b>Email:</b> <code>" + emailData + "</code>\n" +191 "🔒 <b>Password:</b> <code>" + passwordData + "</code>\n" +192 "━━━━━━━━━━━━━━━━━━━━━━━━━━\n" +193 "⚠️ <i>Copy details instantly.</i>";194 195 Api.sendMessage({196 chat_id: chat.chatid,197 text: deliveryText,198 parse_mode: "HTML"199 });200 201 var adminLogChannel = "8812621370";202 var adminNotificationMsg =203 "<blockquote>⚠️ <b>NEW ORDER ALERT (QR)</b>" + (isResellerFlow ? " [RESELLER]" : "") + "</blockquote>\n" +204 "👤 <b>User:</b> <a href='tg://user?id=" + userId + "'>" + user.first_name + "</a> (<code>" + userId + "</code>)\n" +205 "📦 <b>Item:</b> <code>" + displayTypeName + "</code>\n" +206 "💰 <b>Revenue:</b> <code>₹" + finalCost + "</code>\n" +207 "⚡ <b>Stock Left:</b> <code>" + stockData.length + " units</code>\n\n" +208 "🖥 <b>ACCOUNT DETAILS:</b>\n" +209 "➔ <b>Email:</b> <code>" + emailData + "</code>\n" +210 "➔ <b>Password:</b> <code>" + passwordData + "</code>";211 212 Api.sendMessage({213 chat_id: adminLogChannel,214 text: adminNotificationMsg,215 parse_mode: "HTML"216 });217 218 // Cleanup all buy_ state for this order219 User.setProperty("buy_flow_type", null, "string");220 User.setProperty("buy_ffid_rawtype", null, "string");221 User.setProperty("buy_ffid_is_reseller", null, "boolean");222 User.setProperty("buy_price", null, "number");223 User.setProperty("buy_needpay", null, "number");224 User.setProperty("buy_prod_name", null, "string");225 User.setProperty("buy_pending_order_id", null);226 Bot.setProperty("buy_qr_msg_id_" + userId, null, "string");227 User.setProperty("buy_qr_msg_id_" + userId, null, "string");228 Bot.setProperty("buy_qr_caption_" + userId, null, "string");229 User.setProperty("buy_qr_caption_" + userId, null, "string");230 Bot.setProperty("buy_qr_buttons_" + userId, null, "string");231 User.setProperty("buy_qr_buttons_" + userId, null, "string");232 233 } catch (ffErr) {234 Api.editMessageCaption({235 chat_id: chat.chatid, message_id: request.message.message_id,236 caption: "⚠️ Delivery error. Contact admin with UTR: " + utr + " | Error: " + ffErr.message,237 parse_mode: "HTML"238 });239 }240 return;241 }242 243 // =========================================================244 // 📦 ORIGINAL PLAN-BASED DELIVERY (external xyzcheats API)245 // =========================================================246 var prodIdx = User.getProperty("buy_prod_idx");247 var planIdx = User.getProperty("buy_plan_idx");248 var productList = Bot.getProperty("stored_products") || [];249 var product = productList[prodIdx];250 var plan = product && product.plans ? product.plans[planIdx] : null;251 252 if (!product || !plan) {253 Api.editMessageCaption({254 chat_id: chat.chatid, message_id: request.message.message_id,255 caption: "⚠️ Payment received but product data missing. Contact admin with UTR: " + utr,256 parse_mode: "HTML"257 });258 return;259 }260 261 var webProductId = String(product.id || "PID_ID").trim();262 var cleanPlanDays = User.getProperty("buy_plan_days") || String(plan.days);263 var prodNameLower = String(product.name).toLowerCase();264 var durationParam = cleanPlanDays + " Days";265 266 var rawPlanName = plan.name || plan.title || plan.name_on_website || "";267 if (rawPlanName.trim() !== "" && isNaN(rawPlanName)) {268 durationParam = rawPlanName.trim();269 } else if (prodNameLower.indexOf("pato") > -1 || prodNameLower.indexOf("all android") > -1 || prodNameLower.indexOf("mix") > -1) {270 durationParam = cleanPlanDays + " DaYs All Colours Mix";271 } else if (prodNameLower.indexOf("prime") > -1 || prodNameLower.indexOf("hook") > -1) {272 durationParam = (cleanPlanDays === "7") ? "7 Days NonRoot" : cleanPlanDays + " Days Nonroot";273 } else if (prodNameLower.indexOf("nonroot") > -1) {274 durationParam = cleanPlanDays + " DaYs NONROOT";275 }276 277 var postFieldsString = "api_key=" + encodeURIComponent("a12cf270b9df76b981974a120ce1dd7f") +278 "&action=" + encodeURIComponent("buy") +279 "&product_id=" + encodeURIComponent(webProductId) +280 "&duration=" + encodeURIComponent(durationParam);281 282 User.setProperty("last_pending_price", User.getProperty("buy_price"), "number");283 User.setProperty("last_pending_prod_id", webProductId, "string");284 User.setProperty("last_pending_prod_name", String(product.name).trim(), "string");285 User.setProperty("last_pending_plan_days", cleanPlanDays, "string");286 287 HTTP.post({288 url: "https://xyzcheats.com/api/reseller_v1.php",289 body: postFieldsString,290 headers: {291 "Content-Type": "application/x-www-form-urlencoded",292 "x-master-key": "a7f3e8b2c9d1f4a6b8c2d5e9f1a3b6c8"293 },294 success: "/onWebKeyReceive",295 error: "/onWebKeyError"296 });297 298 User.setProperty("buy_pending_order_id", null);299 User.setProperty("buy_prod_idx", null);300 User.setProperty("buy_plan_idx", null);301 Bot.setProperty("buy_qr_msg_id_" + userId, null, "string");302 User.setProperty("buy_qr_msg_id_" + userId, null, "string");303 Bot.setProperty("buy_qr_caption_" + userId, null, "string");304 User.setProperty("buy_qr_caption_" + userId, null, "string");305 Bot.setProperty("buy_qr_buttons_" + userId, null, "string");306 User.setProperty("buy_qr_buttons_" + userId, null, "string");307 308 } else {309 // ❌ Payment not found — restore original QR caption/buttons, then show dismissible notice310 try {311 var origCaption = Bot.getProperty("buy_qr_caption_" + userId) || User.getProperty("buy_qr_caption_" + userId);312 var origButtons = Bot.getProperty("buy_qr_buttons_" + userId) || User.getProperty("buy_qr_buttons_" + userId);313 314 if (origCaption) {315 Api.editMessageCaption({316 chat_id: chat.chatid,317 message_id: request.message.message_id,318 caption: origCaption,319 parse_mode: "HTML",320 reply_markup: origButtons ? origButtons : undefined321 });322 }323 } catch (e) {}324 325 if (request && request.id) {326 Api.answerCallbackQuery({327 callback_query_id: String(request.id),328 text: "❌ PAYMENT NOT FOUND ❌\nPlease complete the payment first, then tap again.",329 show_alert: true330 });331 }332 }333 334} catch (err) {335 Bot.sendMessage("⚠️ <b>Verification Exception:</b> " + err.message, { parse_mode: "HTML" });336} finally {337 User.setProperty("buy_verifying_lock_" + user.telegramid, false, "boolean");338}