const { EmbedBuilder } = require('discord.js'); module.exports = { name: "wallet", debug: false, global: false, description: "manage your wallet", usage: "[cmd] [opt]", permissions: { channel: ["VIEW_CHANNEL", "SEND_MESSAGES", "EMBED_LINKS"], member: [], }, options: [ { name: "view", description: "view your wallet", value: "view", type: 1, }, { name: "id-set", description: "set values on your id", value: "id-set", type: 1, options: [ { name: "alter", description: "value to alter", value: "alter", type: 3, required: true, choices: [ { name: "firstname", value: "firstname" }, { name: "lastname", value: "lastname" }, { name: "dob", value: "dob" }, { name: "address", value: "address" }, ] }, { name: "value", description: "New value of what you'd like to change", value: "value", type: 3, required: true, }, ] } ], SlashCommand: { /** * * @param {require("../structures/QuarksBot")} client * @param {import("discord.js").Message} 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({ content: `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); if (!inventory) { inventory = { userID: interaction.member.user.id, 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, GuildDB.serverID); newInventory.save() .catch(err => { if (err) { client.error(err); const embed = new EmbedBuilder() .setDescription(`**Internal Error:**\nUh Oh D: Its not you, its me.\nThis command has crashed\nContact the Developers\nhttps://discord.gg/YCXhvy9uZw`) .setColor(client.config.Colors.Red) return interaction.send({ embeds: [embed] }); } }); } 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.error(err); const embed = new EmbedBuilder() .setDescription(`**Internal Error:**\nUh Oh D: Its not you, its me.\nThis command has crashed\nContact the Developers\nhttps://discord.gg/YCXhvy9uZw`) .setColor(client.config.Colors.Red) return interaction.send({ embeds: [embed] }); } } if (args[0].name == "view") { // Display wallet 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'} | ${client.exists(item.ID.addr) ? item.ID.addr : 'N/A'}` let walletEmbed = new EmbedBuilder() .setTitle(`Your Wallet`) .setColor(client.config.Colors.Default) .addFields( { name: '**Cash**', value: `$${item.cash.toFixed(2)}`, inline: true }, { name: '**ID**', value: ID, inline: true }); return interaction.send({ embeds: [walletEmbed] }); } else if (args[0].name == "id-set") { const query = {"inventory.userID":interaction.member.user.id, [`inventory.guilds.${GuildDB.serverID}.items.type`]:"wallet"}; let update, updateAction; if (args[0].options[0].value == "firstname") { update = {$set: {[`inventory.guilds.${GuildDB.serverID}.ID.firstname`]: args[0].options[1].value}}; updateAction = "firstname"; } else if (args[0].options[0].value == "lastname") { update = {$set: {[`inventory.guilds.${GuildDB.serverID}.ID.lastname`]: args[0].options[1].value}}; updateAction = "lastname"; } else if (args[0].options[0].value == "dob") { const isDate = (date) => { return (new Date(date) !== "Invalid Date") && !isNaN(new Date(date)); } if (!isDate(args[0].options[1].value)) { let embed = new EmbedBuilder() .setTitle("Invalid Date of Birth") .setColor(client.config.Colors.Red); return interaction.send({ embeds: [embed] }); } update = {$set: {[`inventory.guilds.${GuildDB.serverID}.ID.dob`]: args[0].options[1].value}}; updateAction = "date of birth"; } else if (args[0].options[0].value == "address") { update = {$set: {[`inventory.guilds.${GuildDB.serverID}.ID.addr`]: args[0].options[1].value}}; updateAction = "address"; } client.dbo.collection("inventories").updateOne(query, update, function (err, res) { if (err) { client.error(err); const embed = new EmbedBuilder() .setDescription(`**Internal Error:**\nUh Oh D: Its not you, its me.\nThis command has crashed\nContact the Developers\nhttps://discord.gg/YCXhvy9uZw`) .setColor(client.config.Colors.Red) return interaction.send({ embeds: [embed] }); } }); let successEmbed = new EmbedBuilder() .setTitle('Success') .setDescription(`Successfully set ${updateAction}\nUse \`/inventory wallet\` to view your updated ID`) .setColor('GREEN'); return interaction.send({ embeds: [successEmbed] }); } }, }, }