ayushyadav7970824760/goldensellingstore_botPublic · Bot Template
AIThis Telegram store bot lets customers browse digital products and plans, apply coupons, add funds via UPI, and receive purchased keys. It includes a full admin panel for managing products, reordering items, setting reseller prices, viewing and removing key stock, configuring UPI payment details and update links, and checking user balances. Co-admins and resellers are supported, and support tickets are forwarded to the admin.
Commercedigital_storeadmin_panelupi_paymentsresellercouponskey_stock
146 commands0 envUpdated 2d agoCreated Sep 5, 2026
commands/_check.js
javascript · 162 lines
1/**#command2name: /check3answer: 4keyboard: 5parse_mode: markdown6aliases: 7allow_only_group: false8need_reply: false9is_web: 010#command**/11 12// =========================================================13// 🚀 MANUAL PAYMENT VERIFY TRIGGER COMMAND14// COMMAND: /check15// =========================================================16 17try {18 var order_id = params ? params.trim() : "";19 20 // Agar params direct na mile toh callback_query data se extract karein21 if (!order_id && request && request.callback_query) {22 var cbData = request.callback_query.data;23 order_id = cbData.replace("/check", "").replace("check", "").trim().split(" ")[0];24 }25 26 if (!order_id) {27 var queryId = request ? (request.id || (request.callback_query && request.callback_query.id)) : null;28 if (queryId) {29 Api.answerCallbackQuery({30 callback_query_id: queryId,31 text: "❌ Invalid or Missing Order ID!",32 show_alert: true33 });34 } else {35 Bot.sendMessage(36 "<blockquote><tg-emoji emoji-id='5875506366050734240'>➡️</tg-emoji> <b>Invalid or Missing Order ID!</b> Please try initiating the payment again.</blockquote>", 37 { parse_mode: "HTML" }38 );39 }40 return;41 }42 43 // ✅ BUG FIX: /onQR.js "Api.sendPhoto()" ka return value is bot-framework me44 // reliably message_id nahi deta, isliye "qr_msg_id_" property kabhi save hi45 // nahi hoti thi — aur baad me /onCheck.js ka "vanishQrMessage()" us khaali46 // property ki wajah se QR photo dhoondh hi nahi paata tha, isliye verify hone47 // ke baad bhi QR chat me pada reh jaata tha.48 // Fix: jab "Verify Payment" button dabaya jaata hai, wo button hamesha usi QR49 // photo message par hota hai jispar hai — matlab "request.message.message_id"50 // 100% sahi QR message ki ID hai. Ise yahin par (guaranteed) capture karke51 // save kar rahe hain taaki /onCheck.js use turant delete kar sake.52 try {53 var verifyUserId = user ? user.telegramid : null;54 if (verifyUserId && request && request.message && request.message.message_id) {55 Bot.setProperty("qr_msg_id_" + verifyUserId, request.message.message_id, "string");56 User.setProperty("qr_msg_id_" + verifyUserId, request.message.message_id, "string");57 }58 } catch (idErr) {}59 60 // ✅ Order ki QR photo message_id capture already ho chuki hai upar.61 62 // =====================================================63 // ✋ MANUAL MODE — agar admin ne "Toggle UPI Payment Mode" se Manual64 // Approval on kiya hai, to Fampay ki verify.php API bilkul call nahi hoti.65 // QR wahi Fampay wala rehta hai, lekin:66 // 1) "Verify Payment" click karte hi wahi QR message EDIT ho kar67 // "WAITING FOR CONFIRMATION..." ban jaata hai (naya message nahi).68 // 2) Admin ko Approve/Reject ke saath order details jaate hain.69 // 3) Approve/Reject hone par yehi QR message DELETE ho jaata hai aur70 // ek nayi "Payment Successful/Rejected" message aati hai.71 // =====================================================72 if ((Bot.getProperty("upi_payment_mode") || "auto") === "manual") {73 var manualVerifyUserId = user ? String(user.telegramid) : null;74 var manualAmount = Bot.getProperty("qr_order_amount_" + order_id) ||75 User.getProperty("deposit_amount") ||76 User.getProperty("buy_needpay") ||77 "0";78 manualAmount = String(parseFloat(manualAmount) || 0);79 80 var manualAdminId = Bot.getProperty("owner_id") || "8477746023";81 var manualFullName = ((user.first_name || "") + " " + (user.last_name || "")).trim() || "No Name";82 var manualUsername = user.username ? "@" + user.username : "No Username";83 84 // ✅ QR message ka reference save karo — Approve/Reject ke waqt isi ko85 // delete karna hai.86 var manualQrChatId = String(chat.chatid);87 var manualQrMsgId = request && request.message ? Number(request.message.message_id) : null;88 try {89 Bot.setProperty("qr_msg_ref_" + order_id, JSON.stringify({ chatId: manualQrChatId, msgId: manualQrMsgId }), "string");90 } catch (e) {}91 92 // ✅ QR message ko EDIT karke "WAITING FOR CONFIRMATION" state me le jao93 if (manualQrMsgId) {94 try {95 Api.editMessageCaption({96 chat_id: manualQrChatId,97 message_id: manualQrMsgId,98 caption: "<blockquote>⏳ <b>WAITING FOR CONFIRMATION</b></blockquote>\n\n" +99 "<i>We're checking for your payment... This will update automatically once confirmed.</i>\n\n" +100 "👉 <i>Make sure you paid the </i><b>exact amount</b><i> shown.</i>\n\n" +101 "<blockquote>💳 <b>Payment verification is in progress.</b></blockquote>",102 parse_mode: "HTML",103 reply_markup: JSON.stringify({ inline_keyboard: [[{ text: "Cancel Order", callback_data: "/cancel_order", style: "danger" }]] })104 });105 } catch (e) {}106 }107 108 // ✅ FIXED: Telegram callback_data ki 64-byte limit se zyada ho jaata tha109 // (order_id + userId + amount saath likhne se) jiski wajah se Telegram110 // POORI admin message hi silently reject kar deta tha — isliye Approve/111 // Reject kabhi aata hi nahi tha. Ab ek CHOTA reference token banate hain112 // aur asli data Bot property me store karte hain.113 var manualApprovalToken = String(Date.now()).slice(-8) + Math.random().toString(36).slice(2, 6);114 try {115 Bot.setProperty("upi_appr_" + manualApprovalToken, JSON.stringify({116 userId: manualVerifyUserId,117 username: manualUsername,118 fullName: manualFullName,119 amount: manualAmount,120 orderId: order_id121 }), "string");122 } catch (e) {}123 124 try {125 Api.sendMessage({126 chat_id: manualAdminId,127 text: "<blockquote>💳 <b>NEW UPI PAYMENT — VERIFY REQUESTED</b></blockquote>\n\n" +128 "👤 <b>User:</b> " + manualFullName + " (" + manualUsername + ") — <code>" + manualVerifyUserId + "</code>\n" +129 "🧾 <b>Order ID:</b> <code>" + order_id + "</code>\n" +130 "💰 <b>Amount:</b> ₹<code>" + manualAmount + "</code>\n\n" +131 "<i>Apne UPI app me payment check karke Approve ya Reject dabayein.</i>",132 parse_mode: "HTML",133 reply_markup: JSON.stringify({134 inline_keyboard: [[135 { text: "✅ Approve & Credit ₹" + manualAmount, callback_data: "/addbal_upi_manual_approve " + manualApprovalToken, style: "success" }136 ], [137 { text: "❌ Reject", callback_data: "/addbal_upi_manual_reject " + manualApprovalToken, style: "danger" }138 ]]139 })140 });141 } catch (manualNotifyErr) {}142 143 var manualQId = request ? (request.id || (request.callback_query && request.callback_query.id)) : null;144 if (manualQId) {145 try { Api.answerCallbackQuery({ callback_query_id: String(manualQId), text: "⏳ Sent for admin approval!" }); } catch (e) {}146 }147 148 return; // 🚫 STOP — Fampay verify API call nahi hui149 }150 151 // Gateway API Details152 var api_key = Bot.getProperty("payment_api_key") || "FAM_LIVE_sk_NEuh3uQjhlTbprvSQOBVcvhtyMhp56iw"; 153 var uniqueTime = new Date().getTime(); // Anti-cache parameter154 155 HTTP.get({156 url: "https://fampay.anujbots.xyz/verify.php?order_id=" + encodeURIComponent(order_id) + "&api_key=" + api_key + "&cb=" + uniqueTime,157 success: "/onCheck"158 });159 160} catch (err) {161 Bot.sendMessage("⚠️ System Error: " + err.message);162}