devbro468/Dev_x_store_botPublic · Bot Template
AIThis bot operates a digital storefront (DEV X STORE) selling subscription-based products — likely game hacks, accounts, or access keys — categorized by platform (Android Root, Non-Root, iPhone). It features a reseller program with discounted pricing, a dual-currency wallet (INR balance + Telegram Stars/XTR), and a full admin/co-admin panel for managing products, plans, per-plan pricing, stock (keys/accounts), coupons, and API endpoints. Purchases flow through a plan selection screen offering wallet payment, Stars invoices (sendInvoice with XTR currency), and coupon application. Successful Stars payments are handled via successful_payment webhook, crediting wallet or delivering keys directly. Admin tools include user listing with chunked messaging, stock viewing/deletion with inline keyboards, co-admin management, and API registry updates. The bot registers users on first interaction and
commands/_back.js
javascript · 157 lines
1/**#command2name: /back3answer: 4keyboard: 5parse_mode: markdown6aliases: 7allow_only_group: false8need_reply: false9is_web: 010#command**/11 12// =========================================================13// 🚀 PREMIUM STORE MASTER DASHBOARD (UPDATED WITH LUDO SPIN)14// STATUS: 100% PRODUCTION READY WITH LIVE BUTTON STYLES15// =========================================================16 17try {18 var userId = user.telegramid;19 20 // 💾 BROADCAST SYSTEM: Safe Loop Core21 var userList = [];22 try {23 userList = Bot.getProperty("all_users_list") || [];24 if (!Array.isArray(userList)) { userList = []; }25 } catch (propErr) {26 userList = [];27 }28 29 var userExists = false;30 for (var i = 0; i < userList.length; i++) {31 if (String(userList[i]) === String(userId)) {32 userExists = true;33 break;34 }35 }36 if (!userExists) {37 userList.push(String(userId));38 Bot.setProperty("all_users_list", userList, "json");39 }40 41 // 📊 REAL BALANCE FETCH42 var userBal = "0.00";43 try {44 var res = 0;45 if (Libs && Libs.ResourcesLib) {46 res = Libs.ResourcesLib.userRes("balance").value() || 0;47 }48 var adminBal = Bot.getProperty("balance" + userId) || 0;49 userBal = (Number(res) + Number(adminBal)).toFixed(2);50 } catch (balErr) {51 var fallbackBal = Bot.getProperty("balance" + userId) || 0;52 userBal = Number(fallbackBal).toFixed(2);53 }54 55 // 💎 WELCOME MESSAGE EMOJIS (Sirf Text Message ke liye)56 var EMJ_HEADER_ROCKET = "<tg-emoji emoji-id='5217822164362739968'>🚀</tg-emoji>";57 var EMJ_HEADER_NEW = "<tg-emoji emoji-id='6194809138371904539'>✨</tg-emoji>"; 58 var EMJ_HEADER_SHIELD = "<tg-emoji emoji-id='6113743082358841933'>🔰</tg-emoji>";59 60 // Welcome message ke saare items ke variables:61 var MSG_EMJ_STORE = "<tg-emoji emoji-id='5866053971960929280'>🛒</tg-emoji>";62 var MSG_EMJ_FFID = "<tg-emoji emoji-id='5334890573281114250'>🎮</tg-emoji>"; 63 var MSG_EMJ_PROFILE = "<tg-emoji emoji-id='5260399854500191689'>🔰</tg-emoji>";64 var MSG_EMJ_ADDBAL = "<tg-emoji emoji-id='6147815702163102310'>✨</tg-emoji>";65 var MSG_EMJ_HISTORY = "<tg-emoji emoji-id='6113743082358841933'>🔰</tg-emoji>";66 var MSG_EMJ_LUDO = "<tg-emoji emoji-id='5371043439020353782'>🎲</tg-emoji>"; // Ludo Spin Custom Emoji67 var MSG_EMJ_TUTORIAL = "<tg-emoji emoji-id='5258077307985207053'>📹</tg-emoji>";68 var MSG_EMJ_PROOF = "<tg-emoji emoji-id='5330237710655306682'>✅</tg-emoji>"; // Payment Proof Custom Emoji69 var MSG_EMJ_SUPPORT = "<tg-emoji emoji-id='5436113877181941026'>🔰</tg-emoji>";70 71 // Naye aur Updated Emojis72 var EMJ_PREMIUM_MENU = "<tg-emoji emoji-id='5406745015365943482'>✨</tg-emoji>";73 var EMJ_YOUR_BALANCE = "<tg-emoji emoji-id='5231200819986047254'>💰</tg-emoji>";74 var EMJ_GET_STARTED = "<tg-emoji emoji-id='6057415823222379852'>👇</tg-emoji>";75 76 // 📝 FULL WELCOME MESSAGE — synced with /start design (DEV MODZ STORE PANEL)77 var welcomeMessage =78 "<tg-emoji emoji-id=\"6266967801580231067\">💎</tg-emoji> <tg-emoji emoji-id=\"5866053971960929280\">🏪</tg-emoji> <b>— DEV MODZ STORE PANEL —</b> <tg-emoji emoji-id=\"5866053971960929280\">🏪</tg-emoji> <tg-emoji emoji-id=\"6266967801580231067\">💎</tg-emoji>\n\n" +79 "<tg-emoji emoji-id=\"6093677128295914531\">🎉</tg-emoji> <b>Hello, " + ((user && user.first_name) ? user.first_name.toUpperCase() : "RESELLER") + "!</b>\n\n" +80 "<tg-emoji emoji-id=\"6080228009439141516\">💧</tg-emoji> <b>Genuine, limited-stock books. Instant delivery.</b>\n\n" +81 "<tg-emoji emoji-id=\"6093591495237967001\">🌐</tg-emoji> Wide product catalog\n" +82 "<tg-emoji emoji-id=\"6215386799133433653\">🔑</tg-emoji> Instant delivery on payment\n" +83 "<tg-emoji emoji-id=\"6312263493051489212\">💰</tg-emoji> Multiple payment gateways\n" +84 "<tg-emoji emoji-id=\"6100170496077204999\">👑</tg-emoji> 24/7 admin support\n\n" +85 "<i>Balance: ₹" + userBal + "</i>\n\n" +86 "<i>Tap any button below to begin:</i> " + EMJ_GET_STARTED;87 88 // 🎨 KEYBOARD — same layout as /start89 var multiColorKeyboard = [90 [{ text: "Shop Now", callback_data: "/buy_hack", style: "primary", icon_custom_emoji_id: "5866053971960929280" }],91 [92 { text: "Profile", callback_data: "/profile", style: "primary", icon_custom_emoji_id: "5260399854500191689" },93 { text: "Add Balance", callback_data: "/addfund", style: "success", icon_custom_emoji_id: "6147815702163102310" }94 ],95 [96 { text: "My Keys", callback_data: "/mykey", style: "primary", icon_custom_emoji_id: "6113743082358841933" },97 { text: "How to use", callback_data: "/how", style: "danger", icon_custom_emoji_id: "6080214566191505147" }98 ],99 [100 { text: "Support", callback_data: "/support", style: "danger", icon_custom_emoji_id: "5436113877181941026" }101 ],102 [{ text: "Payment Proofs", url: (Bot.getProperty("payment_proof_link") || "https://t.me/DevModz_Proof"), style: "success", icon_custom_emoji_id: "5330237710655306682" }]103 ];104 105 // 👑 Conditional Reseller Upgrade button106 if (Bot.getProperty("reseller_system_enabled") && !Bot.getProperty("is_reseller_" + userId)) {107 multiColorKeyboard.push([108 { text: "Reseller Upgrade", callback_data: "/reseller_upgrade", style: "success", icon_custom_emoji_id: "6102856637343600044" }109 ]);110 }111 112 // 🔄 Safe Callback Loading Controller113 var queryId = null;114 if (request) {115 if (request.id) { queryId = request.id; }116 else if (request.callback_query && request.callback_query.id) { queryId = request.callback_query.id; }117 }118 119 if (queryId) {120 try { Api.answerCallbackQuery({ callback_query_id: queryId }); } catch(qErr){}121 }122 123 // ⚡ Native Execution Route (Send vs Edit Handler)124 // ✅ BUG FIX: agar previous message ek PHOTO thi (jaise DP-attached Profile),125 // Telegram editMessageText use hi nahi kar sakta uspar — isi wajah se Profile126 // se "Back" click karne par kuch hota hi nahi tha. Ab photo ho to delete karke127 // fresh text message bheja jaata hai.128 if (request && request.message && request.message.message_id) {129 if (request.message.photo) {130 try { Api.deleteMessage({ chat_id: chat.chatid, message_id: request.message.message_id }); } catch (delErr) {}131 Api.sendMessage({132 chat_id: chat.chatid,133 text: welcomeMessage,134 parse_mode: "HTML",135 reply_markup: JSON.stringify({ inline_keyboard: multiColorKeyboard })136 });137 } else {138 Api.editMessageText({139 chat_id: chat.chatid,140 message_id: request.message.message_id,141 text: welcomeMessage,142 parse_mode: "HTML",143 reply_markup: JSON.stringify({ inline_keyboard: multiColorKeyboard })144 });145 }146 } else {147 Api.sendMessage({148 chat_id: chat.chatid,149 text: welcomeMessage,150 parse_mode: "HTML",151 reply_markup: JSON.stringify({ inline_keyboard: multiColorKeyboard })152 });153 }154 155} catch (globalException) {156 Bot.sendMessage("🛑 <b>Dashboard Debug Error:</b> <code>" + globalException.message + "</code>", { parse_mode: "HTML" });157}