file cleanup and some changes
diff --git a/src/commands/user/about.ts b/src/commands/user/about.ts
index 788054e..b78f458 100644
--- a/src/commands/user/about.ts
+++ b/src/commands/user/about.ts
@@ -1,5 +1,5 @@
 import Discord, { CommandInteraction, MessageActionRow, MessageButton } from "discord.js";
-import { SlashCommandSubcommandBuilder } from "@discordjs/builders";
+import { SelectMenuOption, SlashCommandSubcommandBuilder } from "@discordjs/builders";
 import { WrappedCheck } from "jshaiku";
 import generateEmojiEmbed from "../../utils/generateEmojiEmbed.js";
 import getEmojiByName from "../../utils/getEmojiByName.js";
@@ -12,6 +12,19 @@
     .setDescription("Shows info about a user")
     .addUserOption(option => option.setName("user").setDescription("The user to get info about | Default: Yourself"))
 
+
+class Embed {
+    embed: Discord.MessageEmbed;
+    title: string;
+    description: string = "";
+    pageId: number = 0;
+    setEmbed(embed: Discord.MessageEmbed) { 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; }
+}
+
+
 const callback = async (interaction: CommandInteraction) => {
     // @ts-ignore
     const { renderUser, renderDelta } = interaction.client.logger
@@ -88,69 +101,101 @@
         perms += `${getEmojiByName("CONTROL." + (hasPerm ? "TICK" : "CROSS"))} ${permsArray[perm]}\n`
     })
 
+    let selectPaneOpen = false;
+
     let embeds = [
-        new generateEmojiEmbed()
-            .setTitle("User Info: General")
-            .setStatus("Success")
-            .setEmoji("MEMBER.JOIN")
-            .setDescription(
-                flags.map(flag => {
-                    if (nameReplacements[flag]) {
-                        return getEmojiByName(`BADGES.${flag}`) + " " + nameReplacements[flag];
-                    }
-                }).join("\n") + "\n\n" +
-                generateKeyValueList({
-                    "member": renderUser(member.user),
-                    "nickname": member.nickname || "*None set*",
-                    "id": `\`${member.id}\``,
-                    "joined the server": renderDelta(member.joinedTimestamp),
-                    "joined discord": renderDelta(member.user.createdTimestamp),
-                    "boost status": member.premiumSince ? `Started boosting ${renderDelta(member.premiumSinceTimestamp)}` : "*Not boosting*",
-                    "join position": `${joinPos + 1}`
-                })
-            )
-            .setThumbnail(await member.user.displayAvatarURL({dynamic: true}))
-            .setImage((await member.user.fetch()).bannerURL({format: "gif"})),
-        new generateEmojiEmbed()
-            .setTitle("User Info: Roles")
-            .setStatus("Success")
-            .setEmoji("GUILD.ROLES.CREATE")
-            .setDescription(
-                generateKeyValueList({
-                    "member": renderUser(member.user),
-                    "id": `\`${member.id}\``,
-                    "roles": `${member.roles.cache.size - 1}`,
-                }) + "\n" +
-                (s.length > 0 ? s : "*None*") + "\n"
-            )
-            .setThumbnail(await member.user.displayAvatarURL({dynamic: true})),
-        new generateEmojiEmbed()
-            .setTitle("User Info: Key Permissions")
-            .setStatus("Success")
-            .setEmoji("GUILD.ROLES.CREATE")
-            .setDescription(
-                generateKeyValueList({
-                    "member": renderUser(member.user),
-                    "id": `\`${member.id}\``,
-                }) + "\n" + perms
-            )
-            .setThumbnail(await member.user.displayAvatarURL({dynamic: true}))
+        new Embed()
+            .setEmbed(new generateEmojiEmbed()
+                .setTitle("User Info: General")
+                .setStatus("Success")
+                .setEmoji("MEMBER.JOIN")
+                .setDescription(
+                    flags.map(flag => {
+                        if (nameReplacements[flag]) {
+                            return getEmojiByName(`BADGES.${flag}`) + " " + nameReplacements[flag];
+                        }
+                    }).join("\n") + "\n\n" +
+                    generateKeyValueList({
+                        "member": renderUser(member.user),
+                        "nickname": member.nickname || "*None set*",
+                        "id": `\`${member.id}\``,
+                        "joined the server": renderDelta(member.joinedTimestamp),
+                        "joined discord": renderDelta(member.user.createdTimestamp),
+                        "boost status": member.premiumSince ? `Started boosting ${renderDelta(member.premiumSinceTimestamp)}` : "*Not boosting*",
+                        "join position": `${joinPos + 1}`
+                    })
+                )
+                .setThumbnail(await member.user.displayAvatarURL({dynamic: true}))
+                .setImage((await member.user.fetch()).bannerURL({format: "gif"}))
+            ).setTitle("General").setDescription("General information about the user").setPageId(0),
+        new Embed()
+            .setEmbed(new generateEmojiEmbed()
+                .setTitle("User Info: Roles")
+                .setStatus("Success")
+                .setEmoji("GUILD.ROLES.CREATE")
+                .setDescription(
+                    generateKeyValueList({
+                        "member": renderUser(member.user),
+                        "id": `\`${member.id}\``,
+                        "roles": `${member.roles.cache.size - 1}`,
+                    }) + "\n" +
+                    (s.length > 0 ? s : "*None*") + "\n"
+                )
+                .setThumbnail(await member.user.displayAvatarURL({dynamic: true}))
+            ).setTitle("Roles").setDescription("Roles the user has").setPageId(1),
+        new Embed()
+            .setEmbed(new generateEmojiEmbed()
+                .setTitle("User Info: Key Permissions")
+                .setStatus("Success")
+                .setEmoji("GUILD.ROLES.CREATE")
+                .setDescription(
+                    generateKeyValueList({
+                        "member": renderUser(member.user),
+                        "id": `\`${member.id}\``,
+                    }) + "\n" + perms
+                )
+                .setThumbnail(await member.user.displayAvatarURL({dynamic: true}))
+            ).setTitle("Key Permissions").setDescription("Key permissions the user has").setPageId(2),
     ]
     let m
     m = await interaction.reply({embeds: [new generateEmojiEmbed().setTitle("Loading").setEmoji("NUCLEUS.LOADING").setStatus("Danger")], fetchReply: true, ephemeral: true});
     let page = 0
     while (true) {
-        let em = new Discord.MessageEmbed(embeds[page])
+        let em = new Discord.MessageEmbed(embeds[page].embed)
         em.setDescription(em.description + "\n" + createPageIndicator(embeds.length, page));
+        let selectPane = []
+
+        if (selectPaneOpen) {
+            let options = [];
+            embeds.forEach(embed => {
+                options.push(new SelectMenuOption({
+                    label: embed.title,
+                    value: embed.pageId.toString(),
+                    description: embed.description || "",
+                }))
+            })
+            selectPane = [new MessageActionRow().addComponents([
+                new Discord.MessageSelectMenu()
+                    .addOptions(options)
+                    .setCustomId("page")
+                    .setMaxValues(1)
+                    .setPlaceholder("Choose a page...")
+            ])]
+        }
         await interaction.editReply({
             embeds: [em],
-            components: [new MessageActionRow().addComponents([
+            components: selectPane.concat([new MessageActionRow().addComponents([
                 new MessageButton()
                     .setEmoji(getEmojiByName("CONTROL.LEFT", "id"))
                     .setStyle("SECONDARY")
                     .setCustomId("left")
                     .setDisabled(page === 0),
                 new MessageButton()
+                    .setEmoji(getEmojiByName("CONTROL.MENU", "id"))
+                    .setStyle(selectPaneOpen ? "PRIMARY" : "SECONDARY")
+                    .setCustomId("select")
+                    .setDisabled(false),
+                new MessageButton()
                     .setEmoji(getEmojiByName("CONTROL.RIGHT", "id"))
                     .setCustomId("right")
                     .setStyle("SECONDARY")
@@ -159,19 +204,26 @@
                     .setEmoji(getEmojiByName("CONTROL.CROSS", "id"))
                     .setCustomId("close")
                     .setStyle("DANGER")
-            ])]
+            ])])
         })
         let i
         try {
-            i = await m.awaitMessageComponent({componentType: "BUTTON", time: 600000});
+            i = await m.awaitMessageComponent({time: 600000});
         } catch { break }
         i.deferUpdate()
         if (i.component.customId == "left") {
             if (page > 0) page--;
+            selectPaneOpen = false;
         } else if (i.component.customId == "right") {
             if (page < embeds.length - 1) page++;
+            selectPaneOpen = false;
+        } else if (i.component.customId == "select") {
+            selectPaneOpen = !selectPaneOpen;
         } else if (i.component.customId == "close") {
             break;
+        } else if (i.component.customId == "page") {
+            page = parseInt(i.values[0]);
+            selectPaneOpen = false;
         } else {
             break;
         }
@@ -183,6 +235,11 @@
             .setCustomId("left")
             .setDisabled(true),
         new MessageButton()
+            .setEmoji(getEmojiByName("CONTROL.MENU", "id"))
+            .setStyle("SECONDARY")
+            .setCustomId("select")
+            .setDisabled(true),
+        new MessageButton()
             .setEmoji(getEmojiByName("CONTROL.RIGHT", "id"))
             .setCustomId("right")
             .setStyle("SECONDARY")