diff --git a/src/plugins/events/messageCreate/index.ts b/src/plugins/events/messageCreate/index.ts index 06619f0..85f9c04 100644 --- a/src/plugins/events/messageCreate/index.ts +++ b/src/plugins/events/messageCreate/index.ts @@ -1,7 +1,6 @@ import { Message } from "discord.js"; -import modules from "../../events/messageCreate/modules"; - import { IEventOptions } from "../../../interfaces/EventOptions"; +import modules from "../../events/messageCreate/modules"; export const options: IEventOptions = { type: "on", diff --git a/src/plugins/events/messageCreate/modules/credits/index.ts b/src/plugins/events/messageCreate/modules/credits/index.ts index 4b954f5..f342237 100644 --- a/src/plugins/events/messageCreate/modules/credits/index.ts +++ b/src/plugins/events/messageCreate/modules/credits/index.ts @@ -1,8 +1,7 @@ import { ChannelType, Message } from "discord.js"; import { message as CooldownMessage } from "../../../../../helpers/cooldown"; -import fetchGuild from "../../../../../helpers/guildData"; -import fetchUser from "../../../../../helpers/userData"; import logger from "../../../../../middlewares/logger"; +import prisma from "../../../../../prisma"; export default { execute: async (message: Message) => { @@ -12,32 +11,70 @@ export default { if (author.bot) return; if (channel.type !== ChannelType.GuildText) return; - const { id: guildId } = guild; - const { id: userId } = author; + const createGuildMember = await prisma.guildMember.upsert({ + where: { + userId_guildId: { + userId: author.id, + guildId: guild.id, + }, + }, + update: {}, + create: { + user: { + connectOrCreate: { + create: { + id: author.id, + }, + where: { + id: author.id, + }, + }, + }, + guild: { + connectOrCreate: { + create: { + id: guild.id, + }, + where: { + id: guild.id, + }, + }, + }, + }, + include: { + user: true, + guild: true, + }, + }); - const guildData = await fetchGuild(guild); - const userData = await fetchUser(author, guild); + logger.silly(createGuildMember); - if (content.length < guildData.credits.minimumLength) return; + if (content.length < createGuildMember.guild.creditsMinimumLength) return; const isOnCooldown = await CooldownMessage( message, - guildData.credits.timeout, + createGuildMember.guild.creditsTimeout, "messageCreate-credits" ); if (isOnCooldown) return; - userData.credits += guildData.credits.rate; + const updateGuildMember = await prisma.guildMember.update({ + where: { + userId_guildId: { + userId: author.id, + guildId: guild.id, + }, + }, + data: { + creditsEarned: { + increment: createGuildMember.guild.creditsRate, + }, + }, + }); - await userData - .save() - .then(() => { - logger.silly( - `User ${userId} in guild ${guildId} has ${userData.credits} credits` - ); - }) - .catch(() => { - throw new Error(`Error saving credits to database.`); - }); + logger.silly(updateGuildMember); + + if (!updateGuildMember) + throw new Error("Failed to update guildMember object"); }, }; diff --git a/src/plugins/events/messageCreate/modules/points/index.ts b/src/plugins/events/messageCreate/modules/points/index.ts index 57f321e..6fca49d 100644 --- a/src/plugins/events/messageCreate/modules/points/index.ts +++ b/src/plugins/events/messageCreate/modules/points/index.ts @@ -1,8 +1,7 @@ import { ChannelType, Message } from "discord.js"; import { message as CooldownMessage } from "../../../../../helpers/cooldown"; -import fetchGuild from "../../../../../helpers/guildData"; -import fetchUser from "../../../../../helpers/userData"; import logger from "../../../../../middlewares/logger"; +import prisma from "../../../../../prisma"; export default { execute: async (message: Message) => { @@ -12,33 +11,70 @@ export default { if (author.bot) return; if (channel.type !== ChannelType.GuildText) return; - const guildData = await fetchGuild(guild); - const userData = await fetchUser(author, guild); + const createGuildMember = await prisma.guildMember.upsert({ + where: { + userId_guildId: { + userId: author.id, + guildId: guild.id, + }, + }, + update: {}, + create: { + user: { + connectOrCreate: { + create: { + id: author.id, + }, + where: { + id: author.id, + }, + }, + }, + guild: { + connectOrCreate: { + create: { + id: guild.id, + }, + where: { + id: guild.id, + }, + }, + }, + }, + include: { + user: true, + guild: true, + }, + }); - if (content.length < guildData.credits.minimumLength) return; + logger.silly(createGuildMember); + + if (content.length < createGuildMember.guild.pointsMinimumLength) return; const isOnCooldown = await CooldownMessage( message, - guildData.credits.timeout, + createGuildMember.guild.pointsTimeout, "messageCreate-points" ); if (isOnCooldown) return; - userData.points += guildData.points.rate; + const updateGuildMember = await prisma.guildMember.update({ + where: { + userId_guildId: { + userId: author.id, + guildId: guild.id, + }, + }, + data: { + pointsEarned: { + increment: createGuildMember.guild.pointsRate, + }, + }, + }); - await userData - .save() - .then(() => { - logger.silly( - `Successfully saved user ${author.tag} (${author.id}) in guild: ${guild?.name} (${guild?.id})` - ); - }) - .catch(() => { - throw new Error("Error saving points to database."); - }); + logger.silly(updateGuildMember); - logger.silly( - `User ${author.tag} (${author.id}) in guild: ${guild?.name} (${guild?.id}) has ${userData.points} points` - ); + if (!updateGuildMember) + throw new Error("Failed to update guildMember object"); }, };