From 4cc0333ce27d6e19af499f09f5c98f4da3d07cdb Mon Sep 17 00:00:00 2001 From: Braeden Sowinski Date: Mon, 11 Jul 2022 20:31:53 -0700 Subject: [PATCH] give money/fix bugs --- commands/give.js | 177 +++++++++++++++++++++++++++++++++++++++++++ commands/withdraw.js | 42 +++++++--- 2 files changed, 209 insertions(+), 10 deletions(-) create mode 100644 commands/give.js diff --git a/commands/give.js b/commands/give.js new file mode 100644 index 0000000..a1430b7 --- /dev/null +++ b/commands/give.js @@ -0,0 +1,177 @@ +const { MessageEmbed } = require('discord.js'); +const Inventory = require('../structures/inventory'); + +module.exports = { + name: "give", + description: "give user an amount of cash", + usage: "[amount]", + permissions: { + channel: ["VIEW_CHANNEL", "SEND_MESSAGES", "EMBED_LINKS"], + member: [], + }, + SlashCommand: { + options: [ + { + name: "user", + description: "user to give item", + value: "user", + type: 6, + required: true, + }, + { + name: "amount", + description: "the amount to send", + value: 1, + type: 10, + required: true, + }, + ], + /** + * + * @param {require("../structures/QuarksBot")} client + * @param {import("discord.js").MessageCreate} message + * @param {string[]} args + * @param {*} param3 + */ + run: async (client, interaction, args, { GuildDB }) => { + if (GuildDB.customChannelStatus==true&&!GuildDB.allowedChannels.includes(interaction.channel_id)) { + return interaction.send(`You are not allowed to use the bot in this channel.`); + } + + // send money from wallet + + let banking = await client.dbo.collection("banking").findOne({"account.userID": interaction.member.user.id}).then(banking => banking); + + if (!banking) { + banking = { + account: { + userID: interaction.member.user.id, + balance: GuildDB.startingBalance, + cash: 0.00, + } + } + + client.dbo.collection("banking").insertOne(banking, function(err, res) { + if (err) { + client.log(err); + let embed = new MessageEmbed() + .setTitle(err) + .setColor("RED") + + return interaction.send({ embeds: [embed] }); + } + }); + } + if (banking.account.cash.toFixed(2) - args[1].value < 0) { + let embed = new MessageEmbed() + .setTitle('Insufficient funds') + .setColor("RED"); + + return interaction.send({ embeds: [embed] }); + } + + newCash = banking.account.cash - args[1].value; + + client.dbo.collection("banking").updateOne({"account.userID":interaction.member.user.id},{$set:{"account.cash":newCash}}, function(err, res) { + if (err) { + client.log(err); + let embed = new MessageEmbed() + .setTitle(err) + .setColor("RED") + + return interaction.send({ embeds: [embed] }); + } + }); + + client.dbo.collection("inventories").updateOne({"inventory.userID":interaction.member.user.id, "inventory.items.type":"wallet"}, + {$set:{"inventory.items.$.cash":newCash}}, function(err, res) { + if (err) { + client.log(err); + let embed = new MessageEmbed() + .setTitle(err) + .setColor("RED") + + return interaction.send({ embeds: [embed] }); + } + }); + + let targetUserID = args[0].value.replace('<@!', '').replace('>', ''); + let targetUserInventory = await client.dbo.collection("inventories").findOne({"inventory.userID":targetUserID}).then(inventory => inventory); + + if (!targetUserInventory) { + // Register inventory for user + let newInventory = new Inventory(); + newInventory.createInventory(targetUserID); + newInventory.inventory.items[0].cash = args[1].value; + newInventory.save() + .catch(err => { + if (err) { + client.log(err); + let embed = new MessageEmbed() + .setTitle(err) + .setColor("RED") + + return interaction.send({ embeds: [embed] }); + } + }); + } else { + let newTargetCash = targetUserInventory.inventory.items[0].cash + args[1].value; + + client.dbo.collection("inventories").updateOne({"inventory.userID":targetUserID, "inventory.items.type":"wallet"}, + {$set:{"inventory.items.$.cash":newTargetCash}}, function(err, res) { + if (err) { + client.log(err); + let embed = new MessageEmbed() + .setTitle(err) + .setColor("RED") + + return interaction.send({ embeds: [embed] }); + } + }); + } + + let targetUserBanking = await client.dbo.collection("banking").findOne({"account.userID": targetUserID}).then(banking => banking); + + if (!targetUserBanking) { + targetUserBanking = { + account: { + userID: targetUserID, + balance: GuildDB.startingBalance, + cash: args[1].value, + } + } + + client.dbo.collection("banking").insertOne(targetUserBanking, function(err, res) { + if (err) { + client.log(err); + let embed = new MessageEmbed() + .setTitle(err) + .setColor("RED") + + return interaction.send({ embeds: [embed] }); + } + }); + } else { + let newTargetCash = targetUserBanking.account.cash + args[1].value; + + client.dbo.collection("banking").updateOne({"account.userID": targetUserID}, {$set: {"account.cash": newTargetCash}}, function(err, res) { + if (err) { + client.log(err); + let embed = new MessageEmbed() + .setTitle(err) + .setColor("RED") + + return interaction.send({ embeds: [embed] }); + } + }); + } + + let successEmbed = new MessageEmbed() + .setTitle('Success') + .setDescription(`Successfully gave <@${targetUserID}> $${args[1].value.toFixed(2)}`) + .setColor('GREEN'); + + return interaction.send({ embeds: [successEmbed] }); + }, + }, +} \ No newline at end of file diff --git a/commands/withdraw.js b/commands/withdraw.js index f70001b..9c04987 100644 --- a/commands/withdraw.js +++ b/commands/withdraw.js @@ -1,4 +1,5 @@ const { MessageEmbed } = require('discord.js'); +const inventory = require('./inventory'); module.exports = { name: "withdraw", @@ -75,17 +76,38 @@ module.exports = { return interaction.send({ embeds: [embed] }); } }); - client.dbo.collection("inventories").updateOne({"inventory.userID":interaction.member.user.id, "inventory.items.type":"wallet"}, - {$set:{"inventory.items.$.cash":newCash}}, function(err, res) { - if (err) { - client.log(err); - let embed = new MessageEmbed() - .setTitle(err) - .setColor("RED") - return interaction.send({ embeds: [embed] }); - } - }); + let inventory = await client.dbo.collection("inventories").findOne({"inventory.userID": interaction.member.user.id}).then(inventory => inventory); + + if (!inventory) { + // Register inventory for user + let newInventory = new Inventory(); + newInventory.createInventory(interaction.member.user.id); + newInventory.inventory.items[0].cash = args[0].value; + newInventory.save() + .catch(err => { + if (err) { + client.log(err); + let embed = new MessageEmbed() + .setTitle(err) + .setColor("RED") + + return interaction.send({ embeds: [embed] }); + } + }); + } else { + client.dbo.collection("inventories").updateOne({"inventory.userID":interaction.member.user.id, "inventory.items.type":"wallet"}, + {$set:{"inventory.items.$.cash":newCash}}, function(err, res) { + if (err) { + client.log(err); + let embed = new MessageEmbed() + .setTitle(err) + .setColor("RED") + + return interaction.send({ embeds: [embed] }); + } + }); + } let successEmbed = new MessageEmbed() .setTitle('Success')