tarunpoonia905/OfcDevShopBotPublic · Bot Template
AIDEV SHOP appears to be a Telegram automation bot. Commands include /confirm_delete_stock, /addstock_id, /extkey_menu, /partner_api, /apidelete, /buy_hack_cat, /admin_manage_products, /check_buy. Observed in code: messaging, keyboards, payments, libs, web, http, games.
Utilityutility
228 commands0 envUpdated 12d agoCreated Oct 18, 2026
commands/_onBuyQR.js
javascript · 424 lines
1/**#command2name: /onBuyQR3answer: 4keyboard: 5parse_mode: markdown6aliases: 7allow_only_group: false8need_reply: false9is_web: 010#command**/11 12try {13 function __qrSent(r) {14 if (!r) return null;15 if (r.ok === false || r.error || r.error_code) return null;16 return r;17 }18 19 function __upiIntent(upiX, amountX, orderIdX, nameX) {20 return "upi://pay?pa=" + encodeURIComponent(upiX) +21 "&pn=" + encodeURIComponent(nameX || "DEV SHOP BOT") +22 "&am=" + encodeURIComponent(Number(amountX || 0).toFixed(2)) +23 "&cu=INR&tn=" + encodeURIComponent(String(orderIdX || ""));24 }25 26 function __qrImageFromIntent(intent) {27 return "https://api.qrserver.com/v1/create-qr-code/?size=600x600&margin=12&data=" +28 encodeURIComponent(intent);29 }30 31 function __sendQrPhoto(chatIdX, rawRes, orderIdX, amountX, caption, kbJson) {32 var upiX = String(33 Bot.getProperty("paytm_upi") ||34 Bot.getProperty("payment_upi_id") || ""35 ).trim();36 37 if (!upiX) upiX = "paytm.s1zxmoz@pty";38 39 var nameX = String(Bot.getProperty("store_name") || "DEV SHOP BOT");40 var intent = "";41 42 try {43 var rr = rawRes || {};44 var dd = (rr.data && typeof rr.data === "object") ? rr.data : {};45 46 var cands = [47 dd.upi_url, dd.upi_link, dd.upi_intent, dd.intent,48 dd.intent_url, dd.qr_string, dd.qr_data, dd.upi,49 rr.upi_url, rr.upi_link, rr.upi_intent, rr.intent,50 rr.intent_url, rr.qr_string, rr.qr_data, rr.upi51 ];52 53 for (var ci = 0; ci < cands.length; ci++) {54 if (cands[ci] && /^upi:\/\//i.test(String(cands[ci]).trim())) {55 intent = String(cands[ci]).trim();56 break;57 }58 }59 } catch (e0) {}60 61 if (!intent) intent = __upiIntent(upiX, amountX, orderIdX, nameX);62 63 // Multiple QR providers - agar ek fail ho to dusra try karega64 var urls = [65 "https://api.qrserver.com/v1/create-qr-code/?size=600x600&margin=12&data=" + encodeURIComponent(intent),66 "https://quickchart.io/qr?size=600&margin=12&text=" + encodeURIComponent(intent),67 "https://chart.googleapis.com/chart?chs=600x600&cht=qr&chl=" + encodeURIComponent(intent)68 ];69 70 var lastErr = "";71 72 for (var i = 0; i < urls.length; i++) {73 try {74 var r = Api.sendPhoto({75 chat_id: chatIdX,76 photo: urls[i],77 caption: caption,78 parse_mode: "HTML",79 reply_markup: kbJson80 });81 82 var ok = __qrSent(r);83 if (ok) return { msg: ok, via: i, urlUsed: urls[i] };84 85 lastErr = (r && (r.description || r.error))86 ? String(r.description || r.error)87 : "empty response";88 } catch (e1) {89 lastErr = String(e1 && e1.message || e1);90 }91 }92 93 return { msg: null, err: lastErr, upi: upiX, intent: intent };94 }95 96 function __qrFallbackText(chatIdX, caption, kbObj, info, orderIdX, amountX, uidX) {97 var upiX = info.upi ||98 (Bot.getProperty("paytm_upi") ||99 Bot.getProperty("payment_upi_id") ||100 "paytm.s1zxmoz@pty");101 102 var upiLink = info.intent ||103 __upiIntent(104 upiX,105 amountX,106 orderIdX,107 String(Bot.getProperty("store_name") || "DEV SHOP BOT")108 );109 110 var linkRow = [{111 text: "Pay via UPI App",112 url: upiLink,113 style: "success",114 icon_custom_emoji_id: "5330237710655306682"115 }];116 117 Api.sendMessage({118 chat_id: chatIdX,119 parse_mode: "HTML",120 text: caption,121 reply_markup: JSON.stringify({122 inline_keyboard: kbObj.concat([linkRow])123 })124 });125 126 try {127 Api.sendMessage({128 chat_id: String(Bot.getProperty("owner_id") || "7127818616"),129 parse_mode: "HTML",130 text: "QR photo failed (user " + uidX +131 ", order " + orderIdX + ")\nError: " +132 String(info.err || "").slice(0, 200)133 });134 } catch (e2) {}135 }136 137 if (!content) {138 Api.sendMessage({139 chat_id: chat.chatid,140 text: "<tg-emoji emoji-id='6267225207560214192'>⚠️</tg-emoji> <b>Error:</b> No response from payment server. Please try again later.",141 parse_mode: "HTML"142 });143 return;144 }145 146 var res;147 148 try {149 res = (typeof content === "object") ? content : JSON.parse(content);150 } catch (parseErr) {151 Api.sendMessage({152 chat_id: chat.chatid,153 text: "<tg-emoji emoji-id='6267225207560214192'>⚠️</tg-emoji> <b>QR Parse Failed</b>\n" +154 String(content).substring(0, 500),155 parse_mode: "HTML"156 });157 return;158 }159 160 var root = res || {};161 var __rawRes = root;162 var payload = root.data || root.result || root.payment || root;163 164 var apiStatus = String(165 root.status || root.payment_status || payload.status || ""166 ).toLowerCase();167 168 var ok = root.success === true ||169 payload.success === true ||170 apiStatus === "success" ||171 apiStatus === "created" ||172 apiStatus === "pending" ||173 apiStatus === "ok";174 175 var orderValue = payload.order_id || payload.orderid ||176 payload.orderId || root.order_id || root.orderid || root.orderId;177 178 var amountValue = payload.amount || root.amount;179 180 var __lockedAmountForQr = Number(181 User.getProperty("buy_needpay") ||182 User.getProperty("buy_expected_amount") || 0183 );184 185 var __upiForQr = String(186 Bot.getProperty("paytm_upi") ||187 Bot.getProperty("payment_upi_id") || ""188 ).trim();189 190 var __fallbackIntent = (__upiForQr && __lockedAmountForQr > 0)191 ? __upiIntent(192 __upiForQr,193 __lockedAmountForQr,194 orderValue || "",195 String(Bot.getProperty("store_name") || "DEV SHOP BOT")196 )197 : "";198 199 if (ok && orderValue) {200 res = {201 status: "success",202 data: {203 order_id: String(orderValue),204 qr_url: __fallbackIntent || "upi-intent",205 amount: amountValue || __lockedAmountForQr206 }207 };208 } else {209 res = { status: "error", data: payload, original: root };210 }211 212 if (!res || res.status !== "success" || !res.data || !res.data.order_id) {213 var debugResponse = "";214 215 try {216 debugResponse = JSON.stringify(res.original || res).substring(0, 700);217 } catch (e) {218 debugResponse = String(res);219 }220 221 Api.sendMessage({222 chat_id: chat.chatid,223 text: "<tg-emoji emoji-id='6267225207560214192'>⚠️</tg-emoji> <b>Paytm QR response incomplete</b>\nPayment server did not return an order ID.\n" +224 debugResponse,225 parse_mode: "HTML"226 });227 return;228 }229 230 var order_id = res.data.order_id;231 var userId = user.telegramid;232 233 try {234 User.setProperty("buy_pending_order_id", String(order_id), "string");235 236 User.setProperty(237 "buy_expected_amount",238 Number(User.getProperty("buy_needpay") ||239 User.getProperty("buy_expected_amount") || 0),240 "number"241 );242 243 Bot.setProperty("buy_pending_order_" + userId, String(order_id), "string");244 } catch (persistErr) {}245 246 try {247 var __gw = Bot.getProperty("pending_gateway_" + userId) ||248 User.getProperty("pending_gateway_" + userId) ||249 User.getProperty("buy_selected_gateway") || "paytm";250 251 Bot.setProperty("pay_gw_" + order_id, String(__gw).toLowerCase(), "string");252 253 var __lockedBuyAmount = Number(254 User.getProperty("buy_needpay") ||255 User.getProperty("buy_expected_amount") || 0256 );257 258 Bot.setProperty("pay_order_amount_" + order_id, __lockedBuyAmount, "number");259 User.setProperty("pay_order_amount_" + order_id, __lockedBuyAmount, "number");260 } catch (__gwBindErr) {}261 262 var price = Number(User.getProperty("buy_price") || 0);263 var userBal = Number(Libs.ResourcesLib.userRes("balance").value() || 0);264 var bonusBal = Number(Bot.getProperty("balance" + userId) || 0);265 var totalUserBal = userBal + bonusBal;266 267 var needpay = Number(268 User.getProperty("buy_needpay") ||269 User.getProperty("buy_expected_amount") ||270 (price > totalUserBal ? price - totalUserBal : 0)271 );272 273 User.setProperty("buy_expected_amount", Number(needpay.toFixed(2)), "number");274 275 var prodName = User.getProperty("buy_prod_name") || "Product";276 277 var __planLabel = String(278 User.getProperty("buy_selected_plan") ||279 User.getProperty("buy_plan_name") ||280 User.getProperty("buy_plan_label") ||281 User.getProperty("buy_plan") ||282 ""283 ).trim();284 285 var __daysRaw = User.getProperty("buy_plan_days");286 287 if (__daysRaw === undefined || __daysRaw === null || __daysRaw === "") {288 __daysRaw = User.getProperty("buy_plan_duration");289 }290 291 if (__daysRaw === undefined || __daysRaw === null || __daysRaw === "") {292 __daysRaw = User.getProperty("buy_plan_value");293 }294 295 var planDays = String(296 (__daysRaw !== undefined && __daysRaw !== null && __daysRaw !== "")297 ? __daysRaw298 : "1"299 ).trim();300 301 var __unitRaw = User.getProperty("buy_plan_unit");302 303 if (__unitRaw === undefined || __unitRaw === null || __unitRaw === "") {304 __unitRaw = User.getProperty("buy_plan_duration_unit");305 }306 307 var planUnit = String(__unitRaw || "").trim().toUpperCase();308 309 if (!planUnit || planUnit === "UNDEFINED" || planUnit === "NULL") {310 var __combinedPlan = (__planLabel + " " + planDays).toUpperCase();311 312 if (/\bHOURS?\b|\bHOUR\b|\bHR\b|\bHRS\b/.test(__combinedPlan)) {313 planUnit = "HOUR";314 } else if (/\bDAYS?\b/.test(__combinedPlan)) {315 planUnit = "DAY";316 } else if (/\bWEEKS?\b/.test(__combinedPlan)) {317 planUnit = "WEEK";318 } else if (/\bMONTHS?\b/.test(__combinedPlan)) {319 planUnit = "MONTH";320 } else if (/\bYEARS?\b/.test(__combinedPlan)) {321 planUnit = "YEAR";322 } else {323 planUnit = "DAY";324 }325 }326 327 planUnit = planUnit.replace(/S$/, "");328 329 if (!planDays || planDays === "undefined" || planDays === "null") {330 var __durationMatch = __planLabel.match(/(\d+(?:\.\d+)?)/);331 if (__durationMatch) planDays = __durationMatch[1];332 }333 334 try {335 var genMsgid = Bot.getProperty("gen_msg_id_" + userId);336 337 if (genMsgid) {338 Api.deleteMessage({339 chat_id: chat.chatid,340 message_id: genMsgid341 });342 343 Bot.setProperty("gen_msg_id_" + userId, null, "string");344 }345 } catch (e) {}346 347 var sep = "┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈";348 349 var gatewayMsg = "╔══════════════════════╗\n" +350 " <tg-emoji emoji-id='6267225207560214192'>⚠️</tg-emoji> <b>UPI QR PAYMENT</b>\n" +351 "╚══════════════════════╝\n\n" +352 sep + "\n\n" +353 "<tg-emoji emoji-id='6147767796097884213'>🏷️</tg-emoji> <b>Product:</b> <code>" + prodName + "</code>\n" +354 "<tg-emoji emoji-id='5348392971207194994'>🎁</tg-emoji> <b>Plan:</b> <code>" + planDays + " " + planUnit + "</code>\n\n" +355 "<tg-emoji emoji-id='6041705726206808304'>💰</tg-emoji> <b>Product Price:</b> ₹" + price.toFixed(2) + "\n" +356 "<tg-emoji emoji-id='5330237710655306682'>⚡</tg-emoji> <b>Amount To Pay:</b> ₹" + needpay.toFixed(2) + "\n\n" +357 sep + "\n\n" +358 "<tg-emoji emoji-id='5330237710655306682'>⚡</tg-emoji> <b>Order ID:</b>\n<code>" + order_id + "</code>\n\n" +359 sep + "\n\n" +360 "<tg-emoji emoji-id='6267225207560214192'>⚠️</tg-emoji> <b>Scan the QR below & pay exact amount</b>";361 362 var inlineButtons = [363 [{364 text: "I have paid",365 callback_data: "/check_buy " + order_id,366 style: "success",367 icon_custom_emoji_id: "5330237710655306682"368 }],369 [{370 text: "Cancel Order",371 callback_data: "/cancel_buy " + order_id,372 style: "danger",373 icon_custom_emoji_id: "6219547832169273793"374 }]375 ];376 377 var sentQrMsg = null;378 379 var __qrRes = __sendQrPhoto(380 chat.chatid,381 __rawRes,382 order_id,383 needpay,384 gatewayMsg,385 JSON.stringify({ inline_keyboard: inlineButtons })386 );387 388 if (__qrRes.msg) {389 sentQrMsg = __qrRes.msg;390 } else {391 __qrFallbackText(392 chat.chatid,393 gatewayMsg,394 inlineButtons,395 __qrRes,396 order_id,397 needpay,398 userId399 );400 return;401 }402 403 try {404 if (sentQrMsg) {405 var qrMsgId = sentQrMsg.result406 ? sentQrMsg.result.message_id407 : sentQrMsg.message_id;408 409 if (qrMsgId) {410 Bot.setProperty("buy_qr_msg_id_" + userId, qrMsgId, "string");411 User.setProperty("buy_pending_order_id", order_id, "string");412 User.setProperty("buy_expected_amount", needpay, "number");413 }414 }415 } catch (e) {}416 417} catch (err) {418 Api.sendMessage({419 chat_id: chat.chatid,420 text: "<tg-emoji emoji-id='6267225207560214192'>⚠️</tg-emoji> <b>System Error:</b> " +421 (err && err.message ? err.message : String(err)),422 parse_mode: "HTML"423 });424}