const mongoose = require("mongoose"); const BankUser = mongoose.models.DiabloBankUser || mongoose.model("DiabloBankUser", new mongoose.Schema({ userID: { type: String, required: true, unique: true }, balance: { type: Number, default: 1000 } })); const LuckyStats = mongoose.models.LuckyStats || mongoose.model("LuckyStats", new mongoose.Schema({ userID: { type: String, required: true, unique: true }, wins: { type: Number, default: 0 }, rounds: { type: Number, default: 0 }, bestWin: { type: Number, default: 0 }, spins: { type: Number, default: 30 }, lastReset: { type: Date, default: Date.now } })); let emojis = ["⭐","šŸ”®","šŸ’ ","✨","šŸ‘‘","šŸ’Ž","šŸŽ","šŸ€"] function formatMoney(num) { if (num >= 1000000000) return (num / 1000000000).toFixed(1).replace(/\.0$/, "") + "B"; if (num >= 1000000) return (num / 1000000).toFixed(1).replace(/\.0$/, "") + "M"; if (num >= 1000) return (num / 1000).toFixed(1).replace(/\.0$/, "") + "K"; return num.toLocaleString(); } function getTimeLeft(ms) { let h = Math.floor(ms / 3600000); let m = Math.floor((ms % 3600000) / 60000); return `${h}h ${m}m`; } module.exports = { config: { name: "luckyspin", aliases: ["lspin", "ls"], version: "2.0", author: "Sazzad", countDown: 2, role: 0, shortDescription: "Lucky Spin 2H Reset", category: "game", guide: { en: "{p}luckyspin\n{p}luckyspin top" } }, onStart: async function({ api, event, args, message, usersData }) { const uid = event.senderID; let user = await BankUser.findOne({ userID: uid }) || await BankUser.create({ userID: uid }); let stats = await LuckyStats.findOne({ userID: uid }) || await LuckyStats.create({ userID: uid }); // 2h reset check let now = Date.now(); let diff = now - stats.lastReset; if(diff >= 7200000) { // 2 hours = 7200000ms stats.spins = 30; stats.lastReset = now; await stats.save(); } if(args[0] == "top") { let top = await LuckyStats.find().sort({bestWin: -1}).limit(10); let msg = `šŸ‘‘ š—Ÿš—Øš—–š—žš—¬š—¦š—£š—œš—” š—Ÿš—˜š—”š——š—˜š—„š—•š—¢š—”š—„š—— šŸ‘‘\nā‡ā”ā”ā”ā”ā”ā”ā”ā”ā”ā”ā‡œ\n\n`; for(let i = 0; i < top.length; i++) { let name = await usersData.getName(top[i].userID); msg += `šŸ… #${i+1} ${name}\nšŸ’Ž Best Win: $${formatMoney(top[i].bestWin)}\nšŸŽÆ Total Wins: ${top[i].wins}\n\n`; } return message.reply(msg); } if(stats.spins <= 0) { let left = 7200000 - diff; return message.reply(`šŸŽŸļø š—”š—¢ š—¦š—£š—œš—”š—¦ š—Ÿš—˜š—™š—§!\nā° Reset in: ${getTimeLeft(left)}\n\nUse #luckyspin top to see ranking`); } stats.spins -= 1; stats.rounds += 1; // spin result let r1 = emojis[Math.floor(Math.random() * emojis.length)]; let r2 = emojis[Math.floor(Math.random() * emojis.length)]; let r3 = emojis[Math.floor(Math.random() * emojis.length)]; let result = [r1, r2, r3]; let win = 0; let status = "āŒ š‹šŽš’š“!"; let color = "šŸ”“"; if(r1 == r2 && r2 == r3) { win = Math.floor(Math.random() * 90000000) + 10000000; // 10M - 100M status = "šŸ‘‘ š‰š€š‚šŠššŽš“!!!"; color = "🟔"; stats.wins += 1; if(win > stats.bestWin) stats.bestWin = win; } else if(r1 == r2 || r2 == r3 || r1 == r3) { win = Math.floor(Math.random() * 9000000) + 1000000; // 1M - 10M status = "🟢 ššˆš‚š„ š‡šˆš“!"; color = "🟢"; stats.wins += 1; if(win > stats.bestWin) stats.bestWin = win; } user.balance += win; await user.save(); await stats.save(); let winrate = stats.rounds > 0? ((stats.wins/stats.rounds)*100).toFixed(1) : 0; let reply = `✨ ═══ š—Ÿš—Øš—–š—žš—¬š—¦š—£š—œš—” š—„š—˜š—¦š—Øš—Ÿš—§ ═══ ✨ ā”ā”ā”ā”ā”ā”ā”ā”ā”ā”ā”“ ā”ƒ ${r1} │ ${r2} │ ${r3} ā”ƒ ┗━━━━━━━━━━━━━━━━━┛ ${color} ${status} šŸ’° š—Ŗš—¢š—”: $${formatMoney(win)} šŸ“Š š—¬š—¢š—Øš—„ š—¦š—§š—”š—§š—¦ ā”œ šŸ† Wins: ${stats.wins} ā”œ šŸŽÆ Rounds: ${stats.rounds} ā”œ šŸ“ˆ Winrate: ${winrate}% ā”œ šŸ”„ Best: $${formatMoney(stats.bestWin)} ā”œ šŸ’Ž Balance: $${formatMoney(user.balance)} ā”” šŸŽŸļø Spins Left: ${stats.spins}/30 šŸ‘‘ Type #luckyspin top for Global Ranking`; return message.reply(reply); } };