diff --git a/prisma/migrations/20221225152330_rename_guildmembercredits_to_guildmembercredit/migration.sql b/prisma/migrations/20221225152330_rename_guildmembercredits_to_guildmembercredit/migration.sql new file mode 100644 index 0000000..22c0ec1 --- /dev/null +++ b/prisma/migrations/20221225152330_rename_guildmembercredits_to_guildmembercredit/migration.sql @@ -0,0 +1,2 @@ +-- AlterTable +ALTER TABLE GuildMemberCredits RENAME TO GuildMemberCredit; diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 45e7f21..ce3062f 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -60,10 +60,10 @@ model GuildMember { pointsEarned Int @default(0) - createdAt DateTime @default(now()) - updatedAt DateTime @updatedAt - GuildShopRoles GuildShopRoles[] - GuildMemberCredits GuildMemberCredits? + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + GuildShopRoles GuildShopRoles[] + GuildMemberCredit GuildMemberCredit? // Unique Identifier @@unique([userId, guildId]) @@ -214,7 +214,7 @@ model GuildCounters { @@unique([guildId, channelId]) } -model GuildMemberCredits { +model GuildMemberCredit { userId String guildId String diff --git a/src/commands/credits/subcommands/balance/index.ts b/src/commands/credits/subcommands/balance/index.ts index 4e82abe..acd7ab8 100644 --- a/src/commands/credits/subcommands/balance/index.ts +++ b/src/commands/credits/subcommands/balance/index.ts @@ -34,7 +34,7 @@ export const execute = async (interaction: CommandInteraction) => { const EmbedSuccess = await BaseEmbedSuccess(guild, ":credit_card:︱Balance"); // 5. Upsert the user in the database. - const createGuildMemberCredits = await prisma.guildMemberCredits.upsert({ + const createguildMemberCredit = await prisma.guildMemberCredit.upsert({ where: { userId_guildId: { userId: (target || user).id, @@ -61,7 +61,7 @@ export const execute = async (interaction: CommandInteraction) => { include: { GuildMember: true }, }); - logger.silly(createGuildMemberCredits); + logger.silly(createguildMemberCredit); await upsertGuildMember(guild, user); @@ -70,8 +70,8 @@ export const execute = async (interaction: CommandInteraction) => { embeds: [ EmbedSuccess.setDescription( target - ? `${target} has ${createGuildMemberCredits.balance} coins in his account.` - : `You have ${createGuildMemberCredits.balance} coins in your account.` + ? `${target} has ${createguildMemberCredit.balance} coins in his account.` + : `You have ${createguildMemberCredit.balance} coins in your account.` ), ], }); diff --git a/src/commands/credits/subcommands/gift/index.ts b/src/commands/credits/subcommands/gift/index.ts index 85c92eb..ee209ee 100644 --- a/src/commands/credits/subcommands/gift/index.ts +++ b/src/commands/credits/subcommands/gift/index.ts @@ -65,7 +65,7 @@ export const execute = async (interaction: ChatInputCommandInteraction) => { // 5. Start an transaction of the credits. await creditsTransfer(guild, user, account, credits); - const receiverGuildMember = await prisma.guildMemberCredits.upsert({ + const receiverGuildMember = await prisma.guildMemberCredit.upsert({ where: { userId_guildId: { userId: account.id, @@ -106,7 +106,7 @@ export const execute = async (interaction: ChatInputCommandInteraction) => { ], }); - const senderGuildMember = await prisma.guildMemberCredits.upsert({ + const senderGuildMember = await prisma.guildMemberCredit.upsert({ where: { userId_guildId: { userId: user.id, diff --git a/src/commands/credits/subcommands/top/index.ts b/src/commands/credits/subcommands/top/index.ts index 7385b8e..4461130 100644 --- a/src/commands/credits/subcommands/top/index.ts +++ b/src/commands/credits/subcommands/top/index.ts @@ -1,4 +1,4 @@ -import { GuildMemberCredits } from "@prisma/client"; +import { GuildMemberCredit } from "@prisma/client"; import { CommandInteraction, SlashCommandSubcommandBuilder, @@ -32,7 +32,7 @@ export const execute = async (interaction: CommandInteraction) => { const EmbedSuccess = await BaseEmbedSuccess(guild, "[:dollar:] Top"); // 4. Get the top 10 users. - const topTen = await prisma.guildMemberCredits.findMany({ + const topTen = await prisma.guildMemberCredit.findMany({ where: { guildId: guild.id, }, @@ -44,9 +44,9 @@ export const execute = async (interaction: CommandInteraction) => { logger.silly(topTen); // 5. Create the top 10 list. - const entry = (guildMemberCredits: GuildMemberCredits, index: number) => - `${index + 1}. ${userMention(guildMemberCredits.userId)} | :coin: ${ - guildMemberCredits.balance + const entry = (guildMemberCredit: GuildMemberCredit, index: number) => + `${index + 1}. ${userMention(guildMemberCredit.userId)} | :coin: ${ + guildMemberCredit.balance }`; // 6. Send embed diff --git a/src/commands/shop/groups/roles/subcommands/buy/index.ts b/src/commands/shop/groups/roles/subcommands/buy/index.ts index a5fd55b..7554656 100644 --- a/src/commands/shop/groups/roles/subcommands/buy/index.ts +++ b/src/commands/shop/groups/roles/subcommands/buy/index.ts @@ -124,7 +124,7 @@ export const execute = async (interaction: ChatInputCommandInteraction) => { // Get guild object const pricePerHour = upsertGuildConfigShopRoles.pricePerHour; - const updateGuildMember = await prisma.guildMemberCredits.update({ + const updateGuildMember = await prisma.guildMemberCredit.update({ where: { userId_guildId: { userId, diff --git a/src/commands/shop/groups/roles/subcommands/cancel/index.ts b/src/commands/shop/groups/roles/subcommands/cancel/index.ts index eeb5e9a..704cb2b 100644 --- a/src/commands/shop/groups/roles/subcommands/cancel/index.ts +++ b/src/commands/shop/groups/roles/subcommands/cancel/index.ts @@ -57,7 +57,7 @@ export const execute = async (interaction: ChatInputCommandInteraction) => { await guild?.roles .delete(optionRole?.id, `${user?.id} canceled from shop`) .then(async () => { - const createGuildMember = await prisma.guildMemberCredits.upsert({ + const createGuildMember = await prisma.guildMemberCredit.upsert({ where: { userId_guildId: { userId: user.id, diff --git a/src/commands/shop/subcommands/cpgg/index.ts b/src/commands/shop/subcommands/cpgg/index.ts index 85e3269..54fff1e 100644 --- a/src/commands/shop/subcommands/cpgg/index.ts +++ b/src/commands/shop/subcommands/cpgg/index.ts @@ -48,7 +48,7 @@ export const execute = async (interaction: ChatInputCommandInteraction) => { } if (!guild) throw new Error("Guild not found"); - const upsertGuildMemberCredits = await prisma.guildMemberCredits.upsert({ + const upsertguildMemberCredit = await prisma.guildMemberCredit.upsert({ where: { userId_guildId: { userId: user.id, @@ -74,8 +74,8 @@ export const execute = async (interaction: ChatInputCommandInteraction) => { }, }); - if (!upsertGuildMemberCredits) - throw new Error("upsertGuildMemberCredits unavailable"); + if (!upsertguildMemberCredit) + throw new Error("upsertguildMemberCredit unavailable"); const upsertGuildConfigApisCpgg = await prisma.guildConfigApisCpgg.upsert({ where: { @@ -99,17 +99,17 @@ export const execute = async (interaction: ChatInputCommandInteraction) => { }, }); - logger.silly(upsertGuildMemberCredits); + logger.silly(upsertguildMemberCredit); const dmUser = client?.users?.cache?.get(user?.id); - if ((optionAmount || upsertGuildMemberCredits.balance) < 100) + if ((optionAmount || upsertguildMemberCredit.balance) < 100) throw new Error("You can't withdraw to CPGG below 100 credits."); - if ((optionAmount || upsertGuildMemberCredits.balance) > 1000000) + if ((optionAmount || upsertguildMemberCredit.balance) > 1000000) throw new Error("Amount or user credits is above 1.000.000."); - if (upsertGuildMemberCredits.balance < optionAmount) + if (upsertguildMemberCredit.balance < optionAmount) throw new Error("You can't withdraw more than you have on your account."); if (!upsertGuildConfigApisCpgg.urlIv || !upsertGuildConfigApisCpgg.urlContent) @@ -148,15 +148,15 @@ export const execute = async (interaction: ChatInputCommandInteraction) => { ?.post("vouchers", { uses: 1, code, - credits: optionAmount || upsertGuildMemberCredits.balance, + credits: optionAmount || upsertguildMemberCredit.balance, memo: `${interaction?.createdTimestamp} - ${interaction?.user?.id}`, }) ?.then(async () => { logger?.silly(`Successfully created voucher.`); - upsertGuildMemberCredits.balance -= - optionAmount || upsertGuildMemberCredits.balance; + upsertguildMemberCredit.balance -= + optionAmount || upsertguildMemberCredit.balance; - const updateGuildMember = await prisma.guildMemberCredits.update({ + const updateGuildMember = await prisma.guildMemberCredit.update({ where: { userId_guildId: { userId: user.id, @@ -165,7 +165,7 @@ export const execute = async (interaction: ChatInputCommandInteraction) => { }, data: { balance: { - decrement: optionAmount || upsertGuildMemberCredits.balance, + decrement: optionAmount || upsertguildMemberCredit.balance, }, }, }); @@ -181,7 +181,7 @@ export const execute = async (interaction: ChatInputCommandInteraction) => { .setTimestamp() .addFields({ name: "💶 Credits", - value: `${optionAmount || upsertGuildMemberCredits.balance}`, + value: `${optionAmount || upsertguildMemberCredit.balance}`, inline: true, }) .setColor(successColor) diff --git a/src/events/messageUpdate/index.ts b/src/events/messageUpdate/index.ts index fc01d09..b017359 100644 --- a/src/events/messageUpdate/index.ts +++ b/src/events/messageUpdate/index.ts @@ -1,6 +1,5 @@ // Dependencies import { Message } from "discord.js"; -import logger from "../../middlewares/logger"; // Modules import counter from "./modules/counter"; @@ -14,17 +13,13 @@ export const options: IEventOptions = { // Execute the function export const execute = async (oldMessage: Message, newMessage: Message) => { - const { author, guild } = newMessage; + const { author } = newMessage; await audits.execute(oldMessage, newMessage); - logger?.silly( - `Message update event fired by ${author.tag} (${author.id}) in guild: ${guild?.name} (${guild?.id})` - ); - - if (author?.bot) return logger?.silly(`Message update event fired by bot`); + if (author.bot) return; await counter(newMessage); - return true; + return; }; diff --git a/src/handlers/command/index.ts b/src/handlers/command/index.ts index 88a5311..bdde535 100644 --- a/src/handlers/command/index.ts +++ b/src/handlers/command/index.ts @@ -1,4 +1,3 @@ -/* eslint-disable no-loops/no-loops */ import { Client } from "discord.js"; import checkDirectory from "../../helpers/checkDirectory"; import { ICommand } from "../../interfaces/Command"; @@ -6,8 +5,10 @@ import logger from "../../middlewares/logger"; // Register the commands. export const register = async (client: Client) => { - await checkDirectory("commands").then(async (commandNames) => { - for await (const commandName of commandNames) { + const profiler = logger.startTimer(); + + await checkDirectory("commands").then((commandNames) => { + commandNames.forEach(async (commandName) => { const commandProfiler = logger.startTimer(); await import(`../../commands/${commandName}`) @@ -30,6 +31,10 @@ export const register = async (client: Client) => { level: "error", }); }); - } + }); + }); + + return profiler.done({ + message: "Successfully registered all commands!", }); }; diff --git a/src/handlers/database/index.ts b/src/handlers/database/index.ts index e801696..dff0994 100644 --- a/src/handlers/database/index.ts +++ b/src/handlers/database/index.ts @@ -14,14 +14,6 @@ prisma.$use(async (params, next) => { `Query ${params.model}.${params.action} took ${after - before}ms` ); - if (after - before >= 50) { - logger.warn( - `Query ${params.model}.${params.action} took long time ${ - after - before - }ms` - ); - } - return result; }); diff --git a/src/handlers/event/index.ts b/src/handlers/event/index.ts index 49d42e7..751aae0 100644 --- a/src/handlers/event/index.ts +++ b/src/handlers/event/index.ts @@ -1,4 +1,3 @@ -/* eslint-disable no-loops/no-loops */ import { Client } from "discord.js"; import checkDirectory from "../../helpers/checkDirectory"; import { IEvent } from "../../interfaces/Event"; @@ -8,10 +7,7 @@ import logger from "../../middlewares/logger"; export const register = async (client: Client) => { const profiler = logger.startTimer(); - await checkDirectory("events").then(async (eventNames) => { - const totalEvents = eventNames.length; - let loadedEvents = 0; - + await checkDirectory("events").then((eventNames) => { // Import an event. const importEvent = async (name: string) => { await import(`../../events/${name}`).then((event: IEvent) => { @@ -37,20 +33,17 @@ export const register = async (client: Client) => { type: event.options.type, message: `Listening to event '${name}'`, }); - return loadedEvents++; + + return event; }); }; - for await (const eventName of eventNames) { + eventNames.forEach(async (eventName) => { await importEvent(eventName); + }); + }); - if (loadedEvents === totalEvents) { - return profiler.done({ - message: "Successfully listening to all events!", - }); - } - } - - return true; + return profiler.done({ + message: "Successfully listening to all events!", }); }; diff --git a/src/handlers/schedule/index.ts b/src/handlers/schedule/index.ts index acc6ddc..8fcd102 100644 --- a/src/handlers/schedule/index.ts +++ b/src/handlers/schedule/index.ts @@ -6,25 +6,45 @@ import logger from "../../middlewares/logger"; // Start all jobs that are in the schedules directory export const start = async (client: Client) => { - const jobNames = await checkDirectory("schedules"); - if (!jobNames) return logger.warn("⏰ No available jobs found"); + const profiler = logger.startTimer(); - return await Promise.all( - jobNames.map(async (jobName) => { + await checkDirectory("schedules").then((jobNames) => { + jobNames.forEach(async (jobName) => { await import(`../../schedules/${jobName}`) .then((job: IJob) => { - return schedule.scheduleJob(job.options.schedule, async () => { - logger.verbose(`⏰ Performed the job "${jobName}"`); - await job.execute(client); + schedule.scheduleJob(job.options.schedule, async () => { + const jobProfiler = logger.startTimer(); + await job + .execute(client) + .then(() => { + jobProfiler.done({ + message: `Successfully executed job '${jobName}'`, + level: "debug", + job, + jobName, + }); + }) + .catch(() => { + jobProfiler.done({ + message: `Failed executing job '${jobName}'`, + level: "debug", + job, + jobName, + }); + }); }); }) .catch((error) => { logger.warn({ jobName, - message: `Failed to start job ${jobName}`, + message: `Failed to schedule job ${jobName}`, error, }); }); - }) - ); + }); + }); + + return profiler.done({ + message: "Successfully scheduled all jobs!", + }); }; diff --git a/src/helpers/credits/give.ts b/src/helpers/credits/give.ts index f7c0d70..5225eb0 100644 --- a/src/helpers/credits/give.ts +++ b/src/helpers/credits/give.ts @@ -8,7 +8,7 @@ export default async (guild: Guild, user: User, amount: number) => { transactionRules(guild, user, amount); // 2. Make the transaction. - const recipient = await tx.guildMemberCredits.upsert({ + const recipient = await tx.guildMemberCredit.upsert({ update: { balance: { increment: amount, diff --git a/src/helpers/credits/set.ts b/src/helpers/credits/set.ts index adfe04e..a09c400 100644 --- a/src/helpers/credits/set.ts +++ b/src/helpers/credits/set.ts @@ -8,7 +8,7 @@ export default async (guild: Guild, user: User, amount: number) => { transactionRules(guild, user, amount); // 2. Make the transaction. - const recipient = await tx.guildMemberCredits.upsert({ + const recipient = await tx.guildMemberCredit.upsert({ update: { balance: amount, }, diff --git a/src/helpers/credits/take.ts b/src/helpers/credits/take.ts index 1175aa3..6305677 100644 --- a/src/helpers/credits/take.ts +++ b/src/helpers/credits/take.ts @@ -8,7 +8,7 @@ export default async (guild: Guild, user: User, amount: number) => { transactionRules(guild, user, amount); // 2. Make the transaction. - const recipient = await tx.guildMemberCredits.upsert({ + const recipient = await tx.guildMemberCredit.upsert({ update: { balance: { decrement: amount, diff --git a/src/helpers/credits/transfer.ts b/src/helpers/credits/transfer.ts index 0e6bf21..ebc13b2 100644 --- a/src/helpers/credits/transfer.ts +++ b/src/helpers/credits/transfer.ts @@ -5,7 +5,7 @@ import transactionRules from "./transactionRules"; export default async (guild: Guild, from: User, to: User, amount: number) => { return await prisma.$transaction(async (tx) => { // 1. Decrement amount from the sender. - const sender = await tx.guildMemberCredits.upsert({ + const sender = await tx.guildMemberCredit.upsert({ update: { balance: { decrement: amount, @@ -49,7 +49,7 @@ export default async (guild: Guild, from: User, to: User, amount: number) => { if (from.id === to.id) throw new Error("You can't transfer to yourself."); // 7. Increment the recipient's balance by amount. - const recipient = await tx.guildMemberCredits.upsert({ + const recipient = await tx.guildMemberCredit.upsert({ update: { balance: { increment: amount, diff --git a/src/middlewares/cooldown/index.ts b/src/middlewares/cooldown/index.ts index 8d1fe25..c439482 100644 --- a/src/middlewares/cooldown/index.ts +++ b/src/middlewares/cooldown/index.ts @@ -79,7 +79,7 @@ export default async ( }, }); - setTimeout(async () => { + return setTimeout(async () => { await prisma.cooldown.delete({ where: { guildId_userId_timeoutId: { diff --git a/src/schedules/shop/modules/roles/components/overDueForPayment.ts b/src/schedules/shop/modules/roles/components/overDueForPayment.ts index ab160a0..10119fc 100644 --- a/src/schedules/shop/modules/roles/components/overDueForPayment.ts +++ b/src/schedules/shop/modules/roles/components/overDueForPayment.ts @@ -34,7 +34,7 @@ export const execute = async (client: Client, role: GuildShopRoles) => { if (!getGuildConfigShopRoles) throw new Error("Could not find guild config shop roles."); - const getGuildMemberCredits = await prisma.guildMemberCredits.findUnique({ + const getguildMemberCredit = await prisma.guildMemberCredit.findUnique({ where: { userId_guildId: { userId, @@ -46,13 +46,13 @@ export const execute = async (client: Client, role: GuildShopRoles) => { }, }); - logger.silly(getGuildMemberCredits); + logger.silly(getguildMemberCredit); - if (!getGuildMemberCredits) throw new Error("Could not find guild member."); + if (!getguildMemberCredit) throw new Error("Could not find guild member."); const pricePerHour = getGuildConfigShopRoles.pricePerHour; - if (getGuildMemberCredits.balance < pricePerHour) { + if (getguildMemberCredit.balance < pricePerHour) { await rMember.roles .remove(roleId) .then(async () => { @@ -79,7 +79,7 @@ export const execute = async (client: Client, role: GuildShopRoles) => { throw new Error("User does not have enough credits."); } - const createGuildMember = await prisma.guildMemberCredits.upsert({ + const createGuildMember = await prisma.guildMemberCredit.upsert({ where: { userId_guildId: { userId,