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
ProfileTelegram
102 commands1 envUpdated 29d agoCreated Aug 9, 2026
Back to folder

commands/_onBuyCheck.js

javascript · 338 lines

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