ayushyadav7970824760/goldensellingstore_botPublic · Bot Template

AIThis Telegram store bot lets customers browse digital products and plans, apply coupons, add funds via UPI, and receive purchased keys. It includes a full admin panel for managing products, reordering items, setting reseller prices, viewing and removing key stock, configuring UPI payment details and update links, and checking user balances. Co-admins and resellers are supported, and support tickets are forwarded to the admin.

Commercedigital_storeadmin_panelupi_paymentsresellercouponskey_stock
ProfileTelegram
146 commands0 envUpdated 2d agoCreated Sep 5, 2026
Back to folder

commands/_buy_hack_cat.js

javascript · 139 lines

Raw
1/**#command2name: /buy_hack_cat3answer: 4keyboard: 5parse_mode: markdown6aliases: 7allow_only_group: false8need_reply: false9is_web: 010#command**/11 12// =========================================================13// 🛒 SHOP MENU — Product listing filtered by category (Step 1.5)14// Called after user selects "ANDROID ROOT" or "ANDROID NON ROOT" from15// /buy_hack. Shows only products matching that category. Products added16// with category "both" (or no category set at all — legacy products)17// show up under BOTH root and nonroot listings.18// =========================================================19 20try {21  var rawData = Bot.getProperty("stored_products");22  var productList = [];23 24  if (Array.isArray(rawData)) {25    productList = rawData;26  } else if (typeof rawData === "string") {27    try {28      productList = JSON.parse(rawData);29      if (!Array.isArray(productList)) { productList = []; }30    } catch (e) {31      productList = [];32    }33  }34 35  var chatId = chat.chatid;36  var firstName = user && user.first_name ? user.first_name : "User";37 38  // Category param — "root" or "nonroot"39  var category = params ? params.trim().toLowerCase() : "";40  if (category === "") {41    var cbData = request && request.callback_query ? request.callback_query.data : "";42    category = cbData.replace("/buy_hack_cat ", "").replace("buy_hack_cat ", "").trim().toLowerCase();43  }44  if (category !== "root" && category !== "nonroot" && category !== "iphone") { category = "nonroot"; }45 46  var categoryLabel = (category === "root") ? "ANDROID ROOT" : (category === "iphone") ? "iPHONE" : "ANDROID NON ROOT";47 48  var productButtons = [];49 50  for (var i = 0; i < productList.length; i++) {51    var item = productList[i];52    if (!item) { continue; }53 54    // Legacy products (no category field) ya "both" wale — dono categories me dikhte hain.55    var itemCategory = item.category ? String(item.category).toLowerCase() : "both";56    if (itemCategory !== "both" && itemCategory !== category) { continue; }57 58    var itemName = item.name ? String(item.name) : "Product " + (i + 1);59    var itemEmoji = item.emoji ? String(item.emoji) : "5226656353744862682";60    var itemOutOfStock = item.out_of_stock === true;61    var planCount = Array.isArray(item.plans) ? item.plans.length : 0;62 63    // Product status UI: admin ke "Under Maintenance" toggle ke baad64    // button turant red ho aur screenshot-style UNDER UPDATE label dikhe.65    // Live products green/normal rahenge aur unke plan count ke saath dikhenge.66    var buttonText;67    var buttonStyle;68    var buttonEmoji;69    if (itemOutOfStock) {70      // Screenshot-style: unavailable product = red button.71      buttonText = itemName;72      buttonStyle = "danger";73      buttonEmoji = Bot.getProperty("product_maintenance_emoji") || "6100657257605763582";74    } else {75      // Screenshot-style: clean product name + premium emoji, no "(plans)" suffix.76      buttonText = itemName;77      buttonStyle = "primary";78      buttonEmoji = itemEmoji;79    }80 81    productButtons.push([82      {83        text: "  " + buttonText + "  ",84        callback_data: "/viewprod " + i,85        style: buttonStyle,86        icon_custom_emoji_id: buttonEmoji87      }88    ]);89  }90 91  var storeText;92 93  if (productButtons.length === 0) {94    storeText =95      "<blockquote><b>" + categoryLabel + "</b></blockquote>\n" +96      "━━━━━━━━━━━━━━━━━━━━━\n\n" +97      "<tg-emoji emoji-id='6093854128193152827'>⚠️</tg-emoji> <i>Is category me abhi koi product available nahi hai. Jald hi add kiya jayega!</i>\n" +98      "━━━━━━━━━━━━━━━━━━━━━";99  } else {100    storeText =101      "<blockquote>🛒 <b>PRODUCT STORE — SHOP</b> 🛍️</blockquote>\n\n" +102      "🔥 <b>Choose a product:</b>";103  }104 105  productButtons.push([106    {107      text: "𝑩𝒂𝒄𝒌",108      callback_data: "/buy_hack",109      style: "danger",110      icon_custom_emoji_id: "5893163582194978381"111    }112  ]);113 114  var replyMarkupStr = JSON.stringify({ inline_keyboard: productButtons });115 116  if (request && request.message && request.message.message_id) {117    if (request.message.photo) {118      try { Api.deleteMessage({ chat_id: chatId, message_id: request.message.message_id }); } catch (e) {}119      Api.sendMessage({ chat_id: chatId, text: storeText, parse_mode: "HTML", reply_markup: replyMarkupStr });120    } else {121      Api.editMessageText({122        chat_id: chatId,123        message_id: request.message.message_id,124        text: storeText,125        parse_mode: "HTML",126        reply_markup: replyMarkupStr127      });128    }129  } else {130    Api.sendMessage({ chat_id: chatId, text: storeText, parse_mode: "HTML", reply_markup: replyMarkupStr });131  }132 133  if (request && request.id) {134    try { Api.answerCallbackQuery({ callback_query_id: request.id }); } catch (e) {}135  }136 137} catch (err) {138  Bot.sendMessage("⚠️ Shop Menu Error: " + err.message, { parse_mode: "HTML" });139}