diff --git a/src/commands/nucleus/suggest.ts b/src/commands/nucleus/suggest.ts
index e31696b..de0e69b 100644
--- a/src/commands/nucleus/suggest.ts
+++ b/src/commands/nucleus/suggest.ts
@@ -1,4 +1,4 @@
-import { LoadingEmbed } from './../../utils/defaultEmbeds.js';
+import { LoadingEmbed } from '../../utils/defaults.js';
 import { ButtonStyle, CommandInteraction } from "discord.js";
 import Discord from "discord.js";
 import type { SlashCommandSubcommandBuilder } from "@discordjs/builders";
@@ -29,56 +29,44 @@
         )
         .setColor("Danger")
         .setInverted(true)
+        .setFailedMessage("Your suggestion was deleted", "Success", "ICONS.ADD")
         .send(true);
-    if (confirmation.cancelled) return;
-    if (confirmation.success) {
-        await (client.channels.cache.get("955161206459600976") as Discord.TextChannel).send({
-            embeds: [
-                new EmojiEmbed()
-                    .setTitle("Suggestion")
-                    .setDescription(
-                        `**From:** ${renderUser(interaction.member!.user as Discord.User)}\n**Suggestion:**\n> ${suggestion}\n\n` +
-                        `**Server:** ${interaction.guild!.name} (${interaction.guild!.id})\n`,
-                    )
-                    .setStatus("Warning")
-            ], components: [new Discord.ActionRowBuilder<Discord.ButtonBuilder>().addComponents(
-                new Discord.ButtonBuilder()
-                    .setCustomId("suggestionAccept")
-                    .setLabel("Accept")
-                    .setStyle(ButtonStyle.Secondary)
-                    .setEmoji(getEmojiByName("ICONS.ADD", "id")),
-                new Discord.ButtonBuilder()
-                    .setCustomId("suggestionDeny")
-                    .setLabel("Delete")
-                    .setStyle(ButtonStyle.Secondary)
-                    .setEmoji(getEmojiByName("ICONS.REMOVE", "id"))
-            )]
-        });
-        await interaction.editReply({
-            embeds: [
-                new EmojiEmbed()
-                    .setEmoji("ICONS.ADD")
-                    .setTitle("Suggest")
-                    .setDescription("Your suggestion was sent successfully")
-                    .setStatus("Success")
-            ],
-            components: []
-        });
-    } else {
-        await interaction.editReply({
-            embeds: [
-                new EmojiEmbed()
-                    .setEmoji("ICONS.OPP.ADD")
-                    .setTitle("Suggest")
-                    .setDescription("No changes were made")
-                    .setStatus("Danger")
-            ],
-            components: []
-        });
-    }
+    if (confirmation.cancelled || !confirmation.success) return;
+    await (client.channels.cache.get("955161206459600976") as Discord.TextChannel).send({
+        embeds: [
+            new EmojiEmbed()
+                .setTitle("Suggestion")
+                .setDescription(
+                    `**From:** ${renderUser(interaction.member!.user as Discord.User)}\n**Suggestion:**\n> ${suggestion}\n\n` +
+                    `**Server:** ${interaction.guild!.name} (${interaction.guild!.id})\n`,
+                )
+                .setStatus("Warning")
+        ], components: [new Discord.ActionRowBuilder<Discord.ButtonBuilder>().addComponents(
+            new Discord.ButtonBuilder()
+                .setCustomId("suggestionAccept")
+                .setLabel("Accept")
+                .setStyle(ButtonStyle.Secondary)
+                .setEmoji(getEmojiByName("ICONS.ADD", "id")),
+            new Discord.ButtonBuilder()
+                .setCustomId("suggestionDeny")
+                .setLabel("Delete")
+                .setStyle(ButtonStyle.Secondary)
+                .setEmoji(getEmojiByName("ICONS.REMOVE", "id"))
+        )]
+    });
+    await interaction.editReply({
+        embeds: [
+            new EmojiEmbed()
+                .setEmoji("ICONS.ADD")
+                .setTitle("Suggest")
+                .setDescription("Your suggestion was sent successfully")
+                .setStatus("Success")
+        ],
+        components: []
+    });
 };
 
-const check = (_interaction: CommandInteraction) => {
+const check = () => {
     return true;
 };
 
