indrajitghosh20006/Igstore_01botPublic Β· Bot Template

ProfileTelegram

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
Back to folder

commands/_addbal.js

javascript Β· 138 lines

Raw
1/**#command2name: /addbal3answer: 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// βœ… FIXED (v3): pehle admin_id hardcoded tha ("7839151435"), jabki baaki bot54// (start menu, /admin, ownership transfer) sab dynamic "owner_id" property use55// karte hain. Agar kabhi ownership transfer hua ya co-admin ne button dabaya,56// ye command silently "not authorized" de deta tha β€” isiliye "Add Bal" button57// theek se kaam nahi kar raha tha. Ab yahan bhi wahi dynamic check hai.58let admin_id = Bot.getProperty("owner_id") || "7839151435";59let requesterId = String(user.telegramid);60let isCoAdmin = Bot.getProperty("co_admin_" + requesterId);61 62if (requesterId === admin_id || isCoAdmin) {63 64    // βœ… FIXED: button dabate hi Telegram ka loading-spinner turant hata do,65    // taaki click "fast/responsive" mehsoos ho (pehle koi answerCallbackQuery66    // nahi tha, isliye button dabane par kuch second tak kuch nahi hota tha).67    if (request && request.id) {68        try {69            HTTP.post({70                url: "https://api.telegram.org/bot" + bot.token + "/answerCallbackQuery",71                body: { callback_query_id: request.id }72            });73        } catch (ackErr) {}74    }75 76    let params = (typeof message !== "undefined" && message) ? message.split(" ") : [];77    let data = params[1];78 79    // βœ… FIXED: pehle "Add Bal" admin-panel button dabane par ye seedha "Wrong80    // Format" error de deta tha (kyunki button koi text argument nahi bhejta),81    // aur admin ko turant type karna padta tha "/addbal id|amount" khud se.82    // Ab button dabane par ek proper prompt aata hai aur agla text message83    // auto-capture ho jaata hai (see _start.js "MODULE 5").84    if (!data || !data.includes("|")) {85        User.setProperty("addbal_step", "waiting_input", "string");86        Bot.sendMessage(87            "<tg-emoji emoji-id='5409048419211682843'>πŸ’΅</tg-emoji> <b>Add Balance</b>\n\n" +88            "<i>User ID aur amount is format me reply karein:</i>\n<code>user_id|amount</code>\n\n" +89            "<i>Example:</i> <code>7839151435|100</code>",90            {parse_mode: "HTML"}91        );92        return;93    }94 95    let splitData = data.split("|");96    let targetUserId = splitData[0].trim();97    let amountToAdd = parseFloat(splitData[1].trim());98 99    if (!targetUserId || isNaN(amountToAdd) || amountToAdd <= 0) {100        Bot.sendMessage("❌ *Invalid Format! Use:* `user_id|amount`", {parse_mode: "Markdown"});101        return;102    }103 104    try {105        // Balance add karna106        let targetUserBalance = Libs.ResourcesLib.anotherUserRes("balance", targetUserId);107        targetUserBalance.add(amountToAdd);108 109        // Admin notification β€” turant confirm karo ki balance credit ho gaya110        Bot.sendMessage("βœ… Success! Added " + amountToAdd + " to user " + targetUserId, {parse_mode: "HTML"});111 112        // All 4 Premium Emojis in Quote Style113        let notificationText =114            "<blockquote>" +115            "<tg-emoji emoji-id='6192822213486321961'>πŸ—£</tg-emoji> Admin Added: " + amountToAdd + "\n" +116            "<tg-emoji emoji-id='6266967801580231067'>πŸ’Ž</tg-emoji> Balance Credited!\n" +117            "<tg-emoji emoji-id='6267068789146260253'>πŸ’°</tg-emoji> Wallet Updated\n" +118            "<tg-emoji emoji-id='5866053971960929280'>πŸ›’</tg-emoji> /start TO SHOP NOW" +119            "</blockquote>";120 121        // βœ… FIXED: raw HTTP.post ki jagah bot ka built-in Api.sendMessage use kiya β€”122        // yahi wrapper baaki poore bot me reliably use ho raha hai, isliye user-side123        // notification bhi consistently aur fast deliver hota hai.124        try {125            Api.sendMessage({126                chat_id: targetUserId,127                text: notificationText,128                parse_mode: "HTML"129            });130        } catch (notifyErr) {}131 132    } catch (err) {133        Bot.sendMessage("⚠️ *Error:* " + err.message, {parse_mode: "Markdown"});134    }135 136} else {137    Bot.sendMessage("❌ You are not authorized to use this command.");138}