diff --git a/src/utils/client.ts b/src/utils/client.ts
index 53267f2..a57c639 100644
--- a/src/utils/client.ts
+++ b/src/utils/client.ts
@@ -1,11 +1,10 @@
-import Discord, { Client, Interaction } from 'discord.js';
+import Discord, { Client, Interaction, AutocompleteInteraction } from 'discord.js';
 import { Logger } from "../utils/log.js";
 import Memory from "../utils/memory.js";
 import type { VerifySchema } from "../reflex/verify.js";
 import { Guilds, History, ModNotes, Premium } from "../utils/database.js";
 import EventScheduler from "../utils/eventScheduler.js";
 import type { RoleMenuSchema } from "../actions/roleMenu.js";
-// @ts-expect-error
 import config from "../config/main.json" assert { type: "json" };
 
 
@@ -28,9 +27,9 @@
                 ((builder: Discord.SlashCommandBuilder) => Discord.SlashCommandBuilder) |
                 Discord.SlashCommandSubcommandBuilder | ((builder: Discord.SlashCommandSubcommandBuilder) => Discord.SlashCommandSubcommandBuilder) | Discord.SlashCommandSubcommandGroupBuilder | ((builder: Discord.SlashCommandSubcommandGroupBuilder) => Discord.SlashCommandSubcommandGroupBuilder),
         callback: (interaction: Interaction) => Promise<void>,
-        check: (interaction: Interaction) => Promise<boolean> | boolean
+        check: (interaction: Interaction) => Promise<boolean> | boolean,
+        autocomplete: (interaction: AutocompleteInteraction) => Promise<string[]>
     }> = {};
-    // commands: Discord.Collection<string, [Function, Function]> = new Discord.Collection();
 
     constructor(database: typeof NucleusClient.prototype.database) {
         super({ intents: 32767 });
diff --git a/src/utils/commandRegistration/register.ts b/src/utils/commandRegistration/register.ts
index 0193f6c..a4c57c4 100644
--- a/src/utils/commandRegistration/register.ts
+++ b/src/utils/commandRegistration/register.ts
@@ -1,5 +1,4 @@
 import Discord, { Interaction, SlashCommandBuilder, ApplicationCommandType } from 'discord.js';
-// @ts-expect-error
 import config from "../../config/main.json" assert { type: "json" };
 import client from "../client.js";
 import fs from "fs";
@@ -140,19 +139,31 @@
             const commandName = "contextCommands/message/" + interaction.commandName;
             execute(client.commands[commandName]?.check, client.commands[commandName]?.callback, interaction)
             return;
+        } else if (interaction.isAutocomplete()) {
+            const commandName = interaction.commandName;
+            const subcommandGroupName = interaction.options.getSubcommandGroup(false);
+            const subcommandName = interaction.options.getSubcommand(false);
+
+            const fullCommandName = "commands/" + commandName + (subcommandGroupName ? `/${subcommandGroupName}` : "") + (subcommandName ? `/${subcommandName}` : "");
+
+            const choices = await client.commands[fullCommandName]?.autocomplete(interaction);
+
+            const formatted = (choices ?? []).map(choice => {
+                return { name: choice, value: choice }
+            })
+            interaction.respond(formatted)
+        } else if (interaction.isChatInputCommand()) {
+            const commandName = interaction.commandName;
+            const subcommandGroupName = interaction.options.getSubcommandGroup(false);
+            const subcommandName = interaction.options.getSubcommand(false);
+
+            const fullCommandName = "commands/" + commandName + (subcommandGroupName ? `/${subcommandGroupName}` : "") + (subcommandName ? `/${subcommandName}` : "");
+
+            const command = client.commands[fullCommandName];
+            const callback = command?.callback;
+            const check = command?.check;
+            execute(check, callback, interaction);
         }
-        if (!interaction.isChatInputCommand()) return;
-
-        const commandName = interaction.commandName;
-        const subcommandGroupName = interaction.options.getSubcommandGroup(false);
-        const subcommandName = interaction.options.getSubcommand(false);
-
-        const fullCommandName = "commands/" + commandName + (subcommandGroupName ? `/${subcommandGroupName}` : "") + (subcommandName ? `/${subcommandName}` : "");
-
-        const command = client.commands[fullCommandName];
-        const callback = command?.callback;
-        const check = command?.check;
-        execute(check, callback, interaction);
     });
 }
 
diff --git a/src/utils/commandRegistration/slashCommandBuilder.ts b/src/utils/commandRegistration/slashCommandBuilder.ts
index 45cb8f1..76ecabe 100644
--- a/src/utils/commandRegistration/slashCommandBuilder.ts
+++ b/src/utils/commandRegistration/slashCommandBuilder.ts
@@ -1,6 +1,5 @@
 import type { SlashCommandSubcommandGroupBuilder } from "@discordjs/builders";
 import type { SlashCommandBuilder } from "discord.js";
-// @ts-expect-error
 import config from "../../config/main.json" assert { type: "json" };
 import getSubcommandsInFolder from "./getFilesInFolder.js";
 import client from "../client.js";
diff --git a/src/utils/confirmationMessage.ts b/src/utils/confirmationMessage.ts
index 87724f3..6682be0 100644
--- a/src/utils/confirmationMessage.ts
+++ b/src/utils/confirmationMessage.ts
@@ -18,6 +18,7 @@
     title: string;
     disabled: boolean;
     value: string | null;
+    notValue: string | null;
     emoji: string | undefined;
     active: boolean;
     onClick: () => Promise<T>;
@@ -68,6 +69,7 @@
         disabled: boolean,
         callback: (() => Promise<unknown>) | null = async () => null,
         callbackClicked: string | null,
+        callbackNotClicked: string | null,
         emoji?: string,
         initial?: boolean
     ) {
@@ -75,6 +77,7 @@
             title: title,
             disabled: disabled,
             value: callbackClicked,
+            notValue: callbackNotClicked,
             emoji: emoji,
             active: initial ?? false,
             onClick: callback ?? (async () => null),
@@ -145,10 +148,12 @@
                                 "\n\n" +
                                 Object.values(this.customButtons)
                                     .map((v) => {
-                                        if (v.value === null) return "";
-                                        return v.active ? `*${v.value}*\n` : "";
-                                    })
-                                    .join("")
+                                        if (v.active) {
+                                            return v.value ? `*${v.value}*\n` : "";
+                                        } else {
+                                            return v.notValue ? `*${v.notValue}*\n` : "";
+                                        }
+                                    }).join("")
                         )
                         .setStatus(this.color)
                 ],
@@ -163,7 +168,8 @@
                 } else {
                     m = (await this.interaction.reply(object)) as unknown as Message;
                 }
-            } catch {
+            } catch (e) {
+                console.log(e);
                 cancelled = true;
                 continue;
             }
diff --git a/src/utils/database.ts b/src/utils/database.ts
index 2624fc9..b14c5c4 100644
--- a/src/utils/database.ts
+++ b/src/utils/database.ts
@@ -1,6 +1,5 @@
 import type Discord from "discord.js";
 import { Collection, MongoClient } from "mongodb";
-// @ts-expect-error
 import config from "../config/main.json" assert { type: "json" };
 
 const mongoClient = new MongoClient(config.mongoUrl);
@@ -17,7 +16,6 @@
     }
 
     async setup(): Promise<Guilds> {
-        // @ts-expect-error
         this.defaultData = (await import("../config/default.json", { assert: { type: "json" } }))
             .default as unknown as GuildConfig;
         return this;
diff --git a/src/utils/defaultEmbeds.ts b/src/utils/defaultEmbeds.ts
index 39a6080..a027c76 100644
--- a/src/utils/defaultEmbeds.ts
+++ b/src/utils/defaultEmbeds.ts
@@ -8,4 +8,30 @@
 export const LinkWarningFooter = {
     text: "The button below will take you to a website set by the server moderators. Do not enter any passwords unless it is from a trusted website.",
     iconURL: "https://cdn.discordapp.com/emojis/952295894370369587.webp?size=128&quality=lossless"
-}
\ No newline at end of file
+}
+
+class Embed {
+    embed: EmojiEmbed = new EmojiEmbed();
+    title: string = "";
+    description = "";
+    pageId = 0;
+
+    setEmbed(embed: EmojiEmbed) {
+        this.embed = embed;
+        return this;
+    }
+    setTitle(title: string) {
+        this.title = title;
+        return this;
+    }
+    setDescription(description: string) {
+        this.description = description;
+        return this;
+    }
+    setPageId(pageId: number) {
+        this.pageId = pageId;
+        return this;
+    }
+}
+
+export { Embed };
diff --git a/src/utils/eventScheduler.ts b/src/utils/eventScheduler.ts
index 0a32a1e..3c9d6ca 100644
--- a/src/utils/eventScheduler.ts
+++ b/src/utils/eventScheduler.ts
@@ -2,7 +2,6 @@
 import client from "./client.js";
 import * as fs from "fs";
 import * as path from "path";
-// @ts-expect-error
 import config from "../config/main.json" assert { type: "json" };
 
 class EventScheduler {
diff --git a/src/utils/getEmojiByName.ts b/src/utils/getEmojiByName.ts
index 7824982..3fa2b53 100644
--- a/src/utils/getEmojiByName.ts
+++ b/src/utils/getEmojiByName.ts
@@ -1,4 +1,3 @@
-// @ts-expect-error
 import emojis from "../config/emojis.json" assert { type: "json" };
 
 interface EmojisIndex {
diff --git a/src/utils/memory.ts b/src/utils/memory.ts
index a397d09..870ffaf 100644
--- a/src/utils/memory.ts
+++ b/src/utils/memory.ts
@@ -6,6 +6,7 @@
     filters: GuildConfig["filters"];
     logging: GuildConfig["logging"];
     tickets: GuildConfig["tickets"];
+    tags: GuildConfig["tags"];
 }
 
 class Memory {
@@ -20,7 +21,7 @@
                 }
             }
         }, 1000 * 60 * 30);
-    }
+    };
 
     async readGuildInfo(guild: string): Promise<GuildData> {
         if (!this.memory.has(guild)) {
@@ -29,10 +30,15 @@
                 lastUpdated: Date.now(),
                 filters: guildData.filters,
                 logging: guildData.logging,
-                tickets: guildData.tickets
+                tickets: guildData.tickets,
+                tags: guildData.tags
             });
         }
         return this.memory.get(guild)!;
+    };
+
+    async forceUpdate(guild: string) {
+        if (this.memory.has(guild)) this.memory.delete(guild);
     }
 }
 
diff --git a/src/utils/search.ts b/src/utils/search.ts
new file mode 100644
index 0000000..310dbf8
--- /dev/null
+++ b/src/utils/search.ts
@@ -0,0 +1,18 @@
+import Fuse from "fuse.js";
+
+function getResults(typed: string, options: string[]): string[] {
+    options = options.filter((option) => option.length <= 100); // thanks discord. 6000 character limit on slash command inputs but only 100 for autocomplete.
+    if (!typed)
+        return options
+            .slice(0, 25)
+            .sort()
+    // @ts-expect-error
+    const fuse = new Fuse(options, {
+        useExtendedSearch: true,
+        findAllMatches: true,
+        minMatchCharLength: typed.length > 3 ? 3 : typed.length,
+    }).search(typed);
+    return fuse.slice(0, 25).map((option: {item: string }) => option.item );
+}
+
+export { getResults }
\ No newline at end of file
