I'm not sure if this works yet. DO NOT PR UNTIL TESTED
diff --git a/src/events/messageCreate.ts b/src/events/messageCreate.ts
index cc69bf0..798678d 100644
--- a/src/events/messageCreate.ts
+++ b/src/events/messageCreate.ts
@@ -5,11 +5,19 @@
 import getEmojiByName from "../utils/getEmojiByName.js";
 import client from "../utils/client.js";
 import { callback as statsChannelUpdate } from "../reflex/statsChannelUpdate.js";
-import { ChannelType, Message, ThreadChannel } from "discord.js";
+import { ChannelType, GuildMember, Message, ThreadChannel } from "discord.js";
 import singleNotify from "../utils/singleNotify.js";
 
 export const event = "messageCreate";
 
+function checkUserForExceptions(user: GuildMember, exceptions: { roles: string[]; users: string[] }) {
+    if (exceptions.users.includes(user.id)) return true;
+    for (const role of user.roles.cache.values()) {
+        if (exceptions.roles.includes(role.id)) return true;
+    }
+    return false;
+}
+
 export async function callback(_client: NucleusClient, message: Message) {
     if (!message.guild) return;
     const config = await client.memory.readGuildInfo(message.guild.id);
@@ -45,10 +53,7 @@
 
     const content = message.content.toLowerCase() || "";
     if (config.filters.clean.channels.includes(message.channel.id)) {
-        const memberRoles = message.member!.roles.cache.map((role) => role.id);
-        const roleAllow = config.filters.clean.allowed.roles.some((role) => memberRoles.includes(role));
-        const userAllow = config.filters.clean.allowed.users.includes(message.author.id);
-        if (!roleAllow && !userAllow) return await message.delete();
+        if (!checkUserForExceptions(message.member!, config.filters.clean.allowed)) return await message.delete();
     }
 
     const filter = getEmojiByName("ICONS.FILTER");
@@ -72,7 +77,10 @@
     };
 
     if (config.filters.invite.enabled) {
-        if (!config.filters.invite.allowed.channels.includes(message.channel.id)) {
+        if (
+            !config.filters.invite.allowed.channels.includes(message.channel.id) ||
+            !checkUserForExceptions(message.member!, config.filters.invite.allowed)
+        ) {
             if (/(?:https?:\/\/)?discord(?:app)?\.(?:com\/invite|gg)\/[a-zA-Z0-9]+\/?/.test(content)) {
                 messageException(message.guild.id, message.channel.id, message.id);
                 await message.delete();
@@ -149,7 +157,11 @@
                         config.filters.wordFilter.words.loose,
                         config.filters.wordFilter.words.strict
                     );
-                    if (check !== null) {
+                    if (
+                        check !== null &&
+                        (!checkUserForExceptions(message.member!, config.filters.wordFilter.allowed) ||
+                            !config.filters.wordFilter.allowed.channels.includes(message.channel.id))
+                    ) {
                         messageException(message.guild.id, message.channel.id, message.id);
                         await message.delete();
                         const data = {
@@ -264,7 +276,11 @@
         return log(data);
     }
 
-    if (config.filters.wordFilter.enabled) {
+    if (
+        config.filters.wordFilter.enabled &&
+        (!checkUserForExceptions(message.member!, config.filters.wordFilter.allowed) ||
+            !config.filters.wordFilter.allowed.channels.includes(message.channel.id))
+    ) {
         const check = TestString(
             content,
             config.filters.wordFilter.words.loose,
@@ -297,7 +313,11 @@
         }
     }
 
-    if (config.filters.pings.everyone && message.mentions.everyone) {
+    if (
+        config.filters.pings.everyone &&
+        message.mentions.everyone &&
+        !checkUserForExceptions(message.member!, config.filters.pings.allowed)
+    ) {
         if (!(await isLogging(message.guild.id, "messageMassPing"))) return;
         const data = {
             meta: {
@@ -318,7 +338,7 @@
         };
         return log(data);
     }
-    if (config.filters.pings.roles) {
+    if (config.filters.pings.roles && !checkUserForExceptions(message.member!, config.filters.pings.allowed)) {
         for (const roleId in message.mentions.roles) {
             if (!config.filters.pings.allowed.roles.includes(roleId)) {
                 messageException(message.guild.id, message.channel.id, message.id);
@@ -347,7 +367,11 @@
             }
         }
     }
-    if (message.mentions.users.size >= config.filters.pings.mass && config.filters.pings.mass) {
+    if (
+        message.mentions.users.size >= config.filters.pings.mass &&
+        config.filters.pings.mass &&
+        !checkUserForExceptions(message.member!, config.filters.pings.allowed)
+    ) {
         messageException(message.guild.id, message.channel.id, message.id);
         await message.delete();
         if (!(await isLogging(message.guild.id, "messageMassPing"))) return;