xyter/src/commands/settings/guild/addons/points.ts
2022-04-13 02:53:09 +02:00

83 lines
2.4 KiB
TypeScript

// Dependencies
import { ColorResolvable, CommandInteraction } from "discord.js";
// Configurations
import config from "../../../../../config.json";
// Handlers
import logger from "../../../../logger";
// Models
import guildSchema from "../../../../database/schemas/guild";
// Function
export default async (interaction: CommandInteraction) => {
// Destructure member
const { options, guild, user } = interaction;
// Get options
const status = options?.getBoolean("status");
const rate = options?.getNumber("rate");
const timeout = options?.getNumber("timeout");
const minimumLength = options?.getNumber("minimum-length");
// Get guild object
const guildDB = await guildSchema?.findOne({
guildId: guild?.id,
});
if (guildDB === null) return;
// Modify values
guildDB.points.status = status !== null ? status : guildDB?.points?.status;
guildDB.points.rate = rate !== null ? rate : guildDB?.points?.rate;
guildDB.points.timeout =
timeout !== null ? timeout : guildDB?.points?.timeout;
guildDB.points.minimumLength =
minimumLength !== null ? minimumLength : guildDB?.points?.minimumLength;
// Save guild
await guildDB?.save()?.then(async () => {
// Create embed object
const embed = {
title: ":hammer: Settings - Guild [Points]" as string,
description: "Following settings is set!" as string,
color: config.colors.success as ColorResolvable,
fields: [
{
name: "🤖 Status" as string,
value: `${guildDB?.points?.status}` as string,
inline: true,
},
{
name: "📈 Rate" as string,
value: `${guildDB?.points?.rate}` as string,
inline: true,
},
{
name: "🔨 Minimum Length" as string,
value: `${guildDB?.points?.minimumLength}` as string,
inline: true,
},
{
name: "⏰ Timeout" as string,
value: `${guildDB?.points?.timeout}` as string,
inline: true,
},
],
timestamp: new Date(),
footer: {
iconURL: config?.footer?.icon as string,
text: config?.footer?.text as string,
},
};
// Send debug message
logger?.debug(
`Guild: ${guild?.id} User: ${user?.id} has changed credit details.`
);
// Return interaction reply
return interaction?.editReply({ embeds: [embed] });
});
};