indrajitghosh20006/Igstore_01botPublic ยท Bot Template
AIThe bot provides an admin interface for a digital store, allowing the owner or coโadmins to add balances, products, plans, and categories. It supports payment workflows via UPI and Binance Pay, automatically generating QR codes and handling manual approval of deposits. The code patches inline keyboards to use premium emoji icons and includes helper functions for user and bot properties. Overall, it serves as a commerce management tool for a Telegram-based storefront.
Commercestoreadminbalanceproductplancategory
170 commands0 envUpdated 8h agoCreated Oct 30, 2026
commands/_menu.js
javascript ยท 179 lines
1/**#command2name: /menu3answer: 4keyboard: 5parse_mode: markdown6aliases: 7allow_only_group: false8need_reply: false9is_web: 010#command**/11 12// PREMIUM BUTTON ICONS13(function(){14 try {15 if (!JSON.__premiumPatched) {16 var __origStringify = JSON.stringify;17 JSON.stringify = function(value, replacer, space) {18 try {19 if (value && value.inline_keyboard && Array.isArray(value.inline_keyboard)) {20 var premiumIds = [21 "6143444134125379822",22 "6091379307907652768",23 "6147534454819661264",24 "6147817325660741985",25 "6235683689292897318",26 "6102856637343600044"27 ];28 var rows = value.inline_keyboard.map(function(row, ri) {29 if (!Array.isArray(row)) return row;30 return row.map(function(btn, bi) {31 if (!btn || typeof btn !== "object") return btn;32 var copy = {};33 for (var k in btn) copy[k] = btn[k];34 if (!copy.icon_custom_emoji_id) copy.icon_custom_emoji_id = premiumIds[(ri + bi) % premiumIds.length];35 return copy;36 });37 });38 var cloned = {};39 for (var key in value) cloned[key] = value[key];40 cloned.inline_keyboard = rows;41 return __origStringify.call(JSON, cloned, replacer, space);42 }43 } catch (e) {}44 return __origStringify.call(JSON, value, replacer, space);45 };46 JSON.__premiumPatched = true;47 }48 } catch (e) {}49})();50 51 52 53// =========================================================54// ๐ MEMBER MAIN SHOP MENU55// - Personalized welcome name56// - Owner-configurable store name57// - Download Files button is always LAST58// - Back returns to this same menu59// =========================================================60try {61 var userId = String(user.telegramid);62 var uid = userId;63 var chatId = String(chat.chatid);64 var storeName = String(Bot.getProperty("store_name") || "๐๐ ๐๐๐๐๐");65 var firstName = String((user && user.first_name) || "User");66 67 // Basic HTML escaping for Telegram HTML parse mode.68 firstName = firstName.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">");69 storeName = storeName.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">");70 71 var resBal = 0;72 try { resBal = Number(Libs.ResourcesLib.userRes("balance").value()) || 0; } catch (e) {}73 var bonusBal = Number(Bot.getProperty("balance" + userId) || 0);74 var userBal = (resBal + bonusBal).toFixed(2);75 76 var welcomeMessage =77 "<tg-emoji emoji-id=\"6091170843080007327\">๐</tg-emoji> โโโโ <b>" + storeName + "</b> โโโโ <tg-emoji emoji-id=\"6091170843080007327\">๐</tg-emoji>\n\n" +78 "<tg-emoji emoji-id=\"6057721277001504261\">๐</tg-emoji> <b>Welcome, " + firstName + "!</b>\n\n" +79 "<tg-emoji emoji-id=\"6147565374289220368\">๐</tg-emoji> <b>โโ STORE HIGHLIGHTS โโ</b> <tg-emoji emoji-id=\"6147565374289220368\">๐</tg-emoji>\n\n" +80 "<tg-emoji emoji-id=\"6285210748184434476\">๐ฎ</tg-emoji> Premium Game Keys\n" +81 "<tg-emoji emoji-id=\"6205981761353030383\">๐ผ</tg-emoji> Instant Delivery 24/7\n" +82 "<tg-emoji emoji-id=\"6055639815590781298\">๐ฏ</tg-emoji> 100% Secure Payment\n" +83 "<tg-emoji emoji-id=\"6059653892025618055\">๐</tg-emoji> Best Prices Guaranteed\n" +84 "<tg-emoji emoji-id=\"6053197860395033789\">๐ฎ๐ณ</tg-emoji> Safe And Trusted\n" +85 "<tg-emoji emoji-id=\"6208445114075847396\">โ
</tg-emoji> Professional Support\n" +86 "โโโโโโโโโโโโโโโโโโโโโ\n" +87 "<tg-emoji emoji-id=\"6267068789146260253\">๐ฐ</tg-emoji> <b>Wallet Balance: โน" + userBal + "</b>\n" +88 "โโโโโโโโโโโโโโโโโโโโโ\n\n" +89 "<tg-emoji emoji-id=\"6064280370667332428\">๐ฅ</tg-emoji> <b>Tap Shop Now to Start!</b>";90 91 // ๐ ADMIN-CONTROLLED MAIN MENU UI92 // Name + Premium Emoji + Button Color + Row/Category can be changed from /manage_button.93 var buttonDefaults = {94 shop: { name:"Shop / Store Product", callback:"/buy_hack", style:"danger", emoji:"6143444134125379822", row:1 },95 addfund: { name:"Add Balance", callback:"/addfund", style:"success", emoji:"5409048419211682843", row:2 },96 profile: { name:"My Profile", callback:"/profile", style:"primary", emoji:"6091379307907652768", row:2 },97 how: { name:"How To Use", callback:"/how", style:"primary", emoji:"5341357385279612709", row:3 },98 lucky: { name:"Lucky", callback:"/ludospin", style:"success", emoji:"6116155973510895366", row:3 },99 share: { name:"Share", callback:"/referral", style:"primary", emoji:"6147534454819661264", row:4 },100 support: { name:"Support", callback:"/support", style:"primary", emoji:"6147817325660741985", row:4 },101 download: { name:"Download File", callback:"/download_updates",style:"primary", emoji:"6235683689292897318", row:5 },102 reseller: { name:"Reseller VIP", callback:"/reseller_upgrade",style:"success",emoji:"6102856637343600044", row:5 }103 };104 105 var theme = String(Bot.getProperty("ui_theme") || "mixed").toLowerCase();106 var themeStyle = { blue:"primary", green:"success", red:"danger", mixed:null }[theme] || null;107 var active = [];108 Object.keys(buttonDefaults).forEach(function(k){109 if (k === "reseller" && !(Bot.getProperty("reseller_system_enabled") && !Bot.getProperty("is_reseller_" + userId))) return;110 var d = buttonDefaults[k];111 var n = String(Bot.getProperty("menu_btn_name_" + k) || d.name);112 var e = String(Bot.getProperty("menu_btn_emoji_" + k) || d.emoji);113 var st = String(Bot.getProperty("menu_btn_style_" + k) || d.style).toLowerCase();114 var row = parseInt(Bot.getProperty("menu_btn_row_" + k), 10);115 if (!row || row < 1 || row > 5) row = d.row;116 if (["primary","success","danger"].indexOf(st) === -1) st = d.style;117 if (themeStyle) st = themeStyle;118 active.push({ key:k, text:n, callback_data:d.callback, style:st, icon_custom_emoji_id:e, row:row });119 });120 121 // Keep Download + Reseller together by default, while allowing admin row changes.122 active.sort(function(a,b){ return a.row-b.row || a.key.localeCompare(b.key); });123 var keyboard = [];124 for (var rr=1; rr<=5; rr++) {125 var group = active.filter(function(x){ return x.row === rr; });126 if (group.length) {127 var rowButtons = group.map(function(x){128 return { text:x.text, callback_data:x.callback_data, style:x.style, icon_custom_emoji_id:x.icon_custom_emoji_id };129 });130 keyboard.push(rowButtons);131 }132 }133 134 var markup = JSON.stringify({ inline_keyboard: keyboard });135 var photoId = Bot.getProperty("start_photo_file_id");136 137 if (request && request.id) {138 try { Api.answerCallbackQuery({ callback_query_id: String(request.id) }); } catch (e0) {}139 }140 141 if (photoId && request && request.message && request.message.message_id && request.message.photo) {142 try {143 Api.editMessageCaption({144 chat_id: chatId,145 message_id: Number(request.message.message_id),146 caption: welcomeMessage,147 parse_mode: "HTML",148 reply_markup: markup149 });150 return;151 } catch (photoEditErr) {152 try { Api.deleteMessage({ chat_id: chatId, message_id: Number(request.message.message_id) }); } catch (delPhotoErr) {}153 }154 }155 156 if (request && request.message && request.message.message_id) {157 try { Api.deleteMessage({ chat_id: chatId, message_id: Number(request.message.message_id) }); } catch (delErr) {}158 }159 160 if (photoId) {161 Api.sendPhoto({162 chat_id: chatId,163 photo: String(photoId),164 caption: welcomeMessage,165 parse_mode: "HTML",166 reply_markup: markup167 });168 } else {169 Api.sendMessage({170 chat_id: chatId,171 text: welcomeMessage,172 parse_mode: "HTML",173 reply_markup: markup174 });175 }176 177} catch (err) {178 Bot.sendMessage("๐ <b>Menu Error:</b> <code>" + String(err.message || err) + "</code>", { parse_mode: "HTML" });179}