diff --git a/src/commands/user/about.ts b/src/commands/user/about.ts
index 9015c13..b6e2aee 100644
--- a/src/commands/user/about.ts
+++ b/src/commands/user/about.ts
@@ -1,14 +1,195 @@
-import { CommandInteraction } from "discord.js";
+import Discord, { CommandInteraction, MessageActionRow, MessageButton } from "discord.js";
 import { SlashCommandSubcommandBuilder } from "@discordjs/builders";
 import { WrappedCheck } from "jshaiku";
+import generateEmojiEmbed from "../../utils/generateEmojiEmbed.js";
+import getEmojiByName from "../../utils/getEmojiByName.js";
+import generateKeyValueList from "../../utils/generateKeyValueList.js";
 
 const command = (builder: SlashCommandSubcommandBuilder) =>
     builder
     .setName("about")
     .setDescription("Shows info about a user")
+    .addUserOption(option => option.setName("user").setDescription("The user to get info about | Default: Yourself"))
 
-const callback = (interaction: CommandInteraction) => {
-    interaction.reply("Command incomplete [user/about]");
+const callback = async (interaction: CommandInteraction) => {
+    // @ts-ignore
+    const { renderUser, renderDelta } = interaction.client.logger
+    let member = (interaction.options.getMember("user") || interaction.member) as Discord.GuildMember;
+    let flags: string[] = [];
+    if ([
+        "438733159748599813", // Pinea
+        "317731855317336067", // Mini
+        "261900651230003201", // Coded
+        "511655498676699136", // Zan
+    ].includes(member.user.id)) { flags.push("NUCLEUSDEVELOPER") }
+    if ((await interaction.client.guilds.cache.get("684492926528651336")?.members.fetch())?.filter(m => m.roles.cache.has("760896837866749972"))?.map(m => m.id).includes(member.user.id)) { flags.push("CLICKSDEVELOPER") }
+    member.user.flags.toArray().map(flag => {
+        flags.push(flag.toString())
+    })
+    if (member.user.bot === true) { flags.push("BOT") }
+    // Check if they are boosting the server
+    if (member.premiumSince) { flags.push("BOOSTER") }
+    let nameReplacements = {
+        "NUCLEUSDEVELOPER": "**Nucleus Developer**",
+        "CLICKSDEVELOPER": "Clicks Developer",
+        "HOUSE_BRAVERY": "Hypesquad Bravery",
+        "HOUSE_BRILLIANCE": "Hypesquad Brilliance",
+        "HOUSE_BALANCE": "Hypesquad Balance",
+        "HYPESQUAD_EVENTS": "Hypesquad Events",
+        "EARLY_SUPPORTER": "Early Supporter",
+        "BUGHUNTER_LEVEL_1": "Bug Hunter Level 1",
+        "BUGHUNTER_LEVEL_2": "Bug Hunter Level 2",
+        "PARTNERED_SERVER_OWNER": "Partnered Server Owner",
+        "DISCORD_EMPLOYEE": "Discord Staff",
+        "EARLY_VERIFIED_BOT_DEVELOPER": "Verified Bot Developer",
+        "BOT": "Bot",
+        "BOOSTER": "Server Booster"
+    }
+    let members = await interaction.guild.members.fetch()
+    let membersArray = [...members.values()]
+    membersArray.sort((a, b) => a.joinedTimestamp - b.joinedTimestamp)
+    let joinPos = membersArray.findIndex(m => m.id === member.user.id)
+
+    let roles = member.roles.cache.filter(r => r.id != interaction.guild.id).sort()
+    let s = "";
+    let count = 0;
+    let ended = false
+    roles.map(item => {
+        if (ended) return;
+        let string = `<@&${item.id}>, `
+        if(s.length + string.length > 1000) {
+            ended = true
+            s += `and ${roles.size - count} more`
+            return
+        };
+        count ++
+        s += string;
+    })
+    if(s.length > 0 && !ended) s = s.slice(0, -2);
+
+    let perms = ""
+    let permsArray = {
+        "ADMINISTRATOR": "Administrator",
+        "MANAGE_GUILD": "Manage Server",
+        "MANAGE_ROLES": "Manage Roles",
+        "MANAGE_CHANNELS": "Manage Channels",
+        "KICK_MEMBERS": "Kick Members",
+        "BAN_MEMBERS": "Ban Members",
+        "MODERATE_MEMBERS": "Moderate Members",
+        "MANAGE_NICKNAMES": "Manage Nicknames",
+        "MANAGE_WEBHOOKS": "Manage Webhooks",
+        "MANAGE_MESSAGES": "Manage Messages",
+        "VIEW_AUDIT_LOG": "View Audit Log",
+        "MENTION_EVERYONE": "Mention Everyone"
+    }
+    Object.keys(permsArray).map(perm => {
+        let hasPerm = member.permissions.has(perm as Discord.PermissionString)
+        perms += `${getEmojiByName("CONTROL." + (hasPerm ? "TICK" : "CROSS"))} ${permsArray[perm]}\n`
+    })
+
+    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*")
+            )
+            .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}))
+    ]
+    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) {
+        await interaction.editReply({
+            embeds: [embeds[page].setFooter({text: `Page ${page + 1} of ${embeds.length}`})],
+            components: [new MessageActionRow().addComponents([
+                new MessageButton()
+                    .setEmoji(getEmojiByName("CONTROL.LEFT", "id"))
+                    .setStyle("SECONDARY")
+                    .setCustomId("left")
+                    .setDisabled(page === 0),
+                new MessageButton()
+                    .setEmoji(getEmojiByName("CONTROL.RIGHT", "id"))
+                    .setCustomId("right")
+                    .setStyle("SECONDARY")
+                    .setDisabled(page === embeds.length - 1),
+                new MessageButton()
+                    .setEmoji(getEmojiByName("CONTROL.CROSS", "id"))
+                    .setCustomId("close")
+                    .setStyle("DANGER")
+            ])]
+        })
+        let i
+        try {
+            i = await m.awaitMessageComponent({componentType: "BUTTON", time: 600000});
+        } catch { break }
+        i.deferUpdate()
+        if (i.component.customId == "left") {
+            if (page > 0) page--;
+        } else if (i.component.customId == "right") {
+            if (page < embeds.length - 1) page++;
+        } else if (i.component.customId == "close") {
+            break;
+        } else {
+            break;
+        }
+    }
+    await interaction.editReply({embeds: [m.embeds[0]], components: [new MessageActionRow().addComponents([
+        new MessageButton()
+            .setEmoji(getEmojiByName("CONTROL.LEFT", "id"))
+            .setStyle("SECONDARY")
+            .setCustomId("left")
+            .setDisabled(true),
+        new MessageButton()
+            .setEmoji(getEmojiByName("CONTROL.RIGHT", "id"))
+            .setCustomId("right")
+            .setStyle("SECONDARY")
+            .setDisabled(true),
+        new MessageButton()
+            .setEmoji(getEmojiByName("CONTROL.CROSS", "id"))
+            .setCustomId("close")
+            .setStyle("PRIMARY")
+            .setDisabled(true)
+    ])]})
 }
 
 const check = (interaction: CommandInteraction, defaultCheck: WrappedCheck) => {
