const axios = require("axios"); // ๐Ÿ”น SAME API const API_URL = "https://balance-bot-api.onrender.com"; // ๐Ÿ”น Get balance async function getBalance(userID) { try { const res = await axios.get(`${API_URL}/api/balance/${userID}`); return res.data.balance || 100; } catch { return 100; } } // ๐Ÿ”น Add balance async function winGame(userID, amount) { try { const res = await axios.post(`${API_URL}/api/balance/win`, { userID, amount }); return res.data.success ? res.data.balance : null; } catch { return null; } } // ๐Ÿ”น Lose balance async function loseGame(userID, amount) { try { const res = await axios.post(`${API_URL}/api/balance/lose`, { userID, amount }); return res.data.success ? res.data.balance : null; } catch { return null; } } // ๐Ÿ”น Slot Machine class class SlotMachine { constructor() { this.symbols = ["๐Ÿ’","๐ŸŠ","๐Ÿ‹","๐Ÿ‰","๐Ÿ‡","โญ","7๏ธโƒฃ","๐Ÿ’Ž"]; this.payouts = { "๐Ÿ’Ž๐Ÿ’Ž๐Ÿ’Ž": 100, "7๏ธโƒฃ7๏ธโƒฃ7๏ธโƒฃ": 50, "โญโญโญ": 30, "๐Ÿ‡๐Ÿ‡๐Ÿ‡": 20, "๐Ÿ‰๐Ÿ‰๐Ÿ‰": 15, "๐Ÿ‹๐Ÿ‹๐Ÿ‹": 10, "๐ŸŠ๐ŸŠ๐ŸŠ": 8, "๐Ÿ’๐Ÿ’๐Ÿ’": 5 }; } spin() { const reels = []; let isWin = Math.random() < 0.6; // 60% win chance if(isWin) { const winningCombos = Object.keys(this.payouts); const combo = winningCombos[Math.floor(Math.random() * winningCombos.length)]; reels.push(...combo.split('')); } else { while(reels.length < 3) { const symbol = this.symbols[Math.floor(Math.random() * this.symbols.length)]; reels.push(symbol); } const resultStr = reels.join(''); if(this.payouts[resultStr]) { reels[0] = this.symbols[Math.floor(Math.random() * this.symbols.length)]; } } const result = reels.join(''); const multiplier = this.payouts[result] || 0; return { reels, result, multiplier }; } } // ๐Ÿ”น Format balance function formatBalance(num) { return num.toLocaleString("en-US") + " $"; } // ๐Ÿ”น Create final spin message function createMessage(reels, bet, multiplier, newBalance) { const spinDisplay = reels.map(r => r || "โ“").join(" | "); if(multiplier > 0) { return `๐ŸŽฐ SสŸแดแด› Mแด€แด„สœษชษดแด‡ ๐ŸŽฐ\n\n[ ${spinDisplay} ]\n\n๐ŸŽ‰ Win!\n๐Ÿ’ต Bet: ${formatBalance(bet)}\nโœ… Won: ${formatBalance(bet*multiplier)}\n๐Ÿ’ณ New Balance: ${formatBalance(newBalance)}`; } else { return `๐ŸŽฐ SสŸแดแด› Mแด€แด„สœษชษดแด‡ ๐ŸŽฐ\n\n[ ${spinDisplay} ]\n\n๐Ÿ’€ Loss\n๐Ÿ’ฐ Bet: ${formatBalance(bet)}\nโŒ Won: 0 $\n๐Ÿ’ณ New Balance: ${formatBalance(newBalance)}`; } } // ๐Ÿ”น Module exports module.exports = { config: { name: "slot", aliases: ["spin"], version: "1.2", author: "Mแดสœแด€แดแดแด€แด… Aแด‹แด€sสœ", role: 0, shortDescription: "Slot Machine 60% Win (Reply Based)", category: "economy" }, onStart: async function({ api, event, args }) { const { threadID, senderID, messageID } = event; const currentBalance = await getBalance(senderID); const slot = new SlotMachine(); let bet = args[0]?.toLowerCase() === "max" ? Math.floor(currentBalance*0.1) : parseFloat(args[0]); if(isNaN(bet) || bet < 10) bet = 10; if(bet > currentBalance) return api.sendMessage( `โŒ Insufficient Balance\n๐Ÿ’ณ Balance: ${formatBalance(currentBalance)}\n๐Ÿ’ฐ Bet: ${formatBalance(bet)}`, threadID, messageID // โœ… reply to command ); // Initial spin message const spinMsg = await api.sendMessage( `๐ŸŽฐ SสŸแดแด› Mแด€แด„สœษชษดแด‡ ๐ŸŽฐ\n\n[ ๐Ÿ‰ | โ“ | โ“ ]\n\nSpinning...`, threadID, messageID // โœ… reply to command ); await new Promise(r => setTimeout(r, 1500)); // Spin reels const spinResult = slot.spin(); const winAmount = Math.floor(bet * spinResult.multiplier); // Update balance let newBalance; if(winAmount > 0) newBalance = await winGame(senderID, winAmount); else newBalance = await loseGame(senderID, bet); // Final message const finalMsg = createMessage(spinResult.reels, bet, spinResult.multiplier, newBalance); await api.editMessage(finalMsg, spinMsg.messageID, threadID); } };