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
ProfileTelegram
146 commands0 envUpdated 2d agoCreated Sep 5, 2026
Back to folder

commands/_check.js

javascript · 162 lines

Raw
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}