added messageEdit highlighting
diff --git a/src/events/messageEdit.ts b/src/events/messageEdit.ts
index 270da00..bc85353 100644
--- a/src/events/messageEdit.ts
+++ b/src/events/messageEdit.ts
@@ -1,6 +1,7 @@
 import type { NucleusClient } from "../utils/client.js";
 import type { Message, MessageReference } from "discord.js";
 import type Discord from "discord.js";
+import * as diff from "diff";
 
 export const event = "messageUpdate";
 
@@ -10,10 +11,9 @@
     if (!newMessage.guild) return;
     const { log, isLogging, NucleusColors, entry, renderUser, renderDelta, renderNumberDelta, renderChannel } =
         client.logger;
-
     const replyTo: MessageReference | null = newMessage.reference;
-    let newContent = newMessage.cleanContent.replaceAll("`", "‘");
-    let oldContent = oldMessage.cleanContent.replaceAll("`", "‘");
+    const newContent = newMessage.cleanContent.replaceAll("`", "‘");
+    const oldContent = oldMessage.cleanContent.replaceAll("`", "‘");
     let attachmentJump = "";
     const config = (await client.database.guilds.read(newMessage.guild.id)).logging.attachments.saved[
         newMessage.channel.id + newMessage.id
@@ -62,46 +62,69 @@
     if (!newMessage.editedTimestamp) {
         return;
     }
-    if (newContent.length > 256) newContent = newContent.substring(0, 253) + "...";
-    if (oldContent.length > 256) oldContent = oldContent.substring(0, 253) + "...";
-    const data = {
-        meta: {
-            type: "messageUpdate",
-            displayName: "Message Edited",
-            calculateType: "messageUpdate",
-            color: NucleusColors.yellow,
-            emoji: "MESSAGE.EDIT",
-            timestamp: newMessage.editedTimestamp
-        },
-        separate: {
-            start:
-                (oldContent
-                    ? `**Before:**\n\`\`\`\n${oldContent}\n\`\`\`\n`
-                    : "**Before:** *Message had no content*\n") +
-                (newContent ? `**After:**\n\`\`\`\n${newContent}\n\`\`\`` : "**After:** *Message had no content*"),
-            end: `[[Jump to message]](${newMessage.url})`
-        },
-        list: {
-            messageId: entry(newMessage.id, `\`${newMessage.id}\``),
-            sentBy: entry(newMessage.author.id, renderUser(newMessage.author)),
-            sentIn: entry(newMessage.channel.id, renderChannel(newMessage.channel as Discord.GuildBasedChannel)),
-            sent: entry(newMessage.createdTimestamp, renderDelta(newMessage.createdTimestamp)),
-            edited: entry(newMessage.editedTimestamp, renderDelta(newMessage.editedTimestamp)),
-            mentions: renderNumberDelta(oldMessage.mentions.users.size, newMessage.mentions.users.size),
-            attachments: entry(
-                renderNumberDelta(oldMessage.attachments.size, newMessage.attachments.size),
-                renderNumberDelta(oldMessage.attachments.size, newMessage.attachments.size) + attachmentJump
-            ),
-            repliedTo: entry(
-                replyTo ? replyTo.messageId! : null,
-                replyTo
-                    ? `[[Jump to message]](https://discord.com/channels/${newMessage.guild.id}/${newMessage.channel.id}/${replyTo.messageId})`
-                    : "None"
-            )
-        },
-        hidden: {
-            guild: newMessage.guild.id
-        }
-    };
-    await log(data);
+    const differences = diff.diffChars(oldContent, newContent);
+    console.log(differences);
+    let contentEdit = "";
+    if (differences.map((d) => (d.added || d.removed ? 1 : 0)).filter((f) => f === 1).length > 0) {
+        const green = "\x1B[36m";
+        const red = "\x1B[41m";
+        const skipped = "\x1B[40;33m";
+        const reset = "\x1B[0m";
+        const bold = "\x1B[1m";
+        const cutoff = 20;
+        differences.forEach((part) => {
+            if (!part.added && !part.removed && part.value.length > cutoff) {
+                contentEdit +=
+                    reset +
+                    part.value.slice(0, cutoff / 2) +
+                    skipped +
+                    `(${part.value.length - cutoff} more)` +
+                    reset +
+                    part.value.slice(-(cutoff / 2));
+            } else {
+                if (part.added || part.removed) {
+                    part.value = part.value.replaceAll(" ", "▁");
+                }
+                contentEdit += (part.added ? green : part.removed ? red : reset) + part.value;
+            }
+        });
+        contentEdit = contentEdit.slice(0, 2000);
+        contentEdit += `\n\n${bold}Key:${reset} ${green}Added${reset} | ${red}Removed${reset} | ${skipped}Skipped${reset}`;
+        const data = {
+            meta: {
+                type: "messageUpdate",
+                displayName: "Message Edited",
+                calculateType: "messageUpdate",
+                color: NucleusColors.yellow,
+                emoji: "MESSAGE.EDIT",
+                timestamp: newMessage.editedTimestamp
+            },
+            separate: {
+                start: `\`\`\`ansi\n${contentEdit}\`\`\``,
+                end: `[[Jump to message]](${newMessage.url})`
+            },
+            list: {
+                messageId: entry(newMessage.id, `\`${newMessage.id}\``),
+                sentBy: entry(newMessage.author.id, renderUser(newMessage.author)),
+                sentIn: entry(newMessage.channel.id, renderChannel(newMessage.channel as Discord.GuildBasedChannel)),
+                sent: entry(newMessage.createdTimestamp, renderDelta(newMessage.createdTimestamp)),
+                edited: entry(newMessage.editedTimestamp, renderDelta(newMessage.editedTimestamp)),
+                mentions: renderNumberDelta(oldMessage.mentions.users.size, newMessage.mentions.users.size),
+                attachments: entry(
+                    renderNumberDelta(oldMessage.attachments.size, newMessage.attachments.size),
+                    renderNumberDelta(oldMessage.attachments.size, newMessage.attachments.size) + attachmentJump
+                ),
+                repliedTo: entry(
+                    replyTo ? replyTo.messageId! : null,
+                    replyTo
+                        ? `[[Jump to message]](https://discord.com/channels/${newMessage.guild.id}/${newMessage.channel.id}/${replyTo.messageId})`
+                        : "None"
+                )
+            },
+            hidden: {
+                guild: newMessage.guild.id
+            }
+        };
+        await log(data);
+    }
 }
diff --git a/src/utils/commandRegistration/register.ts b/src/utils/commandRegistration/register.ts
index 5889d54..47f96ae 100644
--- a/src/utils/commandRegistration/register.ts
+++ b/src/utils/commandRegistration/register.ts
@@ -80,7 +80,13 @@
         i++;
         try {
             console.log(`${last}─ ${colors.yellow}Loading event ${file.name}${colors.none}`);
-            const event = await import(`../../../${config.eventsFolder}/${file.name}`);
+
+            let event;
+            try {
+                event = await import(`../../../${config.eventsFolder}/${file.name}`);
+            } catch (e) {
+                console.error(colors.red + e + colors.none);
+            }
 
             client.on(event.event, event.callback.bind(null, client));
 
@@ -98,7 +104,7 @@
             );
         }
     }
-    console.log(`Loaded ${files.length - errors} events (${errors} failed)`);
+    console.log(`${errors ? colors.red : ""}Loaded ${files.length - errors} events (${errors} failed)${colors.none}`);
 }
 
 async function registerContextMenus() {
@@ -179,7 +185,11 @@
         }
     }
 
-    console.log(`Loaded ${messageFiles.length + userFiles.length - errors} context menus (${errors} failed)`);
+    console.log(
+        `${errors ? colors.red : ""}Loaded ${
+            messageFiles.length + userFiles.length - errors
+        } context menus (${errors} failed) ${colors.none}`
+    );
     return commands;
 }