case 'depos': case 'depo': case 'deposit': { try { const nomor = sender.replace("@s.whatsapp.net", ""); const userData = JSON.parse(fs.readFileSync('./db/users.json')); const userProfile = userData.find((user) => user.nomor === nomor); if (!userProfile) { return m.reply(`Kamu belum terdaftar, silahkan ketik : *Daftar*\nuntuk bisa mengakses`); } const { role } = userProfile; if (!text) return m.reply(`*DEPOSIT SALDO OTOMATIS*\n\nSilahkan gunakan dengan cara :\n${prefix + command} nominalnya\n\nContoh :\n${prefix + command} 10000\n\nMinimal deposit otomatis adalah Rp 10.000 dan maksimal Rp 2.000.000`); const amount = args[0]; const minimalDepo = 1; const maximalDepo = 499000; if (!amount || isNaN(parseInt(amount))) return m.reply('Deposit Harus Berupa Angka!'); if (parseInt(amount) < minimalDepo) return m.reply(`Minimal deposit saldo otomatis adalah Rp ${rupiah(minimalDepo)}. Jika kamu ingin deposit dibawah itu silahkan ketik ${prefix}depomanual atau hubungi Admin`); if (parseInt(amount) > maximalDepo) return m.reply(`Maksimal deposit saldo otomatis adalah Rp ${rupiah(maximalDepo)}. Jika kamu ingin deposit diatas itu silahkan ketik ${prefix}depomanual atau hubungi Admin`); try { const checkPhoneResponse = await axios.get( `https://xstbot.apiorkut.my.id/check-phone/${nomor}` ); if (checkPhoneResponse.data.success && checkPhoneResponse.data.hasPending) { const sessionData = checkPhoneResponse.data.session; const timeLeftMinutes = Math.floor(sessionData.timeLeft / 60); return m.reply(`Kamu masih memiliki transaksi deposit aktif dengan total Rp ${rupiah(sessionData.totalAmount)}.\n\nSisa waktu: ${timeLeftMinutes} menit\nSilakan selesaikan pembayaran sebelumnya atau tunggu hingga kedaluwarsa.`); } } catch (error) { console.log('Error checking phone status:', error.response?.data?.message || error.message); } try { const createTopupResponse = await axios.post( 'https://xstbot.apiorkut.my.id/create-topup', { amount: parseInt(amount), phone: nomor, customerInfo: `${userProfile.name || "Deposit Bot User"} - Topup Saldo` }, { headers: { 'Content-Type': 'application/json' } } ); if (!createTopupResponse.data.success) { if (createTopupResponse.data.existingSessionId) { return m.reply(`${createTopupResponse.data.message}`); } return m.reply("Gagal membuat sesi topup. Silahkan coba lagi nanti."); } const sessionId = createTopupResponse.data.sessionId; const statusResponse = await axios.get( `https://xstbot.apiorkut.my.id/status/${sessionId}` ); if (!statusResponse.data.success) { return m.reply("Gagal mendapatkan detail transaksi. Silahkan coba lagi."); } const transactionData = statusResponse.data; const uniqueCode = transactionData.uniqueCode; const totalAmount = transactionData.totalAmount; const qrisImageUrl = `https://xstbot.apiorkut.my.id/qris/qris_${sessionId}.jpg`; const expiredAt = new Date(transactionData.expiredAt); const timeLeftMinutes = Math.floor(transactionData.timeLeft / 60); let depositSaldoBot = `[ *Deposit Saldo Otomatis* ]\n\n`; depositSaldoBot += `-> Jumlah Deposit: ${rupiah(parseInt(amount))}\n`; depositSaldoBot += `-> Kode Unik: ${uniqueCode}\n`; depositSaldoBot += `-> Total Bayar: ${rupiah(totalAmount)}\n`; depositSaldoBot += `-> ID: ${sessionId}\n\n`; depositSaldoBot += `Silahkan Scan QR ini untuk melakukan pembayaran, berlaku selama ${timeLeftMinutes} menit.`; const sentMessage = await xstbot.sendMessage( m.chat, { image: { url: qrisImageUrl }, caption: depositSaldoBot }, { quoted: m } ); const startTime = Date.now(); const maxWaitTime = transactionData.timeLeft * 1000; const checkPayment = async () => { try { while (true) { await new Promise(resolve => setTimeout(resolve, 10000)); const elapsed = Date.now() - startTime; if (elapsed >= maxWaitTime) { await xstbot.sendMessage(m.chat, { text: "Pembayaran QRIS telah kedaluwarsa." }, { quoted: m }); return; } const currentStatusResponse = await axios.get( `https://xstbot.apiorkut.my.id/status/${sessionId}` ); if (!currentStatusResponse.data.success) { console.log('Error checking status:', currentStatusResponse.data.message); continue; } const currentStatus = currentStatusResponse.data; if (currentStatus.status === "expired" || currentStatus.timeLeft <= 0) { await xstbot.sendMessage(m.chat, { text: "Pembayaran QRIS telah kedaluwarsa." }, { quoted: m }); return; } if (currentStatus.status === "paid" && currentStatus.paidAt) { try { const pathUser = './db/users.json'; const target = nomor; const amountToAdd = currentStatus.totalAmount; let userData = []; if (fs.existsSync(pathUser)) { const rawData = fs.readFileSync(pathUser, 'utf8'); userData = JSON.parse(rawData); } const targetUserIndex = userData.findIndex((user) => user.nomor === target); if (targetUserIndex !== -1) { const sebelum = userData[targetUserIndex].saldo; userData[targetUserIndex].saldo += amountToAdd; const akhir = userData[targetUserIndex].saldo; fs.writeFileSync(pathUser, JSON.stringify(userData, null, 2)); await xstbot.sendMessage(m.chat, { text: `───〔 *Deposit Berhasil* 〕───\n\n*Nomor :* ${target}\n*Jumlah Deposit :* ${rupiah(parseInt(amount))}\n*Kode Unik :* ${currentStatus.uniqueCode}\n*Total Dibayar :* ${rupiah(currentStatus.totalAmount)}\n*Saldo Masuk :* ${rupiah(amountToAdd)}\n*Saldo Sebelumnya :* ${formatSaldo(sebelum)}\n*Saldo Sekarang :* ${formatSaldo(akhir)}\n*Waktu :* ${hariini}, ${time1} WIB\n*ID Transaksi :* ${sessionId}` }, { quoted: m }); } else { await xstbot.sendMessage(m.chat, { text: `*Deposit Berhasil* tapi gagal mengupdate saldo. Silahkan hubungi admin dengan menyertakan ID Transaksi: ${sessionId}` }, { quoted: m }); } break; } catch (error) { console.error('Error updating user balance:', error); await xstbot.sendMessage(m.chat, { text: `*Deposit Berhasil* tapi gagal mengupdate saldo. Silahkan hubungi admin dengan menyertakan ID Transaksi: ${sessionId}` }, { quoted: m }); break; } } } } catch (error) { console.error('Payment check error:', error); m.reply("Terjadi kesalahan saat memeriksa status pembayaran. Silakan hubungi admin jika pembayaran sudah dilakukan."); } }; checkPayment(); } catch (error) { console.error('Create topup error:', error); if (error.response) { const errorData = error.response.data; if (!errorData.success) { if (errorData.existingSessionId) { m.reply(errorData.message); } else if (errorData.message.includes("Amount must be between")) { m.reply('Jumlah deposit tidak valid. Minimal Rp 10.000 dan maksimal Rp 499.000.'); } else if (errorData.message.includes("Invalid phone number")) { m.reply('Format nomor telepon tidak valid.'); } else { m.reply(`Gagal membuat sesi topup: ${errorData.message}`); } } else { m.reply('Terjadi kesalahan saat memproses permintaan deposit. Silakan coba lagi nanti.'); } } else { m.reply('Terjadi kesalahan koneksi. Silakan coba lagi nanti.'); } } } catch (error) { console.error('User verification error:', error); m.reply('Terjadi kesalahan saat memverifikasi data pengguna. Silakan coba lagi nanti atau hubungi admin.'); } break; }