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