diff --git a/src/commands/mod/mute.ts b/src/commands/mod/mute.ts
index 2942844..3c4544e 100644
--- a/src/commands/mod/mute.ts
+++ b/src/commands/mod/mute.ts
@@ -227,7 +227,7 @@
     // Check if Nucleus has permission to mute
     if (! interaction.guild.me.permissions.has("MODERATE_MEMBERS")) throw "I do not have the `moderate_members` permission";
     // Do not allow the user to have admin or be the owner
-    if (apply.permissions.has("ADMINISTRATOR") || apply.id == interaction.guild.ownerId) throw "You cannot mute an admin or the owner"
+    if ((interaction.options.getMember("user") as GuildMember).permissions.has("ADMINISTRATOR") || (interaction.options.getMember("user") as GuildMember).id == interaction.guild.ownerId) throw "You cannot mute an admin or the owner"
     // Do not allow muting Nucleus
     if (member.id == interaction.guild.me.id) throw "I cannot mute myself"
     // Allow the owner to mute anyone
diff --git a/src/commands/mod/slowmode.ts b/src/commands/mod/slowmode.ts
index b91f065..8bec805 100644
--- a/src/commands/mod/slowmode.ts
+++ b/src/commands/mod/slowmode.ts
@@ -1,57 +1,53 @@
-import humanizeDuration from 'humanize-duration';
-import { CommandInteraction, GuildMember, TextChannel } from "discord.js";
+import { CommandInteraction } from "discord.js";
 import { SlashCommandSubcommandBuilder } from "@discordjs/builders";
 import { WrappedCheck } from "jshaiku";
-import keyValueList from "../../utils/generateKeyValueList.js";
-import confirmationMessage from "../../utils/confirmationMessage.js";
-import generateEmojiEmbed from "../../utils/generateEmojiEmbed.js";
+import humanizeDuration from 'humanize-duration';
 
 const command = (builder: SlashCommandSubcommandBuilder) =>
     builder
     .setName("slowmode")
     .setDescription("Manages slowmode in a channel")
-    .addStringOption(option => option.setName("time").setDescription("The delay between messages").setRequired(false).addChoices([
-        ["Off", "0"],
-        ["5 seconds", "5"], ["10 seconds", "10"], ["15 seconds", "15"], ["30 seconds", "30"],
-        ["1 minute", "60"], ["2 minutes", "120"], ["5 minutes", "300"], ["10 minutes", "600"],
-        ["15 minutes", "900"], ["30 minutes", "1800"],
-        ["1 hour", "3600"], ["2 hours", "7200"], ["6 hours", "21600"]
-    ]))
+    .addIntegerOption(option => option.setName("seconds").setDescription("The seconds between messages").setRequired(false))
+    .addIntegerOption(option => option.setName("minutes").setDescription("The minutes between messages").setRequired(false))
+    .addIntegerOption(option => option.setName("hours").setDescription("The hours between messages").setRequired(false))
 
-const callback = async (interaction: CommandInteraction) => {
-    let time = parseInt(interaction.options.getString("time") ?? "0");
-    if (time === 0 && (interaction.channel as TextChannel).rateLimitPerUser === 0) { time = 10 }
+const callback = (interaction: CommandInteraction) => {
+    let seconds = interaction.option.getInteger("seconds")
+    let minutes = interaction.option.getInteger("minutes")
+    let hours = interaction.option.getInteger("hours")
+    let totalTime = seconds + (minutes * 60) + (hours * 60 * 60)
+
     let confirmation = await new confirmationMessage(interaction)
-        .setEmoji("CHANNEL.SLOWMODE.RED")
+        .setEmoji("PUNISH.SLOWMODE.RED")
         .setTitle("Slowmode")
         .setDescription(keyValueList({
-            "time": time ? humanizeDuration(time * 1000, { round: true }) : "No delay",
+            "delay": `${totalTime ? humanizeDuration(totalTime * 1000) : "*No delay*"}`
         })
-        + `Are you sure you want to set the slowmode in this channel?`)
+        + `Are you sure you want to enable slowmode in this channel?`)
         .setColor("Danger")
 //        pluralize("day", interaction.options.getInteger("delete"))
 //        const pluralize = (word: string, count: number) => { return count === 1 ? word : word + "s" }
     .send()
     if (confirmation.success) {
         try {
-            (interaction.channel as TextChannel).setRateLimitPerUser(time)
-        } catch (e) {
-            await interaction.editReply({embeds: [new generateEmojiEmbed()
-                .setEmoji("CHANNEL.SLOWMODE.RED")
+            await interaction.setRateLimitPerUser(totalTime, "Nucleus slowmode")
+        } catch {
+            return await interaction.editReply({embeds: [new generateEmojiEmbed()
+                .setEmoji("PUNISH.SLOWMODE.RED")
                 .setTitle(`Slowmode`)
-                .setDescription("An error occurred while setting the slowmode")
+                .setDescription("Something went wrong and the slowmode could not be set.")
                 .setStatus("Danger")
             ], components: []})
         }
         await interaction.editReply({embeds: [new generateEmojiEmbed()
-            .setEmoji(`CHANNEL.SLOWMODE.GREEN`)
+            .setEmoji("PUNISH.NICKNAME.GREEN")
             .setTitle(`Slowmode`)
             .setDescription("The channel slowmode was set successfully")
             .setStatus("Success")
         ], components: []})
     } else {
         await interaction.editReply({embeds: [new generateEmojiEmbed()
-            .setEmoji("CHANNEL.SLOWMODE.GREEN")
+            .setEmoji("PUNISH.SLOWMODE.GREEN")
             .setTitle(`Slowmode`)
             .setDescription("No changes were made")
             .setStatus("Success")
@@ -61,9 +57,12 @@
 
 const check = (interaction: CommandInteraction, defaultCheck: WrappedCheck) => {
     let member = (interaction.member as GuildMember)
-    // Check if Nucleus can set the slowmode
-    if (! interaction.guild.me.permissions.has("MANAGE_CHANNELS")) throw "I do not have the `manage_channels` permission";
-    // Check if the user has manage_channel permission
+    let me = (interaction.guild.me as GuildMember)
+    // Check if Nucleus can edit the channel
+    if (! interaction.guild.me.permission.has("MANAGE_CHANNELS")) throw "I do not have permission to edit this channel"
+    // Allow the owner to set any channel
+    if (member.id == interaction.guild.ownerId) return true
+    // Check if the user has manage_channels permission
     if (! member.permissions.has("MANAGE_CHANNELS")) throw "You do not have the `manage_channels` permission";
     // Allow slowmode
     return true
diff --git a/src/commands/mod/unban.ts b/src/commands/mod/unban.ts
index 26815eb..8ea3ec1 100644
--- a/src/commands/mod/unban.ts
+++ b/src/commands/mod/unban.ts
@@ -88,6 +88,7 @@
 
 const check = (interaction: CommandInteraction, defaultCheck: WrappedCheck) => {
     let member = (interaction.member as GuildMember)
+    let me = (interaction.guild.me as GuildMember)
     // Check if Nucleus can unban members
     if (! interaction.guild.me.permissions.has("BAN_MEMBERS")) throw "I do not have the `ban_members` permission";
     // Allow the owner to unban anyone
diff --git a/src/commands/mod/unmute.ts b/src/commands/mod/unmute.ts
index 2d630ea..163c059 100644
--- a/src/commands/mod/unmute.ts
+++ b/src/commands/mod/unmute.ts
@@ -89,7 +89,7 @@
     // Check if Nucleus has permission to unmute
     if (! interaction.guild.me.permissions.has("MODERATE_MEMBERS")) throw "I do not have the `moderate_members` permission";
     // Do not allow the user to have admin or be the owner
-    if (apply.permissions.has("ADMINISTRATOR") || (interaction.options.getMember("user") as GuildMember).id == interaction.guild.ownerId) throw "You cannot unmute an admin or the owner"
+    if ((interaction.options.getMember("user") as GuildMember).permissions.has("ADMINISTRATOR") || (interaction.options.getMember("user") as GuildMember).id == interaction.guild.ownerId) throw "You cannot unmute an admin or the owner"
     // Allow the owner to unmute anyone
     if (member.id == interaction.guild.ownerId) return true
     // Check if the user has moderate_members permission
diff --git a/src/commands/mod/unnamed.ts b/src/commands/mod/unnamed.ts
index c2d5618..4c6a31e 100644
--- a/src/commands/mod/unnamed.ts
+++ b/src/commands/mod/unnamed.ts
@@ -217,7 +217,7 @@
     // Check if Nucleus has permission to UNNAMED
     if (! interaction.guild.me.permissions.has("MANAGE_ROLES")) throw "I do not have the `manage_roles` permission";
     // Do not allow the user to have admin or be the owner
-    if (apply.permissions.has("ADMINISTRATOR") || (interaction.options.getMember("user") as GuildMember).id == interaction.guild.ownerId) throw "You cannot mute an admin or the owner"
+    if ((interaction.options.getMember("user") as GuildMember).permissions.has("ADMINISTRATOR") || (interaction.options.getMember("user") as GuildMember).id == interaction.guild.ownerId) throw "You cannot mute an admin or the owner"
     // Do not allow muting Nucleus
     if (member.id == interaction.guild.me.id) throw "I cannot UNNAMED myself"
     // Allow the owner to UNNAMED anyone
diff --git a/src/commands/nucleus/suggest.ts b/src/commands/nucleus/suggest.ts
index 0512020..d1d6a03 100644
--- a/src/commands/nucleus/suggest.ts
+++ b/src/commands/nucleus/suggest.ts
@@ -20,6 +20,7 @@
         .setDescription(`**Suggestion:**\n> ${suggestion}\n`
         + `Your username and ID will also be sent with your suggestion.\n\nAre you sure you want to send this suggestion?`)
         .setColor("Danger")
+        .setInverted(true)
     .send()
     if (confirmation.success) {
         await (interaction.client.channels.cache.get('955161206459600976') as Discord.TextChannel).send({
diff --git a/src/commands/user/track.ts b/src/commands/user/track.ts
index ebbef82..be32f41 100644
--- a/src/commands/user/track.ts
+++ b/src/commands/user/track.ts
@@ -162,10 +162,11 @@
 }
 
 const check = (interaction: CommandInteraction, defaultCheck: WrappedCheck) => {
+    let member = (interaction.member as GuildMember)
     // Allow the owner to promote anyone
-    if ((interaction.member as GuildMember).id == interaction.guild.ownerId) return true
+    if (member.id == interaction.guild.ownerId) return true
     // Check if the user has manage_roles permission
-    if (! (interaction.member as GuildMember).permissions.has("MANAGE_ROLES")) throw "You do not have the `manage_roles` permission";
+    if (! member.permissions.has("MANAGE_ROLES")) throw "You do not have the `manage_roles` permission";
     // Allow track
     return true // TODO: allow if the member has manage perms
 }
diff --git a/src/config/emojis.json b/src/config/emojis.json
new file mode 100644
index 0000000..12741f2
--- /dev/null
+++ b/src/config/emojis.json
@@ -0,0 +1,352 @@
+{
+    "NUCLEUS": {
+        "LOGO": "953040840945721385",
+        "LOADING": "a946346549271732234",
+        "INFO": {
+            "HELP": "751751467014029322",
+            "ABOUT": "751762088346517504",
+            "COMMANDS": "751762088229339136",
+            "SUPPORT": "751762087780286495"
+        },
+        "COMMANDS": {
+            "RAID": "777143043711172608",
+            "LOCK": "776848800995868682",
+            "IGNORE": "777520659270074389"
+        }
+    },
+    "ICONS": {
+        "ADD": "826823514904330251",
+        "REMOVE": "826823515268186152",
+        "OPP": {
+            "ADD": "837355918831124500",
+            "REMOVE": "837355918420869162"
+        },
+        "CHANNEL": {
+            "TEXT": "752971441351426089",
+            "VOICE": "752971441586307091",
+            "STORE": "853668786925469706",
+            "ANNOUNCEMENT": "853668786493063169",
+            "STAGE": "853668786842763294"
+        }
+    },
+    "CONTROL": {
+        "TICK": "947441964234702849",
+        "CROSS": "947441948543815720",
+        "BLOCKCROSS": "952261738349330493",
+        "LEFT": "947441951148486728",
+        "RIGHT": "947441957473488916",
+        "UP": "963409197293273108",
+        "DOWN": "963409199549796352",
+        "DOWNLOAD": "947959513032585236",
+        "TICKET": "973253514488860683",
+        "PILL": {
+            "TICK": "753314339082993832",
+            "CROSS": "753314339389309100"
+        }
+    },
+    "STATUS": {
+        "ONLINE": "729064530084102166",
+        "IDLE": "729064531577536582",
+        "DND": "729064531057311886",
+        "STREAMING": "729764055082074153",
+        "OFFLINE": "729064531271221289"
+    },
+    "CHANNEL": {
+        "TEXT": {
+            "CREATE": "729066924943737033",
+            "EDIT": "951957316117360640",
+            "DELETE": "729064529211686922"
+        },
+        "VOICE": {
+            "CREATE": "729064530830950530",
+            "EDIT": "951957316071223336",
+            "DELETE": "729064530981683200"
+        },
+        "STORE": {
+            "CREATE": "729064530709315715",
+            "DELETE": "729064530768035922"
+        },
+        "CATEGORY": {
+            "CREATE": "787987508465238026",
+            "EDIT": "787987508565770300",
+            "DELETE": "787987508507967488"
+        },
+        "PURGE": {
+            "RED": "729064530797133875",
+            "GREEN": "947443645391441940"
+        },
+        "TITLEUPDATE": "729763053620691044",
+        "TOPICUPDATE": "729763053477953536",
+        "SLOWMODE": {
+            "ON": "777138171301068831",
+            "OFF": "777138171447869480",
+            "//TODO": "// TODO"
+        },
+        "NSFW": {
+            "ON": "729064531208175736",
+            "OFF": "729381430991388752"
+        }
+    },
+    "MEMBER": {
+        "JOIN": "729066519337762878",
+        "LEAVE": "729064531170558575",
+        "BOT": {
+            "JOIN": "729064528666689587",
+            "LEAVE": "729064528998039633"
+        },
+        "KICK": "729263536785850458",
+        "BAN": "729263536643112991",
+        "UNBAN": "729263536840114216"
+    },
+    "INVITE": {
+        "CREATE": "729064529274601482",
+        "DELETE": "729064531103580230"
+    },
+    "WEBHOOK": {
+        "CREATE": "752070251906203679",
+        "UPDATE": "752073772823216191",
+        "DELETE": "752070251948146768"
+    },
+    "MESSAGE": {
+        "EDIT": "729065958584614925",
+        "DELETE": "729064530432360461",
+        "PIN": "729064530755190894",
+        "REACTION": {
+            "ADD": "",
+            "REMOVE": "",
+            "CLEAR": "729064531468353606"
+        },
+        "PING": {
+            "MASS": "729620608408879124",
+            "EVERYONE": "729064531073957909",
+            "ROLE": "729263536915742770"
+        }
+    },
+    "PUNISH": {
+        "WARN": {
+            "RED": "947433493384806430",
+            "GREEN": "947433504076091424",
+            "YELLOW": "729764054897524768"
+        },
+        "KICK": {
+            "RED": "729764053794422896",
+            "GREEN": "947428786692042764",
+            "YELLOW": "947429333289562132"
+        },
+        "BAN": {
+            "RED": "729764053861400637",
+            "GREEN": "947421674364629022",
+            "YELLOW": "729764053941223476"
+        },
+        "UNBAN": {
+            "GREEN": "729263536840114216",
+            "YELLOW": "972511620343414794",
+            "RED": "972511610885255259"
+        },
+        "MUTE": {
+            "RED": "947555098974883910",
+            "GREEN": "947555107980066866",
+            "YELLOW": "729764053865463840"
+        },
+        "SOFTBAN": "729764053941223476",
+        "VOICEMUTE": "729764054855450697",
+        "CLEARHISTORY": "729764062270980096",
+        "NICKNAME": {
+            "RED": "959762533101731980",
+            "YELLOW": "729064531019694090",
+            "GREEN": "959762533072392202"
+        }
+    },
+    "BADGES": {
+        "NUCLEUSDEVELOPER": "957722888360853595",
+        "CLICKSDEVELOPER": "957722888314683462",
+        "HOUSE_BRAVERY": "775783765930016789",
+        "HOUSE_BRILLIANCE": "775783766152577095",
+        "HOUSE_BALANCE": "775783766303440937",
+        "HYPESQUAD_EVENTS": "775783766194126908",
+        "EARLY_SUPPORTER": "775783766055452693",
+        "BUGHUNTER_LEVEL_1": "775783766252847154",
+        "BUGHUNTER_LEVEL_2": "775783766130950234",
+        "PARTNERED_SERVER_OWNER": "775783766178005033",
+        "DISCORD_EMPLOYEE": "775783766383788082",
+        "EARLY_VERIFIED_BOT_DEVELOPER": "775783766425600060",
+        "BOT": "776375959108190239",
+        "BOOSTER": "775783766131605545"
+    },
+    "VOICE": {
+        "CONNECT": "784785219391193138",
+        "CHANGE": "784785219353968670",
+        "LEAVE": "784785219432480808",
+        "MUTE": "784785219613360149",
+        "UNMUTE": "784785219441524766",
+        "DEAFEN": "784785219424747550",
+        "UNDEAFEN": "784785219324346378",
+        "STREAM": {
+            "START": "853519659775819787",
+            "STOP": "853519660116213780"
+        },
+        "VIDEO": {
+            "START": "853519659945295873",
+            "STOP": "853519660116738078"
+        }
+    },
+    "GUILD": {
+        "RED": "959779988264079361",
+        "YELLOW": "729763053352124529",
+        "GREEN": "959779988503154698",
+        "EMOJI": {
+            "CREATE": "953035168115982437",
+            "EDIT": "729066518549233795",
+            "DELETE": "953035210121953320"
+        },
+        "GRAPHS": "752214059159650396",
+        "SETTINGS": "752570111063228507",
+        "ICONCHANGE": "729763053612302356",
+        "TICKET": {
+            "OPEN": "853245836331188264",
+            "CLOSE": "853580122506133505",
+            "ARCHIVED": "853580122636025856"
+        },
+        "ROLES": {
+            "CREATE": "729064530763579413",
+            "DELETE": "729064530885476392",
+            "EDIT": "776109664793919489",
+            "MEMBERS": "752570111281594509",
+            "MESSAGES": "752570111373606942",
+            "VOICE": "752570111088525354"
+        }
+    },
+    "MOD": {
+        "IMAGES": {
+            "SWEARING": "730438422627614810",
+            "INVISIBLE": "730438422690398238",
+            "TOOBIG": "730438422921084998",
+            "TOOSMALL": "730438422921216150"
+        },
+        "SWEARING": "730438422816096377",
+        "SPAM": "730438422853845042"
+    },
+    "NUMBERS": [
+        {
+            "NORMAL": "753259024404840529",
+            "GREEN": "753312608378945648",
+            "RED": "753312608890650664"
+        },
+        {
+            "NORMAL": "753259025990418515",
+            "GREEN": "753312608550912112",
+            "RED": "753312609075462246"
+        },
+        {
+            "NORMAL": "753259024409034896",
+            "GREEN": "753312608513294366",
+            "RED": "753312608680935446"
+        },
+        {
+            "NORMAL": "753259024358703205",
+            "GREEN": "753312608815284426",
+            "RED": "753312609377320966"
+        },
+        {
+            "NORMAL": "753259024555835513",
+            "GREEN": "753312608735461457",
+            "RED": "753312609255686223"
+        },
+        {
+            "NORMAL": "753259024744579283",
+            "GREEN": "753312608630604017",
+            "RED": "753312609138376777"
+        },
+        {
+            "NORMAL": "753259024354639994",
+            "GREEN": "753312608656031806",
+            "RED": "753312609465270412"
+        },
+        {
+            "NORMAL": "753259024530800661",
+            "GREEN": "753312608718815322",
+            "RED": "753312609104822313"
+        },
+        {
+            "NORMAL": "753259024895574037",
+            "GREEN": "753312608790249646",
+            "RED": "753312609477984319"
+        },
+        {
+            "NORMAL": "753259024681533553",
+            "GREEN": "753312608899170365",
+            "RED": "753312609557545089"
+        }
+    ],
+    "BOTS": {
+        "GPS": "878919163937185803",
+        "NUCLEUS": "878919163597439016",
+        "CLICKSFORMS": "878919163337388073",
+        "CASTAWAY": "878919164255944726",
+        "CMPING": "878919164125929502",
+        "HOOKY": "878919164121731082"
+    },
+    "CFSERVICE": {
+        "VERIFIED": "881984571242053642",
+        "UNVERIFIED": "881984571258847232"
+    },
+    "TICKETS": {
+        "SUPPORT": "952295894370369587",
+        "REPORT": "952295894437482537",
+        "QUESTION": "952295894403907645",
+        "ISSUE": "952295894412316672",
+        "SUGGESTION": "952295894399725588",
+        "OTHER": "952295894445883502"
+    },
+    "TRACKS": {
+        "ICON": "963170616444334171",
+        "HORIZONTAL": {
+            "LEFT": {
+                "ACTIVE": "963121920038035506",
+                "INACTIVE": "963121944239153242"
+            },
+            "MIDDLE": {
+                "ACTIVE": "963121925893263420",
+                "INACTIVE": "963121949796597870"
+            },
+            "RIGHT": {
+                "ACTIVE": "963121933384302602",
+                "INACTIVE": "963121956125831168"
+            }
+        },
+        "VERTICAL": {
+            "TOP": {
+                "ACTIVE": "963122664648630293",
+                "INACTIVE": "963122659862917140",
+                "GREY": {
+                    "ACTIVE": "963123505052934144",
+                    "INACTIVE": "963123495221469194"
+                }
+            },
+            "MIDDLE": {
+                "ACTIVE": "963122679332880384",
+                "INACTIVE": "963122673246937199",
+                "GREY": {
+                    "ACTIVE": "963123517702955018",
+                    "INACTIVE": "963123511927390329"
+                }
+            },
+            "BOTTOM": {
+                "ACTIVE": "963122691752218624",
+                "INACTIVE": "963122685691453552",
+                "GREY": {
+                    "ACTIVE": "963123529988059187",
+                    "INACTIVE": "963123523742748742"
+                }
+            }
+        },
+        "SINGLE": {
+            "ACTIVE": "963361162215424060",
+            "INACTIVE": "963361431758176316",
+            "GREY": {
+                "ACTIVE": "963361204695334943",
+                "INACTIVE": "963361200828198952"
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/utils/confirmationMessage.ts b/src/utils/confirmationMessage.ts
index f5c322b..8281ead 100644
--- a/src/utils/confirmationMessage.ts
+++ b/src/utils/confirmationMessage.ts
@@ -14,6 +14,7 @@
     customCallbackString: string = "";
     customCallbackClicked: boolean = false;
     customCallbackResponse: any = null;
+    inverted: boolean;
 
     constructor(interaction: CommandInteraction) {
         this.interaction = interaction;
@@ -22,6 +23,7 @@
         this.emoji = "";
         this.description = "";
         this.color = "";
+        this.inverted = false
         this.customCallback = () => {}
     }
 
@@ -52,13 +54,13 @@
                     new MessageActionRow().addComponents([
                         new Discord.MessageButton()
                             .setCustomId("yes")
-                            .setLabel("Yes")
-                            .setStyle("SUCCESS")
+                            .setLabel("Confirm")
+                            .setStyle(this.inverted ? "SUCCESS" : "DANGER")
                             .setEmoji(getEmojiByName("CONTROL.TICK", "id")),
                         new Discord.MessageButton()
                             .setCustomId("no")
                             .setLabel("Cancel")
-                            .setStyle("DANGER")
+                            .setStyle(this.inverted ? "DANGER" : "SUCCESS")
                             .setEmoji(getEmojiByName("CONTROL.CROSS", "id"))
                     ].concat(this.customButtonTitle ? [new Discord.MessageButton()
                         .setCustomId("custom")
@@ -81,14 +83,14 @@
             try {
                 component = await (m as Message).awaitMessageComponent({filter: (m) => m.user.id === this.interaction.user.id, time: 2.5 * 60 * 1000});
             } catch (e) {
-                return {success: false, buttonClicked: this.customCallbackClicked, response: this.customCallbackResponse};
+                return { success: false, buttonClicked: this.customCallbackClicked, response: this.customCallbackResponse };
             }
             if (component.customId === "yes") {
                 component.deferUpdate();
-                return {success: true, buttonClicked: this.customCallbackClicked, response: this.customCallbackResponse};
+                return { success: true, buttonClicked: this.customCallbackClicked, response: this.customCallbackResponse };
             } else if (component.customId === "no") {
                 component.deferUpdate();
-                return {success: false, buttonClicked: this.customCallbackClicked, response: this.customCallbackResponse};
+                return { success: false, buttonClicked: this.customCallbackClicked, response: this.customCallbackResponse };
             } else if (component.customId === "custom") {
                 component.deferUpdate();
                 this.customCallbackResponse = this.customCallback();
