diff --git a/src/commands/mod/ban.ts b/src/commands/mod/ban.ts
index 41d1252..78f936c 100644
--- a/src/commands/mod/ban.ts
+++ b/src/commands/mod/ban.ts
@@ -191,7 +191,10 @@
     if (!interaction.guild) return;
     const member = interaction.member as GuildMember;
     // Check if the user has ban_members permission
-    if (!member.permissions.has("BanMembers")) return "You do not have the *Ban Members* permission";
+    if (!member.permissions.has("BanMembers")) {
+        // if(!partial) client.logger.warn("Missing permissions", "Ban", "User does not have Ban Members permission");
+        return "You do not have the *Ban Members* permission";
+    }
     if (partial) return true;
     const me = interaction.guild.members.me!;
     let apply: GuildMember;
diff --git a/src/commands/nucleus/stats.ts b/src/commands/nucleus/stats.ts
index 9690258..413cedf 100644
--- a/src/commands/nucleus/stats.ts
+++ b/src/commands/nucleus/stats.ts
@@ -8,6 +8,7 @@
     CommandInteraction,
     ComponentType,
     Guild,
+    GuildTextBasedChannel,
     ModalBuilder,
     ModalSubmitInteraction,
     TextInputBuilder,
@@ -91,7 +92,8 @@
             ],
             components: [
                 new ActionRowBuilder<ButtonBuilder>().addComponents(
-                    new ButtonBuilder().setCustomId("admin").setLabel("Admin Panel").setStyle(ButtonStyle.Primary)
+                    new ButtonBuilder().setCustomId("admin").setLabel("Admin Panel").setStyle(ButtonStyle.Primary),
+                    new ButtonBuilder().setCustomId("announce").setLabel("Announce to all Guilds").setStyle(ButtonStyle.Danger)
                 )
             ]
         });
@@ -120,152 +122,252 @@
         // console.log(interaction)
         if (!("awaitMessageComponent" in channel)) return;
         let GuildID = interaction.guildId;
-        if (!GuildID) {
-            try {
-                i1 = await channel!.awaitMessageComponent<ComponentType.Button>({
-                    filter: (i) => i.customId === "admin" && i.user.id === interaction.user.id && i.message.id === m.id,
-                    time: 300000
-                });
-            } catch (e) {
-                console.log(e);
-                return;
-            }
-            await i1.showModal(modal);
-            let out: ModalSubmitInteraction;
-            try {
-                out = await i1.awaitModalSubmit({
-                    filter: (i) => i.customId === "adminPanel" && i.user.id === interaction.user.id,
-                    time: 300000
-                });
-            } catch {
-                return;
-            }
-            await out.deferUpdate();
-            GuildID = out.fields.getTextInputValue("guildID");
-        } else if (!client.guilds.cache.has(GuildID)) {
-            await interaction.editReply({
-                embeds: [new EmojiEmbed().setTitle("Admin").setDescription("Not in server").setStatus("Danger")],
-                components: []
-            });
-        }
-
-        await interaction.editReply({
-            embeds: [],
-            components: [
-                new ActionRowBuilder<ButtonBuilder>().addComponents(
-                    new ButtonBuilder().setCustomId("stats").setLabel("Stats").setStyle(ButtonStyle.Primary),
-                    new ButtonBuilder().setCustomId("data").setLabel("Guild data").setStyle(ButtonStyle.Secondary),
-                    new ButtonBuilder().setCustomId("cache").setLabel("Reset cache").setStyle(ButtonStyle.Success),
-                    new ButtonBuilder().setCustomId("leave").setLabel("Leave").setStyle(ButtonStyle.Danger),
-                    new ButtonBuilder().setCustomId("purge").setLabel("Delete data").setStyle(ButtonStyle.Danger)
-                )
-            ]
-        });
-        let i;
         try {
-            i = await m.awaitMessageComponent<ComponentType.Button>({
-                filter: (i) => i.user.id === interaction.user.id && i.message.id === m.id,
+            i1 = await m.awaitMessageComponent<ComponentType.Button>({
+                filter: (i) => i.user.id === interaction.user.id,
                 time: 300000
             });
-        } catch {
+        } catch (e) {
+            console.log(e);
             return;
         }
-        const guild = (await client.guilds.fetch(GuildID)) as Guild | null;
-        if (!guild) {
-            await i.deferUpdate();
-            await interaction.editReply({
-                embeds: [new EmojiEmbed().setTitle("Admin").setDescription("Not in server").setStatus("Danger")],
-                components: []
-            });
-            return;
-        }
-        if (i.customId === "stats") {
-            await i.deferUpdate();
-            await interaction.editReply({
-                embeds: [
-                    new EmojiEmbed()
-                        .setTitle("Stats")
-                        .setDescription(
-                            `**Name:** ${guild.name}\n` +
-                                `**ID:** \`${guild.id}\`\n` +
-                                `**Owner:** ${client.users.cache.get(guild.ownerId)!.tag}\n` +
-                                `**Member Count:** ${guild.memberCount}\n` +
-                                `**Created:** <t:${guild.createdTimestamp}:F>\n` +
-                                `**Added Nucleus:** <t:${guild.members.me!.joinedTimestamp}:R>\n` +
-                                `**Nucleus' Perms:** https://discordapi.com/permissions.html#${guild.members.me!.permissions.valueOf()}\n`
+        switch(i1.customId) {
+            case "admin": {
+                if (!GuildID) {
+                    await i1.showModal(modal);
+                    let out: ModalSubmitInteraction;
+                    try {
+                        out = await i1.awaitModalSubmit({
+                            filter: (i) => i.customId === "adminPanel" && i.user.id === interaction.user.id,
+                            time: 300000
+                        });
+                    } catch {
+                        return;
+                    }
+                    await out.deferUpdate();
+                    GuildID = out.fields.getTextInputValue("guildID");
+                } else if (!client.guilds.cache.has(GuildID)) {
+                    await interaction.editReply({
+                        embeds: [new EmojiEmbed().setTitle("Admin").setDescription("Not in server").setStatus("Danger")],
+                        components: []
+                    });
+                }
+
+                await interaction.editReply({
+                    embeds: [],
+                    components: [
+                        new ActionRowBuilder<ButtonBuilder>().addComponents(
+                            new ButtonBuilder().setCustomId("stats").setLabel("Stats").setStyle(ButtonStyle.Primary),
+                            new ButtonBuilder().setCustomId("data").setLabel("Guild data").setStyle(ButtonStyle.Secondary),
+                            new ButtonBuilder().setCustomId("cache").setLabel("Reset cache").setStyle(ButtonStyle.Success),
+                            new ButtonBuilder().setCustomId("leave").setLabel("Leave").setStyle(ButtonStyle.Danger),
+                            new ButtonBuilder().setCustomId("purge").setLabel("Delete data").setStyle(ButtonStyle.Danger)
                         )
-                        .setStatus("Success")
-                        .setEmoji("SETTINGS.STATS.GREEN")
-                ]
-            });
-        } else if (i.customId === "leave") {
-            if (!(await confirm(interaction))) {
-                await interaction.editReply({
-                    embeds: [new EmojiEmbed().setTitle("No changes were made").setStatus("Danger")],
-                    components: []
+                    ]
                 });
-                return;
+                let i;
+                try {
+                    i = await m.awaitMessageComponent<ComponentType.Button>({
+                        filter: (i) => i.user.id === interaction.user.id && i.message.id === m.id,
+                        time: 300000
+                    });
+                } catch {
+                    return;
+                }
+                const guild = (await client.guilds.fetch(GuildID)) as Guild | null;
+                if (!guild) {
+                    await i.deferUpdate();
+                    await interaction.editReply({
+                        embeds: [new EmojiEmbed().setTitle("Admin").setDescription("Not in server").setStatus("Danger")],
+                        components: []
+                    });
+                    return;
+                }
+                if (i.customId === "stats") {
+                    await i.deferUpdate();
+                    await interaction.editReply({
+                        embeds: [
+                            new EmojiEmbed()
+                                .setTitle("Stats")
+                                .setDescription(
+                                    `**Name:** ${guild.name}\n` +
+                                        `**ID:** \`${guild.id}\`\n` +
+                                        `**Owner:** ${client.users.cache.get(guild.ownerId)!.tag}\n` +
+                                        `**Member Count:** ${guild.memberCount}\n` +
+                                        `**Created:** <t:${guild.createdTimestamp}:F>\n` +
+                                        `**Added Nucleus:** <t:${guild.members.me!.joinedTimestamp}:R>\n` +
+                                        `**Nucleus' Perms:** https://discordapi.com/permissions.html#${guild.members.me!.permissions.valueOf()}\n`
+                                )
+                                .setStatus("Success")
+                                .setEmoji("SETTINGS.STATS.GREEN")
+                        ]
+                    });
+                } else if (i.customId === "leave") {
+                    if (!(await confirm(interaction))) {
+                        await interaction.editReply({
+                            embeds: [new EmojiEmbed().setTitle("No changes were made").setStatus("Danger")],
+                            components: []
+                        });
+                        return;
+                    }
+                    await guild.leave();
+                    await interaction.editReply({
+                        embeds: [
+                            new EmojiEmbed()
+                                .setTitle("Left")
+                                .setDescription(`Left ${guild.name}`)
+                                .setStatus("Success")
+                                .setEmoji("SETTINGS.STATS.GREEN")
+                        ],
+                        components: []
+                    });
+                } else if (i.customId === "data") {
+                    await i.deferUpdate();
+                    // Get all the data and convert to a string
+                    const data = await client.database.guilds.read(guild.id);
+                    const stringified = JSON.stringify(data, null, 2);
+                    const buffer = Buffer.from(stringified);
+                    const attachment = new AttachmentBuilder(buffer).setName("data.json");
+                    await interaction.editReply({
+                        embeds: [
+                            new EmojiEmbed().setTitle("Data").setDescription(`Data for ${guild.name}`).setStatus("Success")
+                        ],
+                        components: [],
+                        files: [attachment]
+                    });
+                } else if (i.customId === "purge") {
+                    if (!(await confirm(interaction))) {
+                        await interaction.editReply({
+                            embeds: [new EmojiEmbed().setTitle("No changes were made").setStatus("Danger")],
+                            components: []
+                        });
+                        return;
+                    }
+                    await client.database.guilds.delete(GuildID);
+                    await client.database.history.delete(GuildID);
+                    await client.database.notes.delete(GuildID);
+                    await client.database.transcripts.deleteAll(GuildID);
+                    await interaction.editReply({
+                        embeds: [
+                            new EmojiEmbed()
+                                .setTitle("Purge")
+                                .setDescription(`Deleted data for ${guild.name}`)
+                                .setStatus("Success")
+                                .setEmoji("SETTINGS.STATS.GREEN")
+                        ],
+                        components: []
+                    });
+                } else if (i.customId === "cache") {
+                    await i.deferUpdate();
+                    await client.memory.forceUpdate(guild.id);
+                    await interaction.editReply({
+                        embeds: [
+                            new EmojiEmbed()
+                                .setTitle("Cache")
+                                .setDescription(`Reset cache for ${guild.name}`)
+                                .setStatus("Success")
+                                .setEmoji("SETTINGS.STATS.GREEN")
+                        ],
+                        components: []
+                    });
+                }
+                break;
             }
-            await guild.leave();
-            await interaction.editReply({
-                embeds: [
-                    new EmojiEmbed()
-                        .setTitle("Left")
-                        .setDescription(`Left ${guild.name}`)
-                        .setStatus("Success")
-                        .setEmoji("SETTINGS.STATS.GREEN")
-                ],
-                components: []
-            });
-        } else if (i.customId === "data") {
-            await i.deferUpdate();
-            // Get all the data and convert to a string
-            const data = await client.database.guilds.read(guild.id);
-            const stringified = JSON.stringify(data, null, 2);
-            const buffer = Buffer.from(stringified);
-            const attachment = new AttachmentBuilder(buffer).setName("data.json");
-            await interaction.editReply({
-                embeds: [
-                    new EmojiEmbed().setTitle("Data").setDescription(`Data for ${guild.name}`).setStatus("Success")
-                ],
-                components: [],
-                files: [attachment]
-            });
-        } else if (i.customId === "purge") {
-            if (!(await confirm(interaction))) {
+            case "announce": {
+                const channelsToNotify = await client.database.guilds.staffChannels()
+                const modal2 = new ModalBuilder()
+                    .addComponents(
+                        new ActionRowBuilder<TextInputBuilder>().addComponents(
+                            new TextInputBuilder()
+                                .setStyle(TextInputStyle.Paragraph)
+                                .setLabel("Announcement")
+                                .setCustomId("announcement")
+                                .setPlaceholder("Announcement...")
+                        )
+                    )
+                    .setTitle("Announcement")
+                    .setCustomId("announce");
+                await i1.showModal(modal2);
+                let out: ModalSubmitInteraction;
+                try {
+                    out = await i1.awaitModalSubmit({
+                        filter: (i) => i.customId === "announce" && i.user.id === interaction.user.id,
+                        time: 300000
+                    });
+                } catch {
+                    return;
+                }
+                await out.deferUpdate();
+                const announcement = out.fields.getTextInputValue("announcement");
                 await interaction.editReply({
-                    embeds: [new EmojiEmbed().setTitle("No changes were made").setStatus("Danger")],
-                    components: []
+                    embeds: [
+                        new EmojiEmbed()
+                            .setTitle("Announcement")
+                            .setDescription(`Announcement will be sent to ${channelsToNotify.length} channels.\n\n${announcement}`)
+                            .setStatus("Success")
+                            .setEmoji("SETTINGS.STATS.GREEN")
+                    ],
+                    components: [
+                        new ActionRowBuilder<ButtonBuilder>().addComponents(
+                            new ButtonBuilder().setCustomId("confirm").setLabel("Confirm").setStyle(ButtonStyle.Success),
+                            new ButtonBuilder().setCustomId("cancel").setLabel("Cancel").setStyle(ButtonStyle.Danger)
+                        )
+                    ]
                 });
-                return;
+
+                let i;
+                try {
+                    i = await m.awaitMessageComponent<ComponentType.Button>({
+                        filter: (i) => i.user.id === interaction.user.id,
+                        time: 300000
+                    });
+                } catch {
+                    return;
+                }
+                if (i.customId === "confirm") {
+                    await i.deferUpdate();
+                    await interaction.editReply({
+                        embeds: [
+                            new EmojiEmbed()
+                                .setTitle("Announcement")
+                                .setDescription(`Sending to ${channelsToNotify.length} channels. Preview:\n\n${announcement}`)
+                                .setStatus("Success")
+                                .setEmoji("SETTINGS.STATS.GREEN")
+                        ],
+                        components: []
+                    });
+                    const announcementEmbed = new EmojiEmbed()
+                        .setTitle("Developer Announcement")
+                        .setDescription(announcement)
+                        .setStatus("Danger")
+                        .setEmoji("NUCLEUS.LOGO")
+                        .setFooter({text: `Sent by ${interaction.user.username}`, iconURL: interaction.user.displayAvatarURL()})
+                    for (const channel of channelsToNotify) {
+                        const ch = await client.channels.fetch(channel) as GuildTextBasedChannel | null;
+                        if (!ch) continue;
+                        await ch.send({
+                            embeds: [announcementEmbed]
+                        });
+                    }
+                    await interaction.editReply({
+                        embeds: [
+                            new EmojiEmbed()
+                                .setTitle("Announcement")
+                                .setDescription(`Sent to ${channelsToNotify.length} channels. Preview:\n\n${announcement}`)
+                                .setStatus("Success")
+                                .setEmoji("SETTINGS.STATS.GREEN")
+                        ],
+                        components: []
+                    })
+                } else if (i.customId === "cancel") {
+                    await i.deferUpdate();
+                    await interaction.editReply({
+                        embeds: [new EmojiEmbed().setTitle("Announcement Cancelled").setStatus("Danger")],
+                        components: []
+                    });
+                }
+                break;
             }
-            await client.database.guilds.delete(GuildID);
-            await client.database.history.delete(GuildID);
-            await client.database.notes.delete(GuildID);
-            await client.database.transcripts.deleteAll(GuildID);
-            await interaction.editReply({
-                embeds: [
-                    new EmojiEmbed()
-                        .setTitle("Purge")
-                        .setDescription(`Deleted data for ${guild.name}`)
-                        .setStatus("Success")
-                        .setEmoji("SETTINGS.STATS.GREEN")
-                ],
-                components: []
-            });
-        } else if (i.customId === "cache") {
-            await i.deferUpdate();
-            await client.memory.forceUpdate(guild.id);
-            await interaction.editReply({
-                embeds: [
-                    new EmojiEmbed()
-                        .setTitle("Cache")
-                        .setDescription(`Reset cache for ${guild.name}`)
-                        .setStatus("Success")
-                        .setEmoji("SETTINGS.STATS.GREEN")
-                ],
-                components: []
-            });
         }
     }
 };
diff --git a/src/config/emojis.json b/src/config/emojis.json
deleted file mode 100644
index 585934d..0000000
--- a/src/config/emojis.json
+++ /dev/null
@@ -1,402 +0,0 @@
-{
-    "NUCLEUS": {
-        "LOGO": "953040840945721385",
-        "PREMIUMACTIVATE": "a1067536222764925068",
-        "PREMIUM": "1067928702027042876",
-        "LOADING": "a946346549271732234",
-        "INFO": {
-            "HELP": "751751467014029322",
-            "ABOUT": "751762088346517504",
-            "COMMANDS": "751762088229339136",
-            "SUPPORT": "751762087780286495"
-        },
-        "COMMANDS": {
-            "RAID": "777143043711172608",
-            "LOCK": "776848800995868682",
-            "IGNORE": "777520659270074389"
-        }
-    },
-    "ICONS": {
-        "ADD": "826823514904330251",
-        "REMOVE": "826823515268186152",
-        "EDIT": "989911820267577366",
-        "HISTORY": "989911933069168690",
-        "FILTER": "990242059451514902",
-        "ATTACHMENT": "997570687193587812",
-        "LOGGING": "999613304446144562",
-        "SAVE": "1065722246322200586",
-        "REORDER": "1069323453909454890",
-        "PUBLISH": "1081691380004421743",
-        "NOTIFY": {
-            "ON": "1000726394579464232",
-            "OFF": "1078058136092541008"
-        },
-        "OPP": {
-            "ADD": "837355918831124500",
-            "REMOVE": "837355918420869162"
-        },
-        "CHANNEL": {
-            "GUILD_TEXT": "990209996182679632",
-            "GUILD_TEXT_NSFW": "990216363526221824",
-            "GUILD_VOICE": "990213162697637969",
-            "GUILD_VOICE_NSFW": "990216017244463124",
-            "GUILD_STORE": "853668786925469706",
-            "GUILD_NEWS": "853668786493063169",
-            "GUILD_NEWS_NSFW": "990216028300673094",
-            "GUILD_STAGE_VOICE": "853668786842763294",
-            "THREAD_CHANNEL": "990210005108158514",
-            "THREAD_PIPE": "990213168183779348",
-            "RULES": "990213153080115250",
-            "FORUM": "1061706437526552716",
-            "CATEGORY": "1064943289708597348"
-        },
-        "FLAGS": {
-            "RED": "1082719687219101800",
-            "YELLOW": "1082719684060794890",
-            "GREEN": "1082719681326108763",
-            "BLUE": "1082719679161843734",
-            "PURPLE": "1082719686292156628",
-            "GRAY": "1082719682492125337"
-        }
-    },
-    "CONTROL": {
-        "TICK": "947441964234702849",
-        "REDTICK": "999612396727439370",
-        "CROSS": "947441948543815720",
-        "BLOCKCROSS": "952261738349330493",
-        "BLOCKTICK": "991805475777695855",
-        "LEFT": "947441951148486728",
-        "RIGHT": "947441957473488916",
-        "UP": "963409197293273108",
-        "DOWN": "963409199549796352",
-        "DOWNLOAD": "947959513032585236",
-        "TICKET": "973253514488860683",
-        "MENU": "976580327835320410",
-        "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"
-        },
-        "CATEGORY": {
-            "CREATE": "787987508465238026",
-            "EDIT": "787987508565770300",
-            "DELETE": "787987508507967488"
-        },
-        "PURGE": {
-            "RED": "729064530797133875",
-            "GREEN": "947443645391441940"
-        },
-        "TITLEUPDATE": "729763053620691044",
-        "TOPICUPDATE": "729763053477953536",
-        "SLOWMODE": {
-            "ON": "973616021304913950",
-            "OFF": "777138171447869480"
-        },
-        "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": {
-        "CREATE": "751762088229339136",
-        "EDIT": "729065958584614925",
-        "DELETE": "729064530432360461",
-        "PIN": "729064530755190894",
-        "REACTION": {
-            "ADD": "",
-            "REMOVE": "",
-            "CLEAR": "729064531468353606"
-        },
-        "PING": {
-            "MASS": "729620608408879124",
-            "EVERYONE": "729064531073957909",
-            "ROLE": "729263536915742770"
-        }
-    },
-    "PUNISH": {
-        "WARN": {
-            "RED": "947433493384806430",
-            "YELLOW": "729764054897524768",
-            "GREEN": "947433504076091424"
-        },
-        "KICK": {
-            "RED": "729764053794422896",
-            "YELLOW": "947429333289562132",
-            "GREEN": "947428786692042764"
-        },
-        "BAN": {
-            "RED": "729764053861400637",
-            "YELLOW": "729764053941223476",
-            "GREEN": "947421674364629022"
-        },
-        "UNBAN": {
-            "RED": "972511610885255259",
-            "YELLOW": "972511620343414794",
-            "GREEN": "729263536840114216"
-        },
-        "MUTE": {
-            "RED": "947555098974883910",
-            "YELLOW": "729764053865463840",
-            "GREEN": "947555107980066866"
-        },
-        "SOFTBAN": "729764053941223476",
-        "VOICEMUTE": "729764054855450697",
-        "CLEARHISTORY": "729764062270980096",
-        "NICKNAME": {
-            "RED": "959762533101731980",
-            "YELLOW": "729064531019694090",
-            "GREEN": "959762533072392202"
-        }
-    },
-    "BADGES": {
-        "NUCLEUSDEVELOPER": "957722888360853595",
-        "CLICKSDEVELOPER": "957722888314683462",
-        "BOT": "776375959108190239",
-        "BOOSTER": "775783766131605545",
-        "HypeSquadOnlineHouse1": "775783765930016789",
-        "HypeSquadOnlineHouse2": "775783766152577095",
-        "HypeSquadOnlineHouse3": "775783766303440937",
-        "Hypesquad": "775783766194126908",
-        "PremiumEarlySupporter": "775783766055452693",
-        "BugHunterLevel1": "775783766252847154",
-        "BugHunterLevel2": "775783766130950234",
-        "Partner": "775783766178005033",
-        "Staff": "775783766383788082",
-        "VerifiedDeveloper": "775783766425600060",
-        "Quarantined": "1059794708638994474",
-        "Spammer": "1059794708638994474",
-        "ActiveDeveloper": "1059795592966053918"
-    },
-    "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"
-        }
-    },
-    "SETTINGS": {
-        "STATS": {
-            "GREEN": "752214059159650396",
-            "RED": "1065677252630675556"
-        }
-    },
-    "GUILD": {
-        "RED": "959779988264079361",
-        "YELLOW": "729763053352124529",
-        "GREEN": "959779988503154698",
-        "EMOJI": {
-            "CREATE": "953035168115982437",
-            "EDIT": "729066518549233795",
-            "DELETE": "953035210121953320"
-        },
-        "SETTINGS": {
-            "GREEN": "752570111063228507",
-            "RED": "1068607393728049253"
-        },
-        "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",
-                "GRAY": {
-                    "ACTIVE": "963123505052934144",
-                    "INACTIVE": "963123495221469194"
-                }
-            },
-            "MIDDLE": {
-                "ACTIVE": "963122679332880384",
-                "INACTIVE": "963122673246937199",
-                "GRAY": {
-                    "ACTIVE": "963123517702955018",
-                    "INACTIVE": "963123511927390329"
-                }
-            },
-            "BOTTOM": {
-                "ACTIVE": "963122691752218624",
-                "INACTIVE": "963122685691453552",
-                "GRAY": {
-                    "ACTIVE": "963123529988059187",
-                    "INACTIVE": "963123523742748742"
-                }
-            }
-        },
-        "SINGLE": {
-            "ACTIVE": "963361162215424060",
-            "INACTIVE": "963361431758176316",
-            "GRAY": {
-                "ACTIVE": "963361204695334943",
-                "INACTIVE": "963361200828198952"
-            }
-        }
-    },
-    "COLORS": {
-        "RED": "875822912802803754",
-        "ORANGE": "875822913104785418",
-        "YELLOW": "875822913079611402",
-        "GREEN": "875822913213841418",
-        "BLUE": "875822912777637889",
-        "PURPLE": "875822913213841419",
-        "PINK": "875822913088020541",
-        "GRAY": "875822913117368340"
-    }
-}
diff --git a/src/utils/database.ts b/src/utils/database.ts
index 51b2bca..c9b6a8d 100644
--- a/src/utils/database.ts
+++ b/src/utils/database.ts
@@ -142,6 +142,11 @@
         // console.log("Guild delete")
         await this.guilds.deleteOne({ id: guild });
     }
+
+    async staffChannels(): Promise<string[]> {
+        const entries = await this.guilds.find({ "logging.staff.channel": {$exists: true}}, { projection: { "logging.staff.channel": 1, _id: 0 } }).toArray();
+        return entries.map(e => e.logging.staff.channel!);
+    }
 }
 
 interface TranscriptEmbed {
diff --git a/src/utils/getEmojiByName.ts b/src/utils/getEmojiByName.ts
index 9bbf61f..19b88b4 100644
--- a/src/utils/getEmojiByName.ts
+++ b/src/utils/getEmojiByName.ts
@@ -1,12 +1,25 @@
-import emojis from "../config/emojis.json" assert { type: "json" };
+import emojis from "../config/emojis.js"
 import _ from "lodash";
 
 interface EmojisIndex {
     [key: string]: string | EmojisIndex | EmojisIndex[];
 }
 
-function getEmojiByName(name: string | null, format?: string): string {
-    if (!name) return "";
+const EMOJIPATHS: string[] = [];
+
+function getEmojiPaths(obj: EmojisIndex, path: string[] = []) {
+    for (const key in obj) {
+        if (typeof obj[key] === "string") {
+            EMOJIPATHS.push([...path, key].join("."));
+        } else {
+            getEmojiPaths(obj[key] as EmojisIndex, [...path, key]);
+        }
+    }
+}
+getEmojiPaths(emojis);
+
+
+function getEmojiByName(name: typeof EMOJIPATHS[number], format?: string): string {
     const parts = name.split(".");
     let id: string | EmojisIndex | EmojisIndex[] | undefined = emojis;
     for (const part of parts) {
