diff --git a/package.json b/package.json
index 2ff313c..08ca2f2 100644
--- a/package.json
+++ b/package.json
@@ -5,7 +5,6 @@
         "@tensorflow/tfjs": "^3.18.0",
         "@tensorflow/tfjs-node": "^3.18.0",
         "@total-typescript/ts-reset": "^0.3.7",
-        "@tsconfig/node18-strictest-esm": "^1.0.0",
         "@types/gm": "^1.25.0",
         "@types/node": "^18.14.6",
         "@ungap/structured-clone": "^1.0.1",
@@ -82,7 +81,7 @@
         "prettier": "^2.7.1",
         "prettier-eslint": "^15.0.1",
         "tsc-suppress": "^1.0.7",
-        "typescript": "^4.9.4",
+        "typescript": "^5.0.0",
         "yarn-audit-fix": "^9.3.9"
     }
 }
diff --git a/src/commands/mod/about.ts b/src/commands/mod/about.ts
index 6f8b74c..9630288 100644
--- a/src/commands/mod/about.ts
+++ b/src/commands/mod/about.ts
@@ -444,7 +444,7 @@
 
 const check = (interaction: CommandInteraction) => {
     const member = interaction.member as GuildMember;
-    if (!member.permissions.has("ModerateMembers")) return "You do not have the *Moderate Members* permission";
+    if (!member.permissions.has("ManageMessages")) return "You do not have the *Manage Messages* permission";
     return true;
 };
 
diff --git a/src/commands/mod/warn.ts b/src/commands/mod/warn.ts
index 0424d48..7790fa8 100644
--- a/src/commands/mod/warn.ts
+++ b/src/commands/mod/warn.ts
@@ -300,7 +300,7 @@
 const check = (interaction: CommandInteraction | ButtonInteraction, partial: boolean = false, target?: GuildMember) => {
     if (!interaction.guild) return;
     const member = interaction.member as GuildMember;
-    if (!member.permissions.has("ModerateMembers")) return "You do not have the *Moderate Members* permission";
+    if (!member.permissions.has("ManageMessages")) return "You do not have the *Manage Messages* permission";
     if (partial) return true;
     let apply: GuildMember;
     if (interaction.isButton()) {
diff --git a/src/commands/settings/automod.ts b/src/commands/settings/automod.ts
index a854fc5..5b4198f 100644
--- a/src/commands/settings/automod.ts
+++ b/src/commands/settings/automod.ts
@@ -1092,29 +1092,29 @@
         } else {
             switch (i.values[0]) {
                 case "invites": {
-                    config.invite = await inviteMenu(i, m, _.isEqual(config, current), config.invite);
+                    current.invite = await inviteMenu(i, m, _.isEqual(config, current), current.invite);
                     break;
                 }
                 case "mentions": {
-                    config.pings = await mentionMenu(i, m, _.isEqual(config, current), config.pings);
+                    current.pings = await mentionMenu(i, m, _.isEqual(config, current), current.pings);
                     break;
                 }
                 case "words": {
-                    config.wordFilter = await wordMenu(i, m, _.isEqual(config, current), config.wordFilter);
+                    current.wordFilter = await wordMenu(i, m, _.isEqual(config, current), current.wordFilter);
                     break;
                 }
                 case "malware": {
-                    config.malware = !config.malware;
+                    current.malware = !current.malware;
                     break;
                 }
                 case "images": {
-                    const next = await imageMenu(i, m, _.isEqual(config, current), config.images);
-                    config.images = next;
+                    const next = await imageMenu(i, m, _.isEqual(config, current), current.images);
+                    current.images = next;
                     break;
                 }
                 case "clean": {
                     const next = await cleanMenu(i, m, _.isEqual(config, current), config.clean);
-                    config.clean = next;
+                    current.clean = next;
                     break;
                 }
             }
diff --git a/src/reflex/scanners.ts b/src/reflex/scanners.ts
index cdfb56b..0ae285a 100644
--- a/src/reflex/scanners.ts
+++ b/src/reflex/scanners.ts
@@ -219,7 +219,7 @@
     // Does the username contain filtered words
     // Does the nickname contain filtered words
     let nameCheck;
-    if(member.nickname) {
+    if (member.nickname) {
         nameCheck = TestString(member.nickname ?? "", loose, strict, guildData.filters.wordFilter.enabled);
     } else {
         nameCheck = TestString(member.user.username, loose, strict, guildData.filters.wordFilter.enabled);
@@ -239,13 +239,7 @@
     // Does the nickname contain an invite
     const nicknameInviteCheck =
         guildData.filters.invite.enabled && /discord\.gg\/[a-zA-Z0-9]+/gi.test(member.nickname ?? "");
-    if (
-        nameCheck !== null ||
-        avatarCheck ||
-        inviteCheck ||
-        nicknameInviteCheck ||
-        avatarTextCheck !== null
-    ) {
+    if (nameCheck !== null || avatarCheck || inviteCheck || nicknameInviteCheck || avatarTextCheck !== null) {
         const infractions = [];
         if (nameCheck !== null) {
             infractions.push(`Name contains a ${nameCheck.type}ly filtered word (${nameCheck.word})`);
diff --git a/tsconfig.json b/tsconfig.json
index 1df2f7d..1da4a03 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -1,6 +1,19 @@
 {
-    "extends": "@tsconfig/node18-strictest-esm/tsconfig.json",
+    "$schema": "https://json.schemastore.org/tsconfig",
+    "display": "Node 18 + ESM + Strictest",
     "compilerOptions": {
+        "lib": ["es2022"],
+        "strict": true,
+        "exactOptionalPropertyTypes": true,
+        "noFallthroughCasesInSwitch": true,
+        "noImplicitOverride": true,
+        "noPropertyAccessFromIndexSignature": true,
+        "noUncheckedIndexedAccess": true,
+        "noUnusedLocals": true,
+        "noUnusedParameters": true,
+        "forceConsistentCasingInFileNames": true,
+        "allowUnusedLabels": false,
+        "allowUnreachableCode": false,
         "module": "NodeNext",
         "target": "es2020",
         "sourceMap": true,
@@ -11,7 +24,8 @@
         "resolveJsonModule": true,
         "moduleResolution": "NodeNext",
         "skipLibCheck": true,
-        "noImplicitReturns": false
+        "noImplicitReturns": false,
+        "checkJs": true
     },
     "include": ["src/**/*", "src/*", "src/config/main.d.ts", "src/config/main.ts"],
     "exclude": ["src/Unfinished/**/*", "src/reflex/nsfwjs/**/*"]
