← back to browse
goat command

mine

๐Ÿ’ฃ Mine Game (GoatBot Safe)

0
views
0
likes
0
installs
raw source
const mbet = 1000000;
const dln = 20;
const dlp = 30;

const line = "โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”";

/* ===== FORMAT MONEY ===== */
const fm = (n = 0) => {
  if (n >= 1e15) return (n / 1e15).toFixed(2) + "QT";
  if (n >= 1e12) return (n / 1e12).toFixed(2) + "Q";
  if (n >= 1e9)  return (n / 1e9).toFixed(2) + "B";
  if (n >= 1e6)  return (n / 1e6).toFixed(2) + "M";
  if (n >= 1e3)  return (n / 1e3).toFixed(2) + "K";
  return String(n);
};

const pbet = (input) => {
  if (!input) return NaN;
  const s = input.toLowerCase();
  if (s.endsWith("qt")) return Number(s.slice(0, -2)) * 1e15;
  if (s.endsWith("q"))  return Number(s.slice(0, -1)) * 1e12;
  if (s.endsWith("b"))  return Number(s.slice(0, -1)) * 1e9;
  if (s.endsWith("m"))  return Number(s.slice(0, -1)) * 1e6;
  if (s.endsWith("k"))  return Number(s.slice(0, -1)) * 1e3;
  return Number(s);
};

const bdDate = () =>
  new Date().toLocaleDateString("en-CA", { timeZone: "Asia/Dhaka" });

const getBadge = (i) => {
  if (i === 0) return "๐Ÿฅ‡";
  if (i === 1) return "๐Ÿฅˆ";
  if (i === 2) return "๐Ÿฅ‰";
  return "๐ŸŽ–๏ธ";
};

module.exports = {
  config: {
    name: "mine",
    version: "2.0.0",
    author: "ARIYAN",
    role: 0,
    category: "game",
    description: "๐Ÿ’ฃ Mine Game (GoatBot Safe)",
    guide: {
      en:
        "{pn} <bet>\n" +
        "{pn} info\n" +
        "{pn} top"
    }
  },

  onStart: async function ({ api, event, args, message, usersData }) {
    const { senderID, threadID } = event;
    const sub = (args[0] || "").toLowerCase();
    const today = bdDate();

    let user = await usersData.get(senderID) || {};
    user.data = user.data || {};
    user.money = user.money || 0;

    const isPremium = user.data?.premium?.status === true;
    const dailyLimit = isPremium ? dlp : dln;

    let todayStats = user.data.mineToday || {};
    if (todayStats.date !== today) {
      todayStats = {
        date: today,
        play: 0,
        win: 0,
        half: 0,
        lose: 0,
        profit: 0
      };
    }

    let allStats = user.data.mineAll || { win: 0 };

    /* ===== INFO ===== */
    if (sub === "info") {
      const winRate = todayStats.play
        ? ((todayStats.win / todayStats.play) * 100).toFixed(1)
        : "0.0";

      const allUsers = await usersData.getAll();
      const ranking = Object.values(allUsers)
        .sort((a, b) =>
          (b.data?.mineAll?.win || 0) -
          (a.data?.mineAll?.win || 0)
        );

      const rankIndex = ranking.findIndex(u => u.userID === senderID);
      const globalRank =
        rankIndex === -1 ? "N/A" : `${rankIndex + 1}/${ranking.length}`;

      return message.reply(
`${line}
๐Ÿ’ฃ MINE INFO
${line}
โ€ข Premium : ${isPremium ? "YES" : "NO"}
โ€ข Limit   : ${todayStats.play}/${dailyLimit}
${line}
โ€ข Win     : ${todayStats.win}
โ€ข Half    : ${todayStats.half}
โ€ข Lose    : ${todayStats.lose}
โ€ข Rate    : ${winRate}%
${line}
โ€ข Global Rank : ${globalRank}
${line}`
      );
    }

    /* ===== TOP ===== */
    if (sub === "top") {
      const all = await usersData.getAll();
      const top = Object.values(all)
        .map(u => ({
          name: u.name || "Unknown",
          win: u.data?.mineAll?.win || 0
        }))
        .sort((a, b) => b.win - a.win)
        .slice(0, 10);

      return message.reply(
`${line}
๐Ÿ† MINE TOP 10
${line}
${top.map((u, i) =>
`${getBadge(i)} #${i + 1} ${u.name}
Wins: ${u.win}`
).join("\n\n")}
${line}`
      );
    }

    /* ===== BET ===== */
    const bet = pbet(args[0]);
    if (!bet || isNaN(bet))
      return message.reply("โŒ Invalid bet amount!");

    if (bet > mbet)
      return message.reply(`๐Ÿšซ Max bet: ${fm(mbet)}`);

    if (todayStats.play >= dailyLimit)
      return message.reply(`โ›” Daily limit reached (${dailyLimit})`);

    if (user.money < bet)
      return message.reply("๐Ÿ’ธ Not enough balance!");

    user.money -= bet;
    await usersData.set(senderID, user);

    /* ===== GAME LOGIC ===== */
    const r = Math.random() * 100;
    let mc = r < 7 ? 5 : r < 42 ? 3 : r < 72 ? 2 : 0;

    const tiles = [1,2,3,4,5];
    const shuffled = [...tiles].sort(() => Math.random() - 0.5);
    const moneyTiles = shuffled.slice(0, mc);
    const results = tiles.map(t =>
      moneyTiles.includes(t) ? "๐Ÿ’ฐ" : "๐Ÿ’ฅ"
    );

    const display = ["1๏ธโƒฃ","2๏ธโƒฃ","3๏ธโƒฃ","4๏ธโƒฃ","5๏ธโƒฃ"];

    const sent = await message.reply(
`${line}
๐Ÿ’ฃ MINE GAME
${line}
Bet: ${fm(bet)}

${display.join(" ")}
${line}`
    );

    for (let i = 0; i < display.length; i++) {
      setTimeout(async () => {
        display[i] = results[i];

        if (i === display.length - 1) {

          todayStats.play++;
          let payout = 0;
          let title = "๐Ÿ’€ YOU LOSE";
          let amount = `โ€ข Lost    : ${fm(bet)}`;

          if (mc === 5) {
            payout = bet * 20;
            title = "๐Ÿ”ฅ JACKPOT";
            amount = `โ€ข Won     : ${fm(payout)}`;
            todayStats.win++; allStats.win++;
          }
          else if (mc === 3) {
            payout = bet * 3;
            title = "๐ŸŽ‰ YOU WIN";
            amount = `โ€ข Won     : ${fm(payout)}`;
            todayStats.win++; allStats.win++;
          }
          else if (mc === 2) {
            payout = Math.floor(bet * 0.5);
            title = "โš ๏ธ HALF LOSS";
            amount = `โ€ข Return  : ${fm(payout)}`;
            todayStats.half++;
          }
          else {
            todayStats.lose++;
          }

          if (payout > 0) user.money += payout;

          user.data.mineToday = todayStats;
          user.data.mineAll = allStats;

          await usersData.set(senderID, user);

          await api.editMessage(
`${line}
${title}
${line}
${amount}
โ€ข Balance : ${fm(user.money)}
โ€ข Limit   : ${todayStats.play}/${dailyLimit}
${line}`,
            sent.messageID,
            threadID
          );

          return;
        }

        await api.editMessage(display.join(" "), sent.messageID, threadID);

      }, (i + 1) * 700);
    }
  }
};

View raw file