refactor: 🧑💻 improve developer experience
This commit is contained in:
parent
089b20a8cd
commit
96cb38464a
19 changed files with 94 additions and 87 deletions
|
@ -0,0 +1,2 @@
|
||||||
|
-- AlterTable
|
||||||
|
ALTER TABLE GuildMemberCredits RENAME TO GuildMemberCredit;
|
|
@ -60,10 +60,10 @@ model GuildMember {
|
||||||
|
|
||||||
pointsEarned Int @default(0)
|
pointsEarned Int @default(0)
|
||||||
|
|
||||||
createdAt DateTime @default(now())
|
createdAt DateTime @default(now())
|
||||||
updatedAt DateTime @updatedAt
|
updatedAt DateTime @updatedAt
|
||||||
GuildShopRoles GuildShopRoles[]
|
GuildShopRoles GuildShopRoles[]
|
||||||
GuildMemberCredits GuildMemberCredits?
|
GuildMemberCredit GuildMemberCredit?
|
||||||
|
|
||||||
// Unique Identifier
|
// Unique Identifier
|
||||||
@@unique([userId, guildId])
|
@@unique([userId, guildId])
|
||||||
|
@ -214,7 +214,7 @@ model GuildCounters {
|
||||||
@@unique([guildId, channelId])
|
@@unique([guildId, channelId])
|
||||||
}
|
}
|
||||||
|
|
||||||
model GuildMemberCredits {
|
model GuildMemberCredit {
|
||||||
userId String
|
userId String
|
||||||
guildId String
|
guildId String
|
||||||
|
|
||||||
|
|
|
@ -34,7 +34,7 @@ export const execute = async (interaction: CommandInteraction) => {
|
||||||
const EmbedSuccess = await BaseEmbedSuccess(guild, ":credit_card:︱Balance");
|
const EmbedSuccess = await BaseEmbedSuccess(guild, ":credit_card:︱Balance");
|
||||||
|
|
||||||
// 5. Upsert the user in the database.
|
// 5. Upsert the user in the database.
|
||||||
const createGuildMemberCredits = await prisma.guildMemberCredits.upsert({
|
const createguildMemberCredit = await prisma.guildMemberCredit.upsert({
|
||||||
where: {
|
where: {
|
||||||
userId_guildId: {
|
userId_guildId: {
|
||||||
userId: (target || user).id,
|
userId: (target || user).id,
|
||||||
|
@ -61,7 +61,7 @@ export const execute = async (interaction: CommandInteraction) => {
|
||||||
include: { GuildMember: true },
|
include: { GuildMember: true },
|
||||||
});
|
});
|
||||||
|
|
||||||
logger.silly(createGuildMemberCredits);
|
logger.silly(createguildMemberCredit);
|
||||||
|
|
||||||
await upsertGuildMember(guild, user);
|
await upsertGuildMember(guild, user);
|
||||||
|
|
||||||
|
@ -70,8 +70,8 @@ export const execute = async (interaction: CommandInteraction) => {
|
||||||
embeds: [
|
embeds: [
|
||||||
EmbedSuccess.setDescription(
|
EmbedSuccess.setDescription(
|
||||||
target
|
target
|
||||||
? `${target} has ${createGuildMemberCredits.balance} coins in his account.`
|
? `${target} has ${createguildMemberCredit.balance} coins in his account.`
|
||||||
: `You have ${createGuildMemberCredits.balance} coins in your account.`
|
: `You have ${createguildMemberCredit.balance} coins in your account.`
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
});
|
});
|
||||||
|
|
|
@ -65,7 +65,7 @@ export const execute = async (interaction: ChatInputCommandInteraction) => {
|
||||||
// 5. Start an transaction of the credits.
|
// 5. Start an transaction of the credits.
|
||||||
await creditsTransfer(guild, user, account, credits);
|
await creditsTransfer(guild, user, account, credits);
|
||||||
|
|
||||||
const receiverGuildMember = await prisma.guildMemberCredits.upsert({
|
const receiverGuildMember = await prisma.guildMemberCredit.upsert({
|
||||||
where: {
|
where: {
|
||||||
userId_guildId: {
|
userId_guildId: {
|
||||||
userId: account.id,
|
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: {
|
where: {
|
||||||
userId_guildId: {
|
userId_guildId: {
|
||||||
userId: user.id,
|
userId: user.id,
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import { GuildMemberCredits } from "@prisma/client";
|
import { GuildMemberCredit } from "@prisma/client";
|
||||||
import {
|
import {
|
||||||
CommandInteraction,
|
CommandInteraction,
|
||||||
SlashCommandSubcommandBuilder,
|
SlashCommandSubcommandBuilder,
|
||||||
|
@ -32,7 +32,7 @@ export const execute = async (interaction: CommandInteraction) => {
|
||||||
const EmbedSuccess = await BaseEmbedSuccess(guild, "[:dollar:] Top");
|
const EmbedSuccess = await BaseEmbedSuccess(guild, "[:dollar:] Top");
|
||||||
|
|
||||||
// 4. Get the top 10 users.
|
// 4. Get the top 10 users.
|
||||||
const topTen = await prisma.guildMemberCredits.findMany({
|
const topTen = await prisma.guildMemberCredit.findMany({
|
||||||
where: {
|
where: {
|
||||||
guildId: guild.id,
|
guildId: guild.id,
|
||||||
},
|
},
|
||||||
|
@ -44,9 +44,9 @@ export const execute = async (interaction: CommandInteraction) => {
|
||||||
logger.silly(topTen);
|
logger.silly(topTen);
|
||||||
|
|
||||||
// 5. Create the top 10 list.
|
// 5. Create the top 10 list.
|
||||||
const entry = (guildMemberCredits: GuildMemberCredits, index: number) =>
|
const entry = (guildMemberCredit: GuildMemberCredit, index: number) =>
|
||||||
`${index + 1}. ${userMention(guildMemberCredits.userId)} | :coin: ${
|
`${index + 1}. ${userMention(guildMemberCredit.userId)} | :coin: ${
|
||||||
guildMemberCredits.balance
|
guildMemberCredit.balance
|
||||||
}`;
|
}`;
|
||||||
|
|
||||||
// 6. Send embed
|
// 6. Send embed
|
||||||
|
|
|
@ -124,7 +124,7 @@ export const execute = async (interaction: ChatInputCommandInteraction) => {
|
||||||
// Get guild object
|
// Get guild object
|
||||||
const pricePerHour = upsertGuildConfigShopRoles.pricePerHour;
|
const pricePerHour = upsertGuildConfigShopRoles.pricePerHour;
|
||||||
|
|
||||||
const updateGuildMember = await prisma.guildMemberCredits.update({
|
const updateGuildMember = await prisma.guildMemberCredit.update({
|
||||||
where: {
|
where: {
|
||||||
userId_guildId: {
|
userId_guildId: {
|
||||||
userId,
|
userId,
|
||||||
|
|
|
@ -57,7 +57,7 @@ export const execute = async (interaction: ChatInputCommandInteraction) => {
|
||||||
await guild?.roles
|
await guild?.roles
|
||||||
.delete(optionRole?.id, `${user?.id} canceled from shop`)
|
.delete(optionRole?.id, `${user?.id} canceled from shop`)
|
||||||
.then(async () => {
|
.then(async () => {
|
||||||
const createGuildMember = await prisma.guildMemberCredits.upsert({
|
const createGuildMember = await prisma.guildMemberCredit.upsert({
|
||||||
where: {
|
where: {
|
||||||
userId_guildId: {
|
userId_guildId: {
|
||||||
userId: user.id,
|
userId: user.id,
|
||||||
|
|
|
@ -48,7 +48,7 @@ export const execute = async (interaction: ChatInputCommandInteraction) => {
|
||||||
}
|
}
|
||||||
if (!guild) throw new Error("Guild not found");
|
if (!guild) throw new Error("Guild not found");
|
||||||
|
|
||||||
const upsertGuildMemberCredits = await prisma.guildMemberCredits.upsert({
|
const upsertguildMemberCredit = await prisma.guildMemberCredit.upsert({
|
||||||
where: {
|
where: {
|
||||||
userId_guildId: {
|
userId_guildId: {
|
||||||
userId: user.id,
|
userId: user.id,
|
||||||
|
@ -74,8 +74,8 @@ export const execute = async (interaction: ChatInputCommandInteraction) => {
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
if (!upsertGuildMemberCredits)
|
if (!upsertguildMemberCredit)
|
||||||
throw new Error("upsertGuildMemberCredits unavailable");
|
throw new Error("upsertguildMemberCredit unavailable");
|
||||||
|
|
||||||
const upsertGuildConfigApisCpgg = await prisma.guildConfigApisCpgg.upsert({
|
const upsertGuildConfigApisCpgg = await prisma.guildConfigApisCpgg.upsert({
|
||||||
where: {
|
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);
|
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.");
|
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.");
|
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.");
|
throw new Error("You can't withdraw more than you have on your account.");
|
||||||
|
|
||||||
if (!upsertGuildConfigApisCpgg.urlIv || !upsertGuildConfigApisCpgg.urlContent)
|
if (!upsertGuildConfigApisCpgg.urlIv || !upsertGuildConfigApisCpgg.urlContent)
|
||||||
|
@ -148,15 +148,15 @@ export const execute = async (interaction: ChatInputCommandInteraction) => {
|
||||||
?.post("vouchers", {
|
?.post("vouchers", {
|
||||||
uses: 1,
|
uses: 1,
|
||||||
code,
|
code,
|
||||||
credits: optionAmount || upsertGuildMemberCredits.balance,
|
credits: optionAmount || upsertguildMemberCredit.balance,
|
||||||
memo: `${interaction?.createdTimestamp} - ${interaction?.user?.id}`,
|
memo: `${interaction?.createdTimestamp} - ${interaction?.user?.id}`,
|
||||||
})
|
})
|
||||||
?.then(async () => {
|
?.then(async () => {
|
||||||
logger?.silly(`Successfully created voucher.`);
|
logger?.silly(`Successfully created voucher.`);
|
||||||
upsertGuildMemberCredits.balance -=
|
upsertguildMemberCredit.balance -=
|
||||||
optionAmount || upsertGuildMemberCredits.balance;
|
optionAmount || upsertguildMemberCredit.balance;
|
||||||
|
|
||||||
const updateGuildMember = await prisma.guildMemberCredits.update({
|
const updateGuildMember = await prisma.guildMemberCredit.update({
|
||||||
where: {
|
where: {
|
||||||
userId_guildId: {
|
userId_guildId: {
|
||||||
userId: user.id,
|
userId: user.id,
|
||||||
|
@ -165,7 +165,7 @@ export const execute = async (interaction: ChatInputCommandInteraction) => {
|
||||||
},
|
},
|
||||||
data: {
|
data: {
|
||||||
balance: {
|
balance: {
|
||||||
decrement: optionAmount || upsertGuildMemberCredits.balance,
|
decrement: optionAmount || upsertguildMemberCredit.balance,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
@ -181,7 +181,7 @@ export const execute = async (interaction: ChatInputCommandInteraction) => {
|
||||||
.setTimestamp()
|
.setTimestamp()
|
||||||
.addFields({
|
.addFields({
|
||||||
name: "💶 Credits",
|
name: "💶 Credits",
|
||||||
value: `${optionAmount || upsertGuildMemberCredits.balance}`,
|
value: `${optionAmount || upsertguildMemberCredit.balance}`,
|
||||||
inline: true,
|
inline: true,
|
||||||
})
|
})
|
||||||
.setColor(successColor)
|
.setColor(successColor)
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
// Dependencies
|
// Dependencies
|
||||||
import { Message } from "discord.js";
|
import { Message } from "discord.js";
|
||||||
import logger from "../../middlewares/logger";
|
|
||||||
|
|
||||||
// Modules
|
// Modules
|
||||||
import counter from "./modules/counter";
|
import counter from "./modules/counter";
|
||||||
|
@ -14,17 +13,13 @@ export const options: IEventOptions = {
|
||||||
|
|
||||||
// Execute the function
|
// Execute the function
|
||||||
export const execute = async (oldMessage: Message, newMessage: Message) => {
|
export const execute = async (oldMessage: Message, newMessage: Message) => {
|
||||||
const { author, guild } = newMessage;
|
const { author } = newMessage;
|
||||||
|
|
||||||
await audits.execute(oldMessage, newMessage);
|
await audits.execute(oldMessage, newMessage);
|
||||||
|
|
||||||
logger?.silly(
|
if (author.bot) return;
|
||||||
`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`);
|
|
||||||
|
|
||||||
await counter(newMessage);
|
await counter(newMessage);
|
||||||
|
|
||||||
return true;
|
return;
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
/* eslint-disable no-loops/no-loops */
|
|
||||||
import { Client } from "discord.js";
|
import { Client } from "discord.js";
|
||||||
import checkDirectory from "../../helpers/checkDirectory";
|
import checkDirectory from "../../helpers/checkDirectory";
|
||||||
import { ICommand } from "../../interfaces/Command";
|
import { ICommand } from "../../interfaces/Command";
|
||||||
|
@ -6,8 +5,10 @@ import logger from "../../middlewares/logger";
|
||||||
|
|
||||||
// Register the commands.
|
// Register the commands.
|
||||||
export const register = async (client: Client) => {
|
export const register = async (client: Client) => {
|
||||||
await checkDirectory("commands").then(async (commandNames) => {
|
const profiler = logger.startTimer();
|
||||||
for await (const commandName of commandNames) {
|
|
||||||
|
await checkDirectory("commands").then((commandNames) => {
|
||||||
|
commandNames.forEach(async (commandName) => {
|
||||||
const commandProfiler = logger.startTimer();
|
const commandProfiler = logger.startTimer();
|
||||||
|
|
||||||
await import(`../../commands/${commandName}`)
|
await import(`../../commands/${commandName}`)
|
||||||
|
@ -30,6 +31,10 @@ export const register = async (client: Client) => {
|
||||||
level: "error",
|
level: "error",
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
return profiler.done({
|
||||||
|
message: "Successfully registered all commands!",
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
|
@ -14,14 +14,6 @@ prisma.$use(async (params, next) => {
|
||||||
`Query ${params.model}.${params.action} took ${after - before}ms`
|
`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;
|
return result;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
/* eslint-disable no-loops/no-loops */
|
|
||||||
import { Client } from "discord.js";
|
import { Client } from "discord.js";
|
||||||
import checkDirectory from "../../helpers/checkDirectory";
|
import checkDirectory from "../../helpers/checkDirectory";
|
||||||
import { IEvent } from "../../interfaces/Event";
|
import { IEvent } from "../../interfaces/Event";
|
||||||
|
@ -8,10 +7,7 @@ import logger from "../../middlewares/logger";
|
||||||
export const register = async (client: Client) => {
|
export const register = async (client: Client) => {
|
||||||
const profiler = logger.startTimer();
|
const profiler = logger.startTimer();
|
||||||
|
|
||||||
await checkDirectory("events").then(async (eventNames) => {
|
await checkDirectory("events").then((eventNames) => {
|
||||||
const totalEvents = eventNames.length;
|
|
||||||
let loadedEvents = 0;
|
|
||||||
|
|
||||||
// Import an event.
|
// Import an event.
|
||||||
const importEvent = async (name: string) => {
|
const importEvent = async (name: string) => {
|
||||||
await import(`../../events/${name}`).then((event: IEvent) => {
|
await import(`../../events/${name}`).then((event: IEvent) => {
|
||||||
|
@ -37,20 +33,17 @@ export const register = async (client: Client) => {
|
||||||
type: event.options.type,
|
type: event.options.type,
|
||||||
message: `Listening to event '${name}'`,
|
message: `Listening to event '${name}'`,
|
||||||
});
|
});
|
||||||
return loadedEvents++;
|
|
||||||
|
return event;
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
for await (const eventName of eventNames) {
|
eventNames.forEach(async (eventName) => {
|
||||||
await importEvent(eventName);
|
await importEvent(eventName);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
if (loadedEvents === totalEvents) {
|
return profiler.done({
|
||||||
return profiler.done({
|
message: "Successfully listening to all events!",
|
||||||
message: "Successfully listening to all events!",
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
|
@ -6,25 +6,45 @@ import logger from "../../middlewares/logger";
|
||||||
|
|
||||||
// Start all jobs that are in the schedules directory
|
// Start all jobs that are in the schedules directory
|
||||||
export const start = async (client: Client) => {
|
export const start = async (client: Client) => {
|
||||||
const jobNames = await checkDirectory("schedules");
|
const profiler = logger.startTimer();
|
||||||
if (!jobNames) return logger.warn("⏰ No available jobs found");
|
|
||||||
|
|
||||||
return await Promise.all(
|
await checkDirectory("schedules").then((jobNames) => {
|
||||||
jobNames.map(async (jobName) => {
|
jobNames.forEach(async (jobName) => {
|
||||||
await import(`../../schedules/${jobName}`)
|
await import(`../../schedules/${jobName}`)
|
||||||
.then((job: IJob) => {
|
.then((job: IJob) => {
|
||||||
return schedule.scheduleJob(job.options.schedule, async () => {
|
schedule.scheduleJob(job.options.schedule, async () => {
|
||||||
logger.verbose(`⏰ Performed the job "${jobName}"`);
|
const jobProfiler = logger.startTimer();
|
||||||
await job.execute(client);
|
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) => {
|
.catch((error) => {
|
||||||
logger.warn({
|
logger.warn({
|
||||||
jobName,
|
jobName,
|
||||||
message: `Failed to start job ${jobName}`,
|
message: `Failed to schedule job ${jobName}`,
|
||||||
error,
|
error,
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
})
|
});
|
||||||
);
|
});
|
||||||
|
|
||||||
|
return profiler.done({
|
||||||
|
message: "Successfully scheduled all jobs!",
|
||||||
|
});
|
||||||
};
|
};
|
||||||
|
|
|
@ -8,7 +8,7 @@ export default async (guild: Guild, user: User, amount: number) => {
|
||||||
transactionRules(guild, user, amount);
|
transactionRules(guild, user, amount);
|
||||||
|
|
||||||
// 2. Make the transaction.
|
// 2. Make the transaction.
|
||||||
const recipient = await tx.guildMemberCredits.upsert({
|
const recipient = await tx.guildMemberCredit.upsert({
|
||||||
update: {
|
update: {
|
||||||
balance: {
|
balance: {
|
||||||
increment: amount,
|
increment: amount,
|
||||||
|
|
|
@ -8,7 +8,7 @@ export default async (guild: Guild, user: User, amount: number) => {
|
||||||
transactionRules(guild, user, amount);
|
transactionRules(guild, user, amount);
|
||||||
|
|
||||||
// 2. Make the transaction.
|
// 2. Make the transaction.
|
||||||
const recipient = await tx.guildMemberCredits.upsert({
|
const recipient = await tx.guildMemberCredit.upsert({
|
||||||
update: {
|
update: {
|
||||||
balance: amount,
|
balance: amount,
|
||||||
},
|
},
|
||||||
|
|
|
@ -8,7 +8,7 @@ export default async (guild: Guild, user: User, amount: number) => {
|
||||||
transactionRules(guild, user, amount);
|
transactionRules(guild, user, amount);
|
||||||
|
|
||||||
// 2. Make the transaction.
|
// 2. Make the transaction.
|
||||||
const recipient = await tx.guildMemberCredits.upsert({
|
const recipient = await tx.guildMemberCredit.upsert({
|
||||||
update: {
|
update: {
|
||||||
balance: {
|
balance: {
|
||||||
decrement: amount,
|
decrement: amount,
|
||||||
|
|
|
@ -5,7 +5,7 @@ import transactionRules from "./transactionRules";
|
||||||
export default async (guild: Guild, from: User, to: User, amount: number) => {
|
export default async (guild: Guild, from: User, to: User, amount: number) => {
|
||||||
return await prisma.$transaction(async (tx) => {
|
return await prisma.$transaction(async (tx) => {
|
||||||
// 1. Decrement amount from the sender.
|
// 1. Decrement amount from the sender.
|
||||||
const sender = await tx.guildMemberCredits.upsert({
|
const sender = await tx.guildMemberCredit.upsert({
|
||||||
update: {
|
update: {
|
||||||
balance: {
|
balance: {
|
||||||
decrement: amount,
|
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.");
|
if (from.id === to.id) throw new Error("You can't transfer to yourself.");
|
||||||
|
|
||||||
// 7. Increment the recipient's balance by amount.
|
// 7. Increment the recipient's balance by amount.
|
||||||
const recipient = await tx.guildMemberCredits.upsert({
|
const recipient = await tx.guildMemberCredit.upsert({
|
||||||
update: {
|
update: {
|
||||||
balance: {
|
balance: {
|
||||||
increment: amount,
|
increment: amount,
|
||||||
|
|
|
@ -79,7 +79,7 @@ export default async (
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
setTimeout(async () => {
|
return setTimeout(async () => {
|
||||||
await prisma.cooldown.delete({
|
await prisma.cooldown.delete({
|
||||||
where: {
|
where: {
|
||||||
guildId_userId_timeoutId: {
|
guildId_userId_timeoutId: {
|
||||||
|
|
|
@ -34,7 +34,7 @@ export const execute = async (client: Client, role: GuildShopRoles) => {
|
||||||
if (!getGuildConfigShopRoles)
|
if (!getGuildConfigShopRoles)
|
||||||
throw new Error("Could not find guild config shop roles.");
|
throw new Error("Could not find guild config shop roles.");
|
||||||
|
|
||||||
const getGuildMemberCredits = await prisma.guildMemberCredits.findUnique({
|
const getguildMemberCredit = await prisma.guildMemberCredit.findUnique({
|
||||||
where: {
|
where: {
|
||||||
userId_guildId: {
|
userId_guildId: {
|
||||||
userId,
|
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;
|
const pricePerHour = getGuildConfigShopRoles.pricePerHour;
|
||||||
|
|
||||||
if (getGuildMemberCredits.balance < pricePerHour) {
|
if (getguildMemberCredit.balance < pricePerHour) {
|
||||||
await rMember.roles
|
await rMember.roles
|
||||||
.remove(roleId)
|
.remove(roleId)
|
||||||
.then(async () => {
|
.then(async () => {
|
||||||
|
@ -79,7 +79,7 @@ export const execute = async (client: Client, role: GuildShopRoles) => {
|
||||||
throw new Error("User does not have enough credits.");
|
throw new Error("User does not have enough credits.");
|
||||||
}
|
}
|
||||||
|
|
||||||
const createGuildMember = await prisma.guildMemberCredits.upsert({
|
const createGuildMember = await prisma.guildMemberCredit.upsert({
|
||||||
where: {
|
where: {
|
||||||
userId_guildId: {
|
userId_guildId: {
|
||||||
userId,
|
userId,
|
||||||
|
|
Loading…
Add table
Reference in a new issue