← back to browse
goat command

slot

๐ŸŽฐ Animated Slot (Final Stable)

0
views
0
likes
0
installs
raw source
module.exports = {
  config: {
    name: "slot",
    version: "9.0",
    author: "FARHAN-KHAN",
    role: 0,
    category: "game",
    shortDescription: "๐ŸŽฐ Animated Slot (Final Stable)"
  },

  onStart: async function ({ message, event, args, usersData, threadsData, api }) {
    const { senderID, threadID } = event;

    if (!global.slotCooldown) global.slotCooldown = {};
    if (global.slotCooldown[senderID] && Date.now() - global.slotCooldown[senderID] < 3000)
      return message.reply("โณ | ๐๐ฅ๐ž๐š๐ฌ๐ž ๐–๐š๐ข๐ญ ๐Ÿ‘ ๐’๐ž๐œ๐จ๐ง๐๐ฌ..!");
    global.slotCooldown[senderID] = Date.now();

    let input = args[0];
    if (!input) return message.reply("โŒ | ๐„๐ง๐ญ๐ž๐ซ ๐›๐ž๐ญ ๐š๐ฆ๐จ๐ฎ๐ง๐ญ..! $");

    let bet = input.toLowerCase().endsWith("k") ? parseFloat(input)*1000 :
              input.toLowerCase().endsWith("m") ? parseFloat(input)*1e6 :
              parseFloat(input);

    if (isNaN(bet) || bet < 300) return message.reply("โŒ | ๐Œ๐ข๐ง๐ข๐ฆ๐ฎ๐ฆ ๐›๐ž๐ญ ๐ข๐ฌ ๐Ÿ‘๐ŸŽ๐ŸŽ..!๐Ÿ’ฐ");
    if (bet > 300000000) return message.reply("โŒ | ๐Œ๐š๐ฑ ๐Ÿ‘๐ŸŽ๐ŸŽ๐Œ..!๐Ÿ’ฐ");

    let user = await usersData.get(senderID);
    if (!user || bet > user.money)
      return message.reply("โŒ | ๐๐จ๐ญ ๐ž๐ง๐จ๐ฎ๐ ๐ก ๐ฆ๐จ๐ง๐ž๐ฒ..!๐Ÿ’ฐ");

    let data = await threadsData.get(threadID, "data.slotData") || {};

    if (!data[senderID]) data[senderID] = { spins: 40, lastReset: Date.now() };

    if (Date.now() - data[senderID].lastReset > 3600000)
      data[senderID] = { spins: 40, lastReset: Date.now() };

    if (data[senderID].spins <= 0)
      return message.reply("โณ | ๐๐จ ๐ฌ๐ฉ๐ข๐ง๐ฌ ๐ฅ๐ž๐Ÿ๐ญ..!");

    data[senderID].spins--;

    const icons = ["๐ŸŠ","๐Ÿ‰","๐Ÿ’š","๐Ÿ’›","๐Ÿ’œ","โค๏ธ","๐Ÿ’Ž","๐Ÿ‡","๐Ÿ’"];
    const roll = () => icons[Math.floor(Math.random() * icons.length)];

    let info = await message.reply(`
โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•—
    ๐ŸŽฐโ™ป๏ธ ๐’๐‹๐Ž๐“ ๐Œ๐€๐‚๐‡๐ˆ๐๐„ โ™ป๏ธ๐ŸŽฐ
โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•

โฐ โณ โ”ƒ โณ โ”ƒ โณ โ”ƒ โณ โ”ƒ โณ โฑ

๐ŸŽฐ ๐’๐ฉ๐ข๐ง๐ง๐ข๐ง๐ ...
โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”
`);

    let msgID = info.messageID;

    for (let i = 0; i < 4; i++) {
      let spinLine = `โฐ ${roll()} โ”ƒ ${roll()} โ”ƒ ${roll()} โ”ƒ ${roll()} โ”ƒ ${roll()} โฑ`;
      let spinUI = `โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•—
    ๐ŸŽฐโ™ป๏ธ ๐’๐‹๐Ž๐“ ๐Œ๐€๐‚๐‡๐ˆ๐๐„ โ™ป๏ธ๐ŸŽฐ
โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•

${spinLine}

๐ŸŽฐ ๐’๐ฉ๐ข๐ง๐ง๐ข๐ง๐ ...
โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”`;
      await new Promise(r => setTimeout(r, 300));
      try { await api.editMessage(spinUI, msgID); } catch(e) {}
    }

    let chance = Math.random();
    let resultType;
    if (chance < 0.08) resultType = "jackpot";
    else if (chance < 0.25) resultType = "big";
    else if (chance < 0.50) resultType = "good";
    else if (chance < 0.70) resultType = "small";
    else if (chance < 0.85) resultType = "near";
    else resultType = "lose";

    let s1 = roll(), s2 = roll(), s3 = roll(), s4 = roll(), s5 = roll();
    if (resultType === "near") { s1 = s2 = roll(); }

    let win = 0, text = "", bonus = "";

    if (resultType === "jackpot") {
      win = bet * (10 + Math.random()*5);
      text = "๐Ÿ’Ž ๐‰๐€๐‚๐Š๐๐Ž๐“ ๐Ÿ’Ž";
      bonus = "๐ˆ๐๐’๐€๐๐„ ๐–๐ˆ๐!";
    } else if (resultType === "big") {
      win = bet * (5 + Math.random()*2);
      text = "๐ŸŽ‰ ๐๐ˆ๐† ๐–๐ˆ๐ ๐ŸŽ‰";
      bonus = "๐‡๐ฎ๐ ๐ž ๐ก๐ข๐ญ!";
    } else if (resultType === "good") {
      win = bet * (2 + Math.random());
      text = "๐ŸŽŠ ๐†๐Ž๐Ž๐ƒ ๐–๐ˆ๐ ๐ŸŽŠ";
      bonus = "๐๐ข๐œ๐ž!";
    } else if (resultType === "small") {
      win = bet * (1.2 + Math.random()*0.5);
      text = "โœจ ๐’๐Œ๐€๐‹๐‹ ๐–๐ˆ๐ โœจ";
      bonus = "๐‹๐ฎ๐œ๐ค๐ฒ!";
    } else if (resultType === "near") {
      win = -bet * 0.2;
      text = "๐€๐‹๐Œ๐Ž๐’๐“!๐Ÿ’";
      bonus = "๐’๐จ ๐œ๐ฅ๐จ๐ฌ๐ž!";
    } else {
      win = -bet;
      text = "๐Ÿ˜ข ๐‹๐Ž๐’๐“ ๐Ÿ˜ข";
      bonus = "๐“๐ซ๐ฒ ๐š๐ ๐š๐ข๐ง!";
    }

    win = Math.floor(win);
    let newBal = user.money + win;

    await usersData.set(senderID, { money: newBal, data: user.data });
    await threadsData.set(threadID, data, "data.slotData");

    const format = n =>
      n >= 1e6 ? (n/1e6).toFixed(2)+"M" :
      n >= 1e3 ? (n/1e3).toFixed(2)+"K" : n;

    let final = `โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•—
    ๐Ÿ”ฐโ™ป๏ธ ๐’๐‹๐Ž๐“ ๐Œ๐€๐‚๐‡๐ˆ๐๐„ โ™ป๏ธ๐Ÿ”ฐ
โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•

โฐ ${s1} โ”ƒ ${s2} โ”ƒ ${s3} โ”ƒ ${s4} โ”ƒ ${s5} โฑ

โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”
๐ŸŽฏ ๐‘๐„๐’๐”๐‹๐“: โžค  ${text} 

${win>0?`๐ŸŸข ๐–๐ˆ๐: โžค ใ€Ž \[ {format(win)} ใ€`:`๐Ÿ”ด ๐‹๐Ž๐’๐’: โžค ใ€Ž \]{format(-win)} ใ€`}

๐Ÿ’ฐ ๐๐€๐‹๐€๐๐‚๐„: โžค ใ€Ž $${format(newBal)} ใ€

๐ŸŽฒ ๐’๐๐ˆ๐๐’: โžค ใ€Ž ${data[senderID].spins}/40 ใ€

๐Ÿ’กใ€Ž ${bonus} ใ€
โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”`;

    if (resultType === "jackpot") await message.reply("๐Ÿ’Ž๐Ÿ’Ž ๐‰๐€๐‚๐Š๐๐Ž๐“ ๐Ÿ’Ž๐Ÿ’Ž");

    try {
      await api.editMessage(final, msgID);
    } catch(e) {
      return message.reply(final);
    }
  }
};

View raw file