From 7da0d9a97f4e434ce3065615f6b4672b0c81777a Mon Sep 17 00:00:00 2001 From: Vermium Sifell Date: Wed, 19 Oct 2022 17:13:08 +0200 Subject: [PATCH] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20Migrated=20more=20credits?= =?UTF-8?q?=20module=20to=20Prisma?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../modules/credits/modules/give/index.ts | 87 +++++---- .../modules/credits/modules/set/index.ts | 98 +++++----- .../modules/credits/modules/take/index.ts | 105 +++++----- .../modules/credits/modules/transfer/index.ts | 184 +----------------- 4 files changed, 156 insertions(+), 318 deletions(-) diff --git a/src/plugins/commands/manage/modules/credits/modules/give/index.ts b/src/plugins/commands/manage/modules/credits/modules/give/index.ts index cab7050..4ed822c 100644 --- a/src/plugins/commands/manage/modules/credits/modules/give/index.ts +++ b/src/plugins/commands/manage/modules/credits/modules/give/index.ts @@ -5,14 +5,14 @@ import { EmbedBuilder, PermissionsBitField, } from "discord.js"; +import logger from "../../../../../../../middlewares/logger"; // Configurations import getEmbedConfig from "../../../../../../../helpers/getEmbedData"; // Helpers../../../../../../../helpers/userData import pluralize from "../../../../../../../helpers/pluralize"; // Models -import fetchUser from "../../../../../../../helpers/userData"; // Handlers - +import prisma from "../../../../../../../prisma"; // Function export default { metadata: { @@ -48,50 +48,67 @@ export default { const creditAmount = options?.getInteger("amount"); // If amount option is null - if (creditAmount === null) { + if (creditAmount === null) throw new Error("You need to provide a credit amount."); - } // If amount is zero or below - if (creditAmount <= 0) { + if (creditAmount <= 0) throw new Error("You must provide a credit amount greater than zero"); - } - if (discordReceiver === null) { + if (discordReceiver === null) throw new Error("We could not get the receiving user from Discord"); - } - if (guild === null) { + + if (guild === null) throw new Error("We could not get the current guild from discord."); - } - const toUser = await fetchUser(discordReceiver, guild); + const createGuildMember = await prisma.guildMember.upsert({ + where: { + userId_guildId: { + userId: discordReceiver.id, + guildId: guild.id, + }, + }, + update: { creditsEarned: { increment: creditAmount } }, + create: { + creditsEarned: creditAmount, + user: { + connectOrCreate: { + create: { + id: discordReceiver.id, + }, + where: { + id: discordReceiver.id, + }, + }, + }, + guild: { + connectOrCreate: { + create: { + id: guild.id, + }, + where: { + id: guild.id, + }, + }, + }, + }, + }); - if (toUser === null) { - throw new Error("The receiving user is not found."); - } - - if (toUser?.credits === null) { - throw new Error("The receiving user's credits value could not found."); - } - - // Deposit amount to toUser - toUser.credits += creditAmount; + logger.silly(createGuildMember); // Save toUser - await toUser?.save()?.then(async () => { - await interaction?.editReply({ - embeds: [ - new EmbedBuilder() - .setTitle("[:toolbox:] Manage - Credits (Give)") - .setDescription( - `Successfully gave ${pluralize(creditAmount, "credit")}` - ) - .setTimestamp(new Date()) - .setColor(successColor) - .setFooter({ text: footerText, iconURL: footerIcon }), - ], - }); - return; + await interaction?.editReply({ + embeds: [ + new EmbedBuilder() + .setTitle("[:toolbox:] Manage - Credits (Give)") + .setDescription( + `Successfully gave ${pluralize(creditAmount, "credit")}` + ) + .setTimestamp(new Date()) + .setColor(successColor) + .setFooter({ text: footerText, iconURL: footerIcon }), + ], }); + return; }, }; diff --git a/src/plugins/commands/manage/modules/credits/modules/set/index.ts b/src/plugins/commands/manage/modules/credits/modules/set/index.ts index 8db2bd6..562ca32 100644 --- a/src/plugins/commands/manage/modules/credits/modules/set/index.ts +++ b/src/plugins/commands/manage/modules/credits/modules/set/index.ts @@ -9,9 +9,9 @@ import { } from "discord.js"; // Configurations import getEmbedConfig from "../../../../../../../helpers/getEmbedData"; -import fetchUser from "../../../../../../../helpers/userData"; // Handlers import logger from "../../../../../../../middlewares/logger"; +import prisma from "../../../../../../../prisma"; // Function export default { @@ -91,60 +91,52 @@ export default { }); } - // toUser Information - const toUser = await fetchUser(discordUser, guild); + const createGuildMember = await prisma.guildMember.upsert({ + where: { + userId_guildId: { + userId: discordUser.id, + guildId: guild.id, + }, + }, + update: { creditsEarned: creditAmount }, + create: { + creditsEarned: creditAmount, + user: { + connectOrCreate: { + create: { + id: discordUser.id, + }, + where: { + id: discordUser.id, + }, + }, + }, + guild: { + connectOrCreate: { + create: { + id: guild.id, + }, + where: { + id: guild.id, + }, + }, + }, + }, + }); - // If toUser does not exist - if (toUser === null) { - logger?.silly(`User does not exist`); + logger.silly(createGuildMember); - return interaction?.editReply({ - embeds: [ - new EmbedBuilder() - .setTitle("[:toolbox:] Manage - Credits (Set)") - .setDescription(`The user you provided does not exist.`) - .setTimestamp(new Date()) - .setColor(errorColor) - .setFooter({ text: footerText, iconURL: footerIcon }), - ], - }); - } - - // If toUser.credits does not exist - if (toUser?.credits === null) { - logger?.silly(`User does not have any credits`); - - return interaction?.editReply({ - embeds: [ - new EmbedBuilder() - .setTitle("[:toolbox:] Manage - Credits (Set)") - .setDescription(`The user you provided does not have any credits.`) - .setTimestamp(new Date()) - .setColor(errorColor) - .setFooter({ text: footerText, iconURL: footerIcon }), - ], - }); - } - - // Set toUser with amount - toUser.credits = creditAmount; - - // Save toUser - await toUser?.save()?.then(async () => { - logger?.silly(`Saved user`); - - return interaction?.editReply({ - embeds: [ - new EmbedBuilder() - .setTitle("[:toolbox:] Manage - Credits (Set)") - .setDescription( - `Set **${discordUser}**'s credits to **${creditAmount}**.` - ) - .setTimestamp(new Date()) - .setColor(successColor) - .setFooter({ text: footerText, iconURL: footerIcon }), - ], - }); + return interaction?.editReply({ + embeds: [ + new EmbedBuilder() + .setTitle("[:toolbox:] Manage - Credits (Set)") + .setDescription( + `Set **${discordUser}**'s credits to **${creditAmount}**.` + ) + .setTimestamp(new Date()) + .setColor(successColor) + .setFooter({ text: footerText, iconURL: footerIcon }), + ], }); }, }; diff --git a/src/plugins/commands/manage/modules/credits/modules/take/index.ts b/src/plugins/commands/manage/modules/credits/modules/take/index.ts index 5b920ba..1c5f256 100644 --- a/src/plugins/commands/manage/modules/credits/modules/take/index.ts +++ b/src/plugins/commands/manage/modules/credits/modules/take/index.ts @@ -10,9 +10,9 @@ import { import getEmbedConfig from "../../../../../../../helpers/getEmbedData"; // Helpers../../../../../../../helpers/userData import pluralize from "../../../../../../../helpers/pluralize"; -import fetchUser from "../../../../../../../helpers/userData"; // Handlers import logger from "../../../../../../../middlewares/logger"; +import prisma from "../../../../../../../prisma"; // Function export default { @@ -45,7 +45,7 @@ export default { const { guild, options } = interaction; // User option - const optionUser = options?.getUser("user"); + const discordReceiver = options?.getUser("user"); // Amount option const optionAmount = options?.getInteger("amount"); @@ -82,7 +82,7 @@ export default { }); } - if (optionUser === null) { + if (discordReceiver === null) { logger?.silly(`Discord receiver is null`); return interaction?.editReply({ @@ -111,59 +111,52 @@ export default { }); } - // toUser Information - const toUser = await fetchUser(optionUser, guild); - - // If toUser does not exist - if (toUser === null) { - logger?.silly(`ToUser is null`); - - return interaction?.editReply({ - embeds: [ - new EmbedBuilder() - .setTitle("[:toolbox:] Manage - Credits (Take)") - .setDescription(`The user you provided does not exist.`) - .setTimestamp(new Date()) - .setColor(errorColor) - .setFooter({ text: footerText, iconURL: footerIcon }), - ], - }); - } - - // If toUser.credits does not exist - if (toUser?.credits === null) { - logger?.silly(`ToUser.credits is null`); - - return interaction?.editReply({ - embeds: [ - new EmbedBuilder() - .setTitle("[:toolbox:] Manage - Credits (Take)") - .setDescription(`The user you provided does not have credits.`) - .setTimestamp(new Date()) - .setColor(errorColor) - .setFooter({ text: footerText, iconURL: footerIcon }), - ], - }); - } - - // Withdraw amount from toUser - toUser.credits -= optionAmount; - - // Save toUser - await toUser?.save()?.then(async () => { - await interaction?.editReply({ - embeds: [ - new EmbedBuilder() - .setTitle("[:toolbox:] Manage - Credits (Take)") - .setDescription( - `Took ${pluralize(optionAmount, "credit")} from ${optionUser}.` - ) - .setTimestamp(new Date()) - .setColor(successColor) - .setFooter({ text: footerText, iconURL: footerIcon }), - ], - }); - return; + const createGuildMember = await prisma.guildMember.upsert({ + where: { + userId_guildId: { + userId: discordReceiver.id, + guildId: guild.id, + }, + }, + update: { creditsEarned: { decrement: optionAmount } }, + create: { + creditsEarned: -optionAmount, + user: { + connectOrCreate: { + create: { + id: discordReceiver.id, + }, + where: { + id: discordReceiver.id, + }, + }, + }, + guild: { + connectOrCreate: { + create: { + id: guild.id, + }, + where: { + id: guild.id, + }, + }, + }, + }, }); + + logger.silly(createGuildMember); + await interaction?.editReply({ + embeds: [ + new EmbedBuilder() + .setTitle("[:toolbox:] Manage - Credits (Take)") + .setDescription( + `Took ${pluralize(optionAmount, "credit")} from ${discordReceiver}.` + ) + .setTimestamp(new Date()) + .setColor(successColor) + .setFooter({ text: footerText, iconURL: footerIcon }), + ], + }); + return; }, }; diff --git a/src/plugins/commands/manage/modules/credits/modules/transfer/index.ts b/src/plugins/commands/manage/modules/credits/modules/transfer/index.ts index 62a9425..cfe959e 100644 --- a/src/plugins/commands/manage/modules/credits/modules/transfer/index.ts +++ b/src/plugins/commands/manage/modules/credits/modules/transfer/index.ts @@ -6,12 +6,10 @@ import { EmbedBuilder, PermissionsBitField, } from "discord.js"; -import mongoose from "mongoose"; +import transferCredits from "../../../../../../../helpers/transferCredits"; // Configurations import getEmbedConfig from "../../../../../../../helpers/getEmbedData"; -import fetchUser from "../../../../../../../helpers/userData"; // Handlers../../../../../../../helpers/userData -import logger from "../../../../../../../middlewares/logger"; // Function export default { @@ -54,188 +52,26 @@ export default { const optionToUser = options?.getUser("to"); const optionAmount = options?.getInteger("amount"); - // If amount is null - if (optionAmount === null) { - logger?.silly(`Amount is null`); + if (optionAmount === null) throw new Error("Amount is not specified"); - return interaction?.editReply({ - embeds: [ - new EmbedBuilder() - .setTitle("[:toolbox:] Manage - Credits (Transfer)") - .setDescription(`You must provide an amount.`) - .setTimestamp(new Date()) - .setColor(errorColor) - .setFooter({ text: footerText, iconURL: footerIcon }), - ], - }); - } + if (optionAmount <= 0) + throw new Error("You need to set amount above zero to transfer."); - if (guild === null) { - logger?.silly(`Guild is null`); + if (!guild) throw new Error(`We could not find this guild.`); - return interaction?.editReply({ - embeds: [ - new EmbedBuilder() - .setTitle("[:toolbox:] Manage - Credits (Transfer)") - .setDescription(`You must be in a guild.`) - .setTimestamp(new Date()) - .setColor(errorColor) - .setFooter({ text: footerText, iconURL: footerIcon }), - ], - }); - } - if (optionFromUser === null) { - logger?.silly(`From user is null`); + if (!optionFromUser) + throw new Error("You must provide a user to transfer from."); - return interaction?.editReply({ - embeds: [ - new EmbedBuilder() - .setTitle("[:toolbox:] Manage - Credits (Transfer)") - .setDescription(`You must provide a user to transfer from.`) - .setTimestamp(new Date()) - .setColor(errorColor) - .setFooter({ text: footerText, iconURL: footerIcon }), - ], - }); - } - if (optionToUser === null) { - logger?.silly(`To user is null`); + if (!optionToUser) + throw new Error("You must provide a user to transfer to."); - return interaction?.editReply({ - embeds: [ - new EmbedBuilder() - .setTitle("[:toolbox:] Manage - Credits (Transfer)") - .setDescription(`You must provide a user to transfer to.`) - .setTimestamp(new Date()) - .setColor(errorColor) - .setFooter({ text: footerText, iconURL: footerIcon }), - ], - }); - } - - // Get fromUser object - const fromUser = await fetchUser(optionFromUser, guild); - - // Get toUser object - const toUser = await fetchUser(optionToUser, guild); - - // If toUser does not exist - if (fromUser === null) { - logger?.silly(`From user does not exist`); - - return interaction?.editReply({ - embeds: [ - new EmbedBuilder() - .setTitle("[:toolbox:] Manage - Credits (Transfer)") - .setDescription( - `The user you provided to transfer from does not exist.` - ) - .setTimestamp(new Date()) - .setColor(errorColor) - .setFooter({ text: footerText, iconURL: footerIcon }), - ], - }); - } - - // If toUser.credits does not exist - if (!fromUser?.credits) { - logger?.silly(`From user does not have credits`); - - return interaction?.editReply({ - embeds: [ - new EmbedBuilder() - .setTitle("[:toolbox:] Manage - Credits (Transfer)") - .setDescription( - `The user you provided to transfer from does not have credits.` - ) - .setTimestamp(new Date()) - .setColor(errorColor) - .setFooter({ text: footerText, iconURL: footerIcon }), - ], - }); - } - - // If toUser does not exist - if (toUser === null) { - logger?.silly(`To user does not exist`); - - return interaction?.editReply({ - embeds: [ - new EmbedBuilder() - .setTitle("[:toolbox:] Manage - Credits (Transfer)") - .setDescription( - `The user you provided to transfer to does not exist.` - ) - .setTimestamp(new Date()) - .setColor(errorColor) - .setFooter({ text: footerText, iconURL: footerIcon }), - ], - }); - } - - // If toUser.credits does not exist - if (toUser?.credits === null) { - logger?.silly(`To user does not have credits`); - - return interaction?.editReply({ - embeds: [ - new EmbedBuilder() - .setTitle("[:toolbox:] Manage - Credits (Transfer)") - .setDescription( - `The user you provided to transfer to does not have credits.` - ) - .setTimestamp(new Date()) - .setColor(errorColor) - .setFooter({ text: footerText, iconURL: footerIcon }), - ], - }); - } - - const session = await mongoose.startSession(); - - session.startTransaction(); - - try { - // Withdraw amount from fromUserDB - fromUser.credits -= optionAmount; - - // Deposit amount to toUserDB - toUser.credits += optionAmount; - - await fromUser.save(); - - await toUser.save(); - - await session.commitTransaction(); - } catch (error: unknown) { - await session.abortTransaction(); - session.endSession(); - - throw new Error( - "An error occurred while trying to gift credits. Please try again later." - ); - } finally { - // ending the session - session.endSession(); - } + await transferCredits(guild, optionFromUser, optionToUser, optionAmount); return interaction?.editReply({ embeds: [ new EmbedBuilder() .setTitle("[:toolbox:] Manage - Credits (Transfer)") .setDescription(`Transferred ${optionAmount} credits.`) - .addFields( - { - name: `${optionFromUser?.username} Balance`, - value: `${fromUser?.credits}`, - inline: true, - }, - { - name: `${optionToUser?.username} Balance`, - value: `${toUser?.credits}`, - inline: true, - } - ) .setTimestamp(new Date()) .setColor(successColor) .setFooter({ text: footerText, iconURL: footerIcon }),