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

Commercecommercedigital-goodsstars-paymentreseller-systemadmin-panelstock-management
ProfileTelegram
119 commands0 envUpdated 15d agoCreated Aug 23, 2026
Back to folder

commands/_onBuyQR.js

javascript · 123 lines

Raw
1/**#command2name: /onBuyQR3answer: 4keyboard: 5parse_mode: markdown6aliases: 7allow_only_group: false8need_reply: false9is_web: 010#command**/11 12try {13  if (!content) { 14    Api.sendMessage({ 15      chat_id: chat.chatid, 16      text: "❌ Error: No response from payment server. Please try again later.", 17      parse_mode: "HTML" 18    }); 19    return; 20  }21 22  var res;23  try {24    res = (typeof content === "object") ? content : JSON.parse(content);25  } catch (parseErr) {26    Api.sendMessage({27      chat_id: chat.chatid,28      text: "❌ <b>QR Parse Failed</b>\n<code>" + String(content).substring(0, 500) + "</code>",29      parse_mode: "HTML"30    });31    return;32  }33 34  if (!res || res.status !== "success" || !res.data) {35    Api.sendMessage({36      chat_id: chat.chatid,37      text: "<tg-emoji emoji-id='6219547832169273793'>❌</tg-emoji><b>QR Generation Failed</b>\n<code>" + JSON.stringify(res).substring(0, 500) + "</code>",38      parse_mode: "HTML"39    });40    return;41  }42 43  var order_id = res.data.order_id || res.data.orderid;44  var qr = res.data.qr_url || res.data.qrurl;45  var expire = res.data.expires_at_ist || res.data.expiresatist || "5 Minutes";46  var userId = user.telegramid;47 48  var price = Number(User.getProperty("buy_price") || 0);49  var userBal = Number(Libs.ResourcesLib.userRes("balance").value() || 0);50  var bonusBal = Number(Bot.getProperty("balance" + userId) || 0);51  var totalUserBal = userBal + bonusBal;52 53  var needpay = Number(User.getProperty("buy_needpay") || (price > totalUserBal ? price - totalUserBal : 0));54  var prodName = User.getProperty("buy_prod_name") || "Product";55 56  try {57    var genMsgid = Bot.getProperty("gen_msg_id_" + userId);58    if (genMsgid) {59      Api.deleteMessage({ chat_id: chat.chatid, message_id: genMsgid });60      Bot.setProperty("gen_msg_id_" + userId, null, "string");61    }62  } catch (e) {}63 64  var gatewayMsg = 65    "<tg-emoji emoji-id='6267225207560214192'>⚠️</tg-emoji><b>PAYMENT GATEWAY</b>\n\n" +66    "<tg-emoji emoji-id='6147767796097884213'>🏷️</tg-emoji><b>Product:</b> " + prodName + "\n" +67    "<tg-emoji emoji-id='6041705726206808304'>💰</tg-emoji><b>Price:</b> ₹" + price.toFixed(2) + "\n" +68    "<tg-emoji emoji-id='5348392971207194994'>💳</tg-emoji><b>Balance:</b> ₹" + totalUserBal.toFixed(2) + "\n" +69    "<tg-emoji emoji-id='619491118249881916'>📥</tg-emoji><b>Pay Now:</b> ₹" + needpay.toFixed(2) + "\n" +70    "<tg-emoji emoji-id='6266866272848321043'>⏳</tg-emoji><b>Expire Time:</b> <code>" + expire + "</code>\n\n" +71    "<tg-emoji emoji-id='5330237710655306682'>⚡</tg-emoji><b>Scan QR & pay exact amount</b>\n";72 73  var inlineButtons = [74    [75      {76        text: "I have paid",77        callback_data: "/check_buy " + order_id,78        style: "success",79        icon_custom_emoji_id: "5330237710655306682"80      },81      {82        text: "Cancel Order",83        callback_data: "/cancel_buy " + order_id,84        style: "danger",85        icon_custom_emoji_id: "6219547832169273793"86      }87    ]88  ];89 90  var sentQrMsg;91  try {92    sentQrMsg = Api.sendPhoto({93      chat_id: chat.chatid,94      photo: qr,95      caption: gatewayMsg,96      parse_mode: "HTML",97      reply_markup: JSON.stringify({ inline_keyboard: inlineButtons })98    });99  } catch (photoErr) {100    Api.sendMessage({101      chat_id: chat.chatid,102      text: "❌ <b>sendPhoto failed</b>\nQR URL: <code>" + qr + "</code>\nError: <code>" + photoErr.message + "</code>",103      parse_mode: "HTML"104    });105    return;106  }107 108  try {109    if (sentQrMsg) {110      var qrMsgId = sentQrMsg.result ? sentQrMsg.result.message_id : sentQrMsg.message_id;111      if (qrMsgId) {112        Bot.setProperty("buy_qr_msg_id_" + userId, qrMsgId, "string");113        User.setProperty("buy_pending_order_id", order_id, "string");114      }115    }116  } catch (e) {}117} catch (err) {118  Api.sendMessage({119    chat_id: chat.chatid,120    text: "⚠️ <b>System Error:</b> <code>" + (err && err.message ? err.message : String(err)) + "</code>",121    parse_mode: "HTML"122  });123}