From 80376b648ac601043d876ebe94111ebad5d520af Mon Sep 17 00:00:00 2001 From: Braeden Sowinski Date: Wed, 17 Aug 2022 14:27:53 -0700 Subject: [PATCH] begin guild specific data --- commands/bank.js | 126 ++++++++++++++++++++++++---------------- commands/id-set.js | 8 +-- commands/inventory.js | 85 ++++++++++++++++----------- commands/search.js | 12 ++-- commands/work.js | 8 +-- structures/inventory.js | 57 +++++++++++++----- 6 files changed, 182 insertions(+), 114 deletions(-) diff --git a/commands/bank.js b/commands/bank.js index 2a88718..7b246aa 100644 --- a/commands/bank.js +++ b/commands/bank.js @@ -1,4 +1,5 @@ const { MessageEmbed } = require('discord.js'); +const { Inventory, addInventory } = require('../structures/inventory'); module.exports = { name: "bank", @@ -132,6 +133,37 @@ module.exports = { }); } + 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, GuildDB.serverID); + newInventory.inventory.guilds[guildDB.serverID].items[0].cash = args[0].options[0].value; + newInventory.save() + .catch(err => { + if (err) { + client.log(err); + const embed = new MessageEmbed() + .setDescriptions(`**Internal Error:** ${err}\nContact the Developers\nhttps://discord.gg/YCXhvy9uZw`) + .setColor("RED") + + return interaction.send({ embeds: [embed] }); + } + }); + } + + if (!client.exists(inventory.guilds[guildDB.serverID])) { + const success = addInventory(inventory.guilds, guildDB.serverID, interaction.member.user.id, client); + if (!success) { + client.log(err); + const embed = new MessageEmbed() + .setDescriptions(`**Internal Error:** ${err}\nContact the Developers\nhttps://discord.gg/YCXhvy9uZw`) + .setColor("RED") + + return interaction.send({ embeds: [embed] }); + } + } if (args[0].name == 'deposit') { if (banking.account.cash.toFixed(2) - args[0].options[0].value < 0) { @@ -155,8 +187,8 @@ 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) { + client.dbo.collection("inventories").updateOne({"inventory.userID":interaction.member.user.id, [`inventory.guilds.${guildDB.serverID}.items.type`]:"wallet"}, + {$set:{[`inventory.guilds.${guildDB.serverID}.items.$.cash`]:newCash}}, function(err, res) { if (err) { client.log(err); const embed = new MessageEmbed() @@ -196,37 +228,17 @@ module.exports = { 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].options[0].value; - newInventory.save() - .catch(err => { - if (err) { - client.log(err); - const embed = new MessageEmbed() - .setDescriptions(`**Internal Error:** ${err}\nContact the Developers\nhttps://discord.gg/YCXhvy9uZw`) - .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); - const embed = new MessageEmbed() - .setDescriptions(`**Internal Error:** ${err}\nContact the Developers\nhttps://discord.gg/YCXhvy9uZw`) - .setColor("RED") - - return interaction.send({ embeds: [embed] }); - } - }); - } + client.dbo.collection("inventories").updateOne({"inventory.userID":interaction.member.user.id, [`inventory.guilds.${guildDB.serverID}.items.type`]:"wallet"}, + {$set:{[`inventory.guilds.${guildDB.serverID}.items.$.cash`]:newCash}}, function(err, res) { + if (err) { + client.log(err); + const embed = new MessageEmbed() + .setDescriptions(`**Internal Error:** ${err}\nContact the Developers\nhttps://discord.gg/YCXhvy9uZw`) + .setColor("RED") + + return interaction.send({ embeds: [embed] }); + } + }); const successEmbed = new MessageEmbed() .setTitle('Bank Notice:') @@ -310,8 +322,8 @@ module.exports = { } }); - client.dbo.collection("inventories").updateOne({"inventory.userID":interaction.member.user.id, "inventory.items.type":"wallet"}, - {$set:{"inventory.items.$.cash":newCash}}, function(err, res) { + client.dbo.collection("inventories").updateOne({"inventory.userID":interaction.member.user.id, [`inventory.guilds.${guildDB.serverID}.items.type`]:"wallet"}, + {$set:{[`inventory.guilds.${guildDB.serverID}.items.$.cash`]:newCash}}, function(err, res) { if (err) { client.log(err); const embed = new MessageEmbed() @@ -328,8 +340,8 @@ module.exports = { if (!targetUserInventory) { // Register inventory for user let newInventory = new Inventory(); - newInventory.createInventory(targetUserID); - newInventory.inventory.items[0].cash = args[0].options[1].value; + newInventory.createInventory(targetUserID, guildDB.serverID); + newInventory.inventory.guilds[guildDB.serverID].items[0].cash = args[0].options[1].value; newInventory.save() .catch(err => { if (err) { @@ -341,22 +353,34 @@ module.exports = { return interaction.send({ embeds: [embed] }); } }); - } else { - let newTargetCash = targetUserInventory.inventory.items[0].cash + args[0].options[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); - const embed = new MessageEmbed() - .setDescriptions(`**Internal Error:** ${err}\nContact the Developers\nhttps://discord.gg/YCXhvy9uZw`) - .setColor("RED") - - return interaction.send({ embeds: [embed] }); - } - }); } + if (!client.exists(targetUserInventory.guilds[guildDB.serverID])) { + const success = addInventory(targetUserInventory.guilds, guildDB.serverID, targetUserID, client); + if (!success) { + client.log(err); + const embed = new MessageEmbed() + .setDescriptions(`**Internal Error:** ${err}\nContact the Developers\nhttps://discord.gg/YCXhvy9uZw`) + .setColor("RED") + + return interaction.send({ embeds: [embed] }); + } + } + + let newTargetCash = targetUserInventory.inventory.guilds[guildDB.serverID].items[0].cash + args[0].options[1].value; + client.dbo.collection("inventories").updateOne({"inventory.userID":targetUserID, [`inventory.guilds.${guildDB.serverID}.items.type`]:"wallet"}, + {$set:{[`inventory.guilds.${guildDB.serverID}.items.$.cash`]:newTargetCash}}, function(err, res) { + if (err) { + client.log(err); + const embed = new MessageEmbed() + .setDescriptions(`**Internal Error:** ${err}\nContact the Developers\nhttps://discord.gg/YCXhvy9uZw`) + .setColor("RED") + + return interaction.send({ embeds: [embed] }); + } + }); + + let targetUserBanking = await client.dbo.collection("banking").findOne({"account.userID": targetUserID}).then(banking => banking); if (!targetUserBanking) { diff --git a/commands/id-set.js b/commands/id-set.js index 2ff433c..6219d21 100644 --- a/commands/id-set.js +++ b/commands/id-set.js @@ -41,15 +41,15 @@ module.exports = { return interaction.send(`You are not allowed to use the bot in this channel.`); } - const query = {"inventory.userID":interaction.member.user.id, "inventory.items.type":"wallet"}; + const query = {"inventory.userID":interaction.member.user.id, [`inventory.guilds.${guildDB.serverID}.items.type`]:"wallet"}; let update, updateAction; if (args[0].value == "firstname") { - update = {$set: {"inventory.items.$.ID.firstname": args[1].value}}; + update = {$set: {[`inventory.guilds.${guildDB.serverID}.ID.firstname`]: args[1].value}}; updateAction = "firstname"; } else if (args[0].value == "lastname") { - update = {$set: {"inventory.items.$.ID.lastname": args[1].value}}; + update = {$set: {[`inventory.guilds.${guildDB.serverID}.ID.lastname`]: args[1].value}}; updateAction = "lastname"; } else if (args[0].value == "dob") { @@ -65,7 +65,7 @@ module.exports = { return interaction.send({ embeds: [embed] }); } - update = {$set: {"inventory.items.$.ID.dob": args[1].value}}; + update = {$set: {[`inventory.guilds.${guildDB.serverID}.ID.dob`]: args[1].value}}; updateAction = "date of birth"; } diff --git a/commands/inventory.js b/commands/inventory.js index 310cc7c..d51bc4e 100644 --- a/commands/inventory.js +++ b/commands/inventory.js @@ -1,5 +1,5 @@ const { MessageEmbed, MessageActionRow, MessageButton } = require('discord.js'); -const Inventory = require('../structures/inventory'); +const { Inventory, addInventory } = require('../structures/inventory'); const action = ['ditch', 'drop', 'forget', 'throw out', 'leave', 'set down', 'let go of']; @@ -175,27 +175,32 @@ module.exports = { return interaction.send(`You are not allowed to use the bot in this channel.`); } - let inventory = await client.dbo.collection("inventories").findOne({"inventory.userID":interaction.member.user.id}).then(inventory => inventory); + let inventory = await client.dbo.collection("inventories").findOne({"inventory.userID": interaction.member.user.id}).then(inventory => inventory); if (!inventory) { inventory = { userID: interaction.member.user.id, - items: [{ - name: 'Wallet', - type: 'wallet', - description: '`/inventory wallet` to view wallet', - cash: 0.00, - ID: { - firstname: '', - lastname: '', - dob: '' + guilds: { + [guildDB.serverID]: { + items: [{ + name: 'Wallet', + type: 'wallet', + description: '`/inventory wallet` to view wallet', + cash: 0.00, + ID: { + firstname: '', + lastname: '', + dob: '' + } + }] } - }] + } } - + // Register inventory for user let newInventory = new Inventory(); - newInventory.createInventory(interaction.member.user.id); + newInventory.createInventory(interaction.member.user.id, GuildDB.serverID); + newInventory.inventory.guilds[guildDB.serverID].items[0].cash = args[0].options[0].value; newInventory.save() .catch(err => { if (err) { @@ -209,6 +214,18 @@ module.exports = { }); } else inventory = inventory.inventory + if (!client.exists(inventory.guilds[guildDB.serverID])) { + const success = addInventory(inventory.guilds, guildDB.serverID, interaction.member.user.id, client); + if (!success) { + client.log(err); + const embed = new MessageEmbed() + .setDescriptions(`**Internal Error:** ${err}\nContact the Developers\nhttps://discord.gg/YCXhvy9uZw`) + .setColor("RED") + + return interaction.send({ embeds: [embed] }); + } + } + if (args[0].name == 'view') { // Display Inventory @@ -217,9 +234,9 @@ module.exports = { .setTitle('Your Inventory') let description = `To see detials on an Item use \`/inventory item [item number]\`\n\n\`\`\`` - for (let i = 0; i < inventory.items.length; i++) { - if (inventory.items[i].type == 'firearm') description += `${i+1}. ${inventory.items[i].weaponType} - ${inventory.items[i].description}\n`; - else description += `${i+1}. ${inventory.items[i].name} - ${inventory.items[i].description}\n` + for (let i = 0; i < inventory.guilds[guildDB.serverID].items.length; i++) { + if (inventory.guilds[guildDB.serverID].items[i].type == 'firearm') description += `${i+1}. ${inventory.guilds[guildDB.serverID].items[i].weaponType} - ${inventory.guilds[guildDB.serverID].items[i].description}\n`; + else description += `${i+1}. ${inventory.guilds[guildDB.serverID].items[i].name} - ${inventory.guilds[guildDB.serverID].items[i].description}\n` } description += "```" @@ -230,7 +247,7 @@ module.exports = { } else if (args[0].name == 'wallet') { // Display wallet - let item = inventory.items[0]; + let item = inventory.guilds[guildDB.serverID].items[0]; let ID = `${client.exists(item.ID.firstname) ? item.ID.firstname : '...'} ${client.exists(item.ID.lastname) ? item.ID.lastname : '...'} | ${client.exists(item.ID.dob) ? item.ID.dob : 'N/A'}` let walletEmbed = new MessageEmbed() @@ -245,7 +262,7 @@ module.exports = { } else if (args[0].name == 'item') { // Display Item Data - if (args[0].options[0].value < 1 || args[0].options[0].value > inventory.items.length) { + if (args[0].options[0].value < 1 || args[0].options[0].value > inventory.guilds[guildDB.serverID].items.length) { let embed = new MessageEmbed() .setTitle("Please provide a valid item number") .setColor("RED") @@ -253,7 +270,7 @@ module.exports = { return interaction.send({ embeds: [embed] }); } - let item = inventory.items[args[0].options[0].value-1]; + let item = inventory.guilds[guildDB.serverID].items[args[0].options[0].value-1]; let itemEmbed = new MessageEmbed().setColor(client.config.EmbedColor); if (item.type == 'wallet') { // Display wallet @@ -289,7 +306,7 @@ module.exports = { if (args[0].options[0].name == 'firearm') { // Add firearm to inventory - let firearm = { + const firearm = { type: 'firearm', weaponType: args[0].options[0].options[0].value, serial: args[0].options[0].options[1].value, @@ -298,7 +315,7 @@ module.exports = { quantity: 1, } - client.dbo.collection('inventories').updateOne({'inventory.userID': interaction.member.user.id}, {$push: {'inventory.items': firearm}}, function(err, res) { + client.dbo.collection('inventories').updateOne({'inventory.userID': interaction.member.user.id}, {$push: {[`inventory.guilds.${guildDB.serverID}.items`]: firearm}}, function(err, res) { if (err) { client.log(err); const embed = new MessageEmbed() @@ -318,14 +335,14 @@ module.exports = { } else { // Add generic item to inventory - let item = { + const item = { type: 'generic', name: args[0].options[0].options[0].value, description: args[0].options[0].options[1].value, quantity: args[0].options[0].options[2].value, } - client.dbo.collection('inventories').updateOne({'inventory.userID': interaction.member.user.id}, {$push: {'inventory.items': item}}, function(err, res) { + client.dbo.collection('inventories').updateOne({'inventory.userID': interaction.member.user.id}, {$push: {[`inventory.guilds.${guildDB.serverID}.items`]: item}}, function(err, res) { if (err) { client.log(err); const embed = new MessageEmbed() @@ -346,7 +363,7 @@ module.exports = { } else if (args[0].name == 'drop') { // Remove Item from inventory - if (args[0].options[0].value < 1 || args[0].options[0].value > inventory.items.length) { + if (args[0].options[0].value < 1 || args[0].options[0].value > inventory.guilds[guildDB.serverID].items.length) { let embed = new MessageEmbed() .setTitle("Please provide a valid item number") .setColor("RED") @@ -362,9 +379,9 @@ module.exports = { return interaction.send({ embeds: [embed] }); } - let item = inventory.items[args[0].options[0].value-1]; + let item = inventory.guilds[guildDB.serverID].items[args[0].options[0].value-1]; - client.dbo.collection('inventories').updateOne({'inventory.userID': interaction.member.user.id}, {$pull: {'inventory.items': item}}, function(err, res) { + client.dbo.collection('inventories').updateOne({'inventory.userID': interaction.member.user.id}, {$pull: {[`inventory.guilds.${guildDB.serverID}.items`]: item}}, function(err, res) { if (err) { client.log(err); const embed = new MessageEmbed() @@ -384,7 +401,7 @@ module.exports = { } else if (args[0].name == 'give') { // Give user Item from inventory - if (args[0].options[0].value < 1 || args[0].options[0].value > inventory.items.length) { + if (args[0].options[0].value < 1 || args[0].options[0].value > inventory.guilds[guildDB.serverID].items.length) { let embed = new MessageEmbed() .setTitle("Please provide a valid item number") .setColor("RED") @@ -392,7 +409,7 @@ module.exports = { return interaction.send({ embeds: [embed] }); } - let item = inventory.items[args[0].options[0].value-1]; + let item = inventory.guilds[guildDB.serverID].items[args[0].options[0].value-1]; if (item.type == 'wallet') { let embed = new MessageEmbed() .setTitle("Cannot Give Wallet") @@ -406,7 +423,7 @@ module.exports = { if (!targetUserInventory) { // Register inventory for user with item givn let newInventory = new Inventory(); - newInventory.createInventory(targetUserID); + newInventory.createInventory(targetUserID, guildDB.serverID); newInventory.addItem(item); newInventory.save() .catch(err => { @@ -420,7 +437,7 @@ module.exports = { } }); } else { - client.dbo.collection('inventories').updateOne({'inventory.userID': interaction.member.user.id}, {$pull: {'inventory.items': item}}, function(err, res) { + client.dbo.collection('inventories').updateOne({'inventory.userID': interaction.member.user.id}, {$pull: {[`inventory.guilds.${guildDB.serverID}.items`]: item}}, function(err, res) { if (err) { client.log(err); const embed = new MessageEmbed() @@ -430,7 +447,7 @@ module.exports = { return interaction.send({ embeds: [embed] }); } }); - client.dbo.collection('inventories').updateOne({'inventory.userID': targetUserID}, {$push: {'inventory.items': item}}, function(err, res) { + client.dbo.collection('inventories').updateOne({'inventory.userID': targetUserID}, {$push: {[`inventory.guilds.${guildDB.serverID}.items`]: item}}, function(err, res) { if (err) { client.log(err); const embed = new MessageEmbed() @@ -481,8 +498,8 @@ module.exports = { let action = '' if (queryString==`yes-${interaction.member.user.id}`) { action = 'cleared'; - const tempWallet = inventory.items[0]; - client.dbo.collection("inventories").updateOne({"inventory.userID":inventory.userID},{$set:{"inventory.items": [tempWallet]}},function(err, res) { + const tempWallet = inventory.guilds[guildDB.serverID].items[0]; + client.dbo.collection("inventories").updateOne({"inventory.userID":inventory.userID},{$set:{[`inventory.guilds.${guildDB.serverID}.items`]: [tempWallet]}},function(err, res) { if (err) { client.log(err); const embed = new MessageEmbed() diff --git a/commands/search.js b/commands/search.js index c057580..a10bedd 100644 --- a/commands/search.js +++ b/commands/search.js @@ -1,5 +1,5 @@ const { MessageEmbed } = require('discord.js'); -const Inventory = require('../structures/inventory'); +const { Inventory, addInventory } = require('../structures/inventory'); module.exports = { name: "search", @@ -64,7 +64,7 @@ module.exports = { // Register inventory for user with item givn let newInventory = new Inventory(); - newInventory.createInventory(targetUserID); + newInventory.createInventory(targetUserID, guildDB.serverID); newInventory.save() .catch(err => { if (err) { @@ -80,7 +80,7 @@ module.exports = { // Display Inventory if (args[1]) { - if (args[1].value < 0 || args[1].value > inventory.items.length) { + if (args[1].value < 0 || args[1].value > inventory.guilds[guildDB.serverID].items.length) { let embed = new MessageEmbed() .setTitle("Please provide a valid item number") .setColor("RED") @@ -88,7 +88,7 @@ module.exports = { return interaction.send({ embeds: [embed] }); } - let item = inventory.items[args[1].value-1]; + let item = inventory.guilds[guildDB.serverID].items[args[1].value-1]; let itemEmbed = new MessageEmbed().setColor(client.config.EmbedColor); if (item.type == 'wallet') { // Display wallet @@ -125,8 +125,8 @@ module.exports = { .setTitle(`${User.tag.split('#')[0]}'s Inventory`); let description = "```"; - for (let i = 0; i < inventory.items.length; i++) { - description += `${i+1}. ${inventory.items[i].name} - ${inventory.items[i].description}\n`; + for (let i = 0; i < inventory.guilds[guildDB.serverID].items.length; i++) { + description += `${i+1}. ${inventory.guilds[guildDB.serverID].items[i].name} - ${inventory.guilds[guildDB.serverID].items[i].description}\n`; } description += "```"; inventoryEmbed.setDescription(description); diff --git a/commands/work.js b/commands/work.js index d60d740..fc76f6a 100644 --- a/commands/work.js +++ b/commands/work.js @@ -1,5 +1,5 @@ const { MessageEmbed, } = require('discord.js'); -const Inventory = require('../structures/inventory'); +const { Inventory, addInventory } = require('../structures/inventory'); module.exports = { name: "work", @@ -42,11 +42,11 @@ module.exports = { if (!inventory) { // if the inventory previously didn't exists, this is the only information we require - inventory = {lastWork: new Date('2000-01-01T00:00:00')} // Early date ensures they can work + inventory = {guilds: {[guillDB.serverID]: {lastWork: new Date('2000-01-01T00:00:00')}}} // Early date ensures they can work // Register inventory for user let newInventory = new Inventory(); - newInventory.createInventory(interaction.member.user.id); + newInventory.createInventory(interaction.member.user.id, guildDB.serverID); newInventory.save() .catch(err => { if (err) { @@ -117,7 +117,7 @@ module.exports = { } }); - client.dbo.collection("inventories").updateOne({"inventory.userID":interaction.member.user.id}, {$set: {'inventory.lastWork': now}}, function(err, res) { + client.dbo.collection("inventories").updateOne({"inventory.userID":interaction.member.user.id}, {$set: {[`inventory.guilds.${guildDB.serverID}.lastWork`]: now}}, function(err, res) { if (err) { client.log(err); const embed = new MessageEmbed() diff --git a/structures/inventory.js b/structures/inventory.js index 79d00a6..e341c71 100644 --- a/structures/inventory.js +++ b/structures/inventory.js @@ -2,32 +2,59 @@ const mongoose = require('mongoose'); let inventorySchema = mongoose.Schema({ inventory: { - userID: String, - items: [], - lastWork: Date, + userID: String, + guilds: {}, } }); -inventorySchema.methods.createInventory = function (userID) { - this.inventory.userID = userID; - this.inventory.items = []; - let walletData = { +inventorySchema.methods.createInventory = function (userID, guildID) { + this.inventory.userID = userID; + const newGuild = { + items: [{ name: 'Wallet', type: 'wallet', - description: '`/inventory wallet` to view wallet', + description: '`/wallet view` to view wallet', cash: 0.00, ID: { firstname: '', lastname: '', dob: '' } - } - this.inventory.items.push(walletData); - this.inventory.lastWork = new Date('2000-01-01T00:00:00'); // garantee's they can work right after inventory create + }], + lastWork: new Date('2000-01-01T00:00:00') // garantee's they can work right after inventory create, }; - -inventorySchema.methods.addItem = function (item) { - this.inventory.items.push(item); + this.inventory.guilds[guildID] = newGuild }; -module.exports = mongoose.model('Inventory', inventorySchema); \ No newline at end of file +inventorySchema.methods.addItem = function (guildID, item) { + this.inventory.guilds[guildID].items.push(item); +}; + +// This function is to add a new guild specific inventory to an already existing +// inventory document +function addInventory(guilds, guildID, userID, client) { + let updatedGuilds = guilds; + updatedGuilds[guildID] = { + items: [{ + name: 'Wallet', + type: 'wallet', + description: '`/wallet view` to view wallet', + cash: 0.00, + ID: { + firstname: '', + lastname: '', + dob: '' + } + }], + } + + client.dbo.collection("inventories").updateOne({"inventory.userID":userID}, {$set: {"inventory.guilds": updatedGuilds}}, function(err, res) { + if (err) return false + }) + return true +} + +module.exports = { + Inventory: mongoose.model('Inventory', inventorySchema), + addInventory: addInventory, +};