♻️ messageCreate functions are now using Prisma

This commit is contained in:
Axel Olausson Holtenäs 2022-10-19 13:47:11 +02:00
parent 2371ee366c
commit f83cef06a8
3 changed files with 113 additions and 41 deletions

View file

@ -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",

View file

@ -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");
},
};

View file

@ -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");
},
};