Depo reply

by A

17
Raw
if ((userInput === 'ya' || userInput === 'lanjut') && activeTransaction.session === 'konfirmasi_deposit') {
    try {
        transactionDatabase[activeTransactionId].session = 'menunggu_pembayaran';
        writeDatabase(transactionDatabase);

        const paymentPath = `./db/xstbot/imageList/orkut_${activeTransactionId}.jpg`;
        const pay = await qrisDinamis(
            `${activeTransaction.data.total_deposit}`,
            paymentPath
        );

        const startTime = Date.now();
        const expireTime = startTime + toMs("10m");

        const mess = await xstbot.sendMessage(from, {
            image: fs.readFileSync(pay),
            caption: `*「 MENUNGGU PEMBAYARAN 」*\nSilahkan scan QRIS. Berlaku 10 menit.\nDeposit tidak bisa dibatalkan setelah tahap ini.\n\nNote :\n- Kode unik akan ikut masuk ke saldo kamu ya.\n- Jika bot tidak mengkonfirmasi setelah anda melakukan pembayaran, mohon hubungi owner untuk mengkonfirmasi.`
        }, { quoted: m }); // Added quoted: m to reply to the user

        const sleep = ms => new Promise(res => setTimeout(res, ms));
        let checkCount = 0;

        while (checkCount < 60 && transactionDatabase[activeTransactionId]) {
            await sleep(10000); // Check every 10 seconds
            checkCount++;

            if (Date.now() >= expireTime) {
                await xstbot.sendMessage(from, { delete: mess.key });
                await xstbot.sendMessage(from, { text: "⏰ Deposit dibatalkan otomatis karena melewati batas waktu." }, { quoted: m }); // Added quoted: m
                delete transactionDatabase[activeTransactionId];
                writeDatabase(transactionDatabase);

                try {
                    if (fs.existsSync(paymentPath)) {
                        fs.unlinkSync(paymentPath);
                    }
                } catch (err) {
                    console.error("Error deleting QRIS image:", err);
                }
                break;
            }

            const isPaid = await checkPaymentStatus(
                activeTransaction.data.total_deposit,
                merchantId,
                apikey_orkut,
                expireTime,
                startTime
            );

            if (isPaid) {
                await xstbot.sendMessage(from, { delete: mess.key });
                const nominal = activeTransaction.data.total_deposit;

                const saldoSebelum = getUserBalance(sender);
                addUserBalance(sender, nominal);
                const saldoSekarang = getUserBalance(sender);

                const text_sukses = `*「 DEPOSIT SUKSES 」*\n\n` +
                    `*› ReffID :* ${activeTransactionId}\n` +
                    `*› Nomor :* ${sender.split('@')[0]}\n` +
                    `*› Tanggal :* ${activeTransaction.date}\n` +
                    `*› Jumlah :* ${rupiah(nominal)}\n` +
                    `*› Saldo Sebelumnya :* ${rupiah(saldoSebelum)}\n` +
                    `*› Saldo Sekarang :* ${rupiah(saldoSekarang)}`;

                const toOwner = `*DEPOSIT DARI ${sender.split('@')[0]}*\n*Sebesar : ${rupiah(nominal)}*\n*BERHASIL*`;

                // Send success messages
                await xstbot.sendMessage(from, { text: text_sukses }, { quoted: m }); // Added quoted: m
                await xstbot.sendMessage(ownerNumber, { text: toOwner }, { quoted: m }); // Added quoted: m for owner message

                // Delete QRIS image
                if (fs.existsSync(paymentPath)) {
                    fs.unlinkSync(paymentPath);
                }

                // Update transaction status
                transactionDatabase[activeTransactionId].session = 'sukses_deposit';
                transactionDatabase[activeTransactionId].success_time = Date.now();
                writeDatabase(transactionDatabase);

                // Set auto cleanup after 10 minutes
                setTimeout(() => {
                    const currentDb = readDatabase();
                    if (currentDb[activeTransactionId] && currentDb[activeTransactionId].session === 'sukses_deposit') {
                        delete currentDb[activeTransactionId];
                        writeDatabase(currentDb);
                        console.log(`⏰ Deposit ${activeTransactionId} otomatis dihapus setelah 10 menit.`);
                    }
                }, 10 * 60 * 1000);

                break;
            }
        }

    } catch (err) {
        console.error("Deposit error:", err);
        await xstbot.sendMessage(from, { text: "Terjadi kesalahan. Deposit dibatalkan." }, { quoted: m }); // Added quoted: m
        delete transactionDatabase[activeTransactionId];
        writeDatabase(transactionDatabase);
    }
    break;
}