🧑‍💻 seperated /config embeds

This commit is contained in:
Axel Olausson Holtenäs 2022-05-28 14:43:28 +02:00
parent e3e054122e
commit efd7f24598
No known key found for this signature in database
GPG key ID: 7BF6826B76382CBA
3 changed files with 142 additions and 129 deletions

View file

@ -1,129 +0,0 @@
// Dependencies
import { ColorResolvable, CommandInteraction, Permissions } from "discord.js";
//Handlers
import logger from "@logger";
// Models
import guildSchema from "@schemas/guild";
import { SlashCommandSubcommandBuilder } from "@discordjs/builders";
import getEmbedConfig from "@helpers/getEmbedConfig";
// Function
export default {
metadata: {
guildOnly: true,
ephemeral: true,
permissions: [Permissions.FLAGS.MANAGE_GUILD],
},
builder: (command: SlashCommandSubcommandBuilder) => {
return command
.setName("embeds")
.setDescription(`Embeds`)
.addStringOption((option) =>
option
.setName("success-color")
.setDescription("No provided description")
)
.addStringOption((option) =>
option.setName("wait-color").setDescription("No provided description")
)
.addStringOption((option) =>
option.setName("error-color").setDescription("No provided description")
)
.addStringOption((option) =>
option.setName("footer-icon").setDescription("No provided description")
)
.addStringOption((option) =>
option.setName("footer-text").setDescription("No provided description")
);
},
execute: async (interaction: CommandInteraction) => {
// Destructure member
const { guild, options } = interaction;
if (guild == null) return;
const embedConfig = await getEmbedConfig(guild);
if (embedConfig == null) return;
logger.info(embedConfig);
// Get options
const successColor = options?.getString("success-color") as ColorResolvable;
const waitColor = options?.getString("wait-color") as ColorResolvable;
const errorColor = options?.getString("error-color") as ColorResolvable;
const footerIcon = options?.getString("footer-icon");
const footerText = options?.getString("footer-text");
// Get guild object
const guildDB = await guildSchema?.findOne({
guildId: guild?.id,
});
if (guildDB === null) {
return logger?.silly(`Guild is null`);
}
// Modify values
guildDB.embeds.successColor =
successColor !== null ? successColor : guildDB?.embeds?.successColor;
guildDB.embeds.waitColor =
waitColor !== null ? waitColor : guildDB?.embeds?.waitColor;
guildDB.embeds.errorColor =
errorColor !== null ? errorColor : guildDB?.embeds?.errorColor;
guildDB.embeds.footerIcon =
footerIcon !== null ? footerIcon : guildDB?.embeds?.footerIcon;
guildDB.embeds.footerText =
footerText !== null ? footerText : guildDB?.embeds?.footerText;
// Save guild
await guildDB?.save()?.then(async () => {
logger?.silly(`Guild saved`);
return interaction?.editReply({
embeds: [
{
title: ":tools: Settings - Guild [Credits]",
description: `Credits settings updated.`,
color: successColor || embedConfig.successColor,
fields: [
{
name: "🤖 Success Color",
value: `${guildDB?.embeds?.successColor}`,
inline: true,
},
{
name: "📈 Wait Color",
value: `${guildDB?.embeds?.waitColor}`,
inline: true,
},
{
name: "📈 Error Color",
value: `${guildDB?.embeds?.errorColor}`,
inline: true,
},
{
name: "🔨 Footer Icon",
value: `${guildDB?.embeds?.footerIcon}`,
inline: true,
},
{
name: "⏰ Footer Text",
value: `${guildDB?.embeds?.footerText}`,
inline: true,
},
],
timestamp: new Date(),
footer: {
iconURL: footerIcon || embedConfig.footerIcon,
text: footerText || embedConfig.footerText,
},
},
],
});
});
},
};

View file

@ -0,0 +1,38 @@
import { ColorResolvable, CommandInteraction } from "discord.js";
import guildSchema from "@schemas/guild";
import getEmbedConfig from "@root/helpers/getEmbedConfig";
export default async (interaction: CommandInteraction) => {
const { options, guild } = interaction;
if (!guild) throw new Error("Guild not found");
const embedConfig = await getEmbedConfig(guild);
if (!embedConfig) throw new Error("Embed config not found");
// Get new values
const newSuccessColor = options.getString("success-color") as ColorResolvable;
const newWaitColor = options.getString("wait-color") as ColorResolvable;
const newErrorColor = options.getString("error-color") as ColorResolvable;
const newFooterIcon = options.getString("footer-icon");
const newFooterText = options.getString("footer-text");
// Get guild values
const guildData = await guildSchema.findOne({
guildId: guild.id,
});
if (!guildData) throw new Error("Guild data not found");
if (!guildData?.embeds)
throw new Error("Guild embed configuration not found");
let { successColor, waitColor, errorColor, footerText, footerIcon } =
guildData.embeds;
// Set new values
successColor = newSuccessColor || successColor;
waitColor = newWaitColor || waitColor;
errorColor = newErrorColor || errorColor;
footerIcon = newFooterIcon || footerIcon;
footerText = newFooterText || footerText;
return { successColor, waitColor, errorColor, footerText, footerIcon };
};

View file

@ -0,0 +1,104 @@
// Dependencies
import {
ColorResolvable,
CommandInteraction,
MessageEmbed,
Permissions,
} from "discord.js";
//Handlers
import logger from "@logger";
// Models
import guildSchema from "@schemas/guild";
import { SlashCommandSubcommandBuilder } from "@discordjs/builders";
import getEmbedConfig from "@helpers/getEmbedConfig";
import getValues from "./components/getValues";
// Function
export default {
metadata: {
guildOnly: true,
ephemeral: true,
permissions: [Permissions.FLAGS.MANAGE_GUILD],
},
builder: (command: SlashCommandSubcommandBuilder) => {
return command
.setName("embeds")
.setDescription(`Embeds`)
.addStringOption((option) =>
option
.setName("success-color")
.setDescription("No provided description")
)
.addStringOption((option) =>
option.setName("wait-color").setDescription("No provided description")
)
.addStringOption((option) =>
option.setName("error-color").setDescription("No provided description")
)
.addStringOption((option) =>
option.setName("footer-icon").setDescription("No provided description")
)
.addStringOption((option) =>
option.setName("footer-text").setDescription("No provided description")
);
},
execute: async (interaction: CommandInteraction) => {
const { guild } = interaction;
if (!guild) throw new Error("Guild not found");
const { successColor, waitColor, errorColor, footerText, footerIcon } =
await getValues(interaction);
// Initialize embed object
const embed = new MessageEmbed()
.setTitle("[:tools:] Embeds")
.setFooter({ text: footerText, iconURL: footerIcon })
.setTimestamp(new Date());
// Get guild values
const guildData = await guildSchema.findOne({
guildId: guild.id,
});
if (!guildData) throw new Error("Guild data not found");
await guildData.save().then(async () => {
embed
.setDescription("Following embed configuration will be used.")
.setColor(successColor)
.addFields([
{
name: "🟢 Success Color",
value: `${successColor}`,
inline: true,
},
{
name: "🟡 Wait Color",
value: `${waitColor}`,
inline: true,
},
{
name: "🔴 Error Color",
value: `${errorColor}`,
inline: true,
},
{
name: "🖼️ Footer Icon",
value: `${footerIcon}`,
inline: true,
},
{
name: "📄 Footer Text",
value: `${footerText}`,
inline: true,
},
]);
return interaction.editReply({
embeds: [embed],
});
});
},
};