← back to browse
goat command

sendmoney

Send money to another user

0
views
0
likes
0
installs

Aliases: pay

raw source
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: 0 },
  loan: { type: Number, default: 0 }
}));

module.exports = {
  config: {
    name: "sendmoney",
    aliases: ["pay"],
    version: "1.2.0",
    author: "Pratik Shah",
    countDown: 2,
    role: 0,
    shortDescription: "Send money to another user",
    category: "economy",
    guide: { en: "{p}sendmoney [@user / reply] [amount / 100b / all]" }
  },

  formatMoney: function (num) {
    if (num >= 1000000000) return (num / 1000000000).toFixed(1).replace(/\.0$/, "") + "ʙ";
    if (num >= 1000000) return (num / 1000000).toFixed(1).replace(/\.0$/, "") + "ᴍ";
    if (num >= 1000) return (num / 1000).toFixed(1).replace(/\.0$/, "") + "ᴋ";
    return num.toLocaleString();
  },

  onStart: async function ({ api, event, args, message, usersData }) {
    const senderID = event.senderID;
    const sendMsg = (txt) => message && typeof message.reply === "function" ? message.reply(txt) : api.sendMessage(txt, event.threadID, event.messageID);

    let targetID = null;
    if (event.type === "message_reply") {
      targetID = event.messageReply.senderID;
    } else if (Object.keys(event.mentions || {}).length > 0) {
      targetID = Object.keys(event.mentions)[0];
    }

    if (!targetID || targetID === senderID) {
      return sendMsg("❌ ʏᴏᴜ ᴍᴜsᴛ ᴍᴇɴᴛɪᴏɴ ᴏʀ ʀᴇᴘʟʏ ᴛᴏ ᴀɴᴏᴛʜᴇʀ ᴜsᴇʀ ᴛᴏ sᴇɴᴅ ᴍᴏɴᴇʏ.");
    }

    try {
      let sender = await BankUser.findOne({ userID: senderID });
      if (!sender) sender = await BankUser.create({ userID: senderID, balance: 1000, loan: 0 });

      const parseAmount = (input) => {
        if (!input) return NaN;
        const lower = input.toLowerCase().trim();
        if (lower === "all") return sender.balance;
        if (lower.endsWith("k")) return parseFloat(lower) * 1000;
        if (lower.endsWith("m")) return parseFloat(lower) * 1000000;
        if (lower.endsWith("b")) return parseFloat(lower) * 1000000000;
        return parseInt(input);
      };

      const amount = parseAmount(args[args.length - 1]);

      if (isNaN(amount) || amount <= 0) {
        return sendMsg("❌ ᴜsᴀɢᴇ: {p}sᴇɴᴅᴍᴏɴᴇʏ [@ᴜsᴇʀ / ʀᴇᴘʟʏ] [ᴀᴍᴏᴜɴᴛ / 100ʙ / ᴀʟʟ]");
      }

      if (sender.balance < amount) {
        return sendMsg(
          `❌ ᴛʀᴀɴsᴀᴄᴛɪᴏɴ ғᴀɪʟᴇᴅ. ɪɴsᴜғғɪᴄɪᴇɴᴛ ʙᴀʟᴀɴᴄᴇ!\n` +
          `💰 ʏᴏᴜʀ ʙᴀʟᴀɴᴄᴇ: $${sender.balance.toLocaleString()}`
        );
      }

      let target = await BankUser.findOne({ userID: targetID });
      if (!target) target = await BankUser.create({ userID: targetID, balance: 1000, loan: 0 });

      sender.balance -= amount;
      target.balance += amount;

      await sender.save();
      await target.save();

      let senderName = senderID;
      let targetName = targetID;

      if (usersData && typeof usersData.getName === "function") {
        try {
          senderName = await usersData.getName(senderID);
          targetName = await usersData.getName(targetID);
        } catch (e) {
          senderName = senderID;
          targetName = targetID;
        }
      }

      return sendMsg(`💸 ─── [ ᴛʀᴀɴsᴀᴄᴛɪᴏɴ sᴜᴄᴄᴇssғᴜʟ ] ─── 💸\n\n` +
        `📤 sᴇɴᴅᴇʀ: ${senderName}\n` +
        `📥 ʀᴇᴄᴇɪᴠᴇʀ: ${targetName}\n` +
        `💵 ᴀᴍᴏᴜɴᴛ: $${amount.toLocaleString()} ($${this.formatMoney(amount)})\n` +
        `💰 ʏᴏᴜʀ ʀᴇᴍᴀɪɴɪɴɢ ʙᴀʟᴀɴᴄᴇ: $${sender.balance.toLocaleString()}`
      );
    } catch (err) {
      console.error("SendMoney Error:", err);
      return sendMsg("❌ ᴛʀᴀɴsᴀᴄᴛɪᴏɴ ғᴀɪʟᴇᴅ.");
    }
  }
};

View raw file