From 98ec925d1ea0139941977680f4e115de216e5668 Mon Sep 17 00:00:00 2001 From: MeexReay Date: Wed, 25 Jun 2025 19:52:22 +0300 Subject: [PATCH] refactor: change the avatar regex and documentate it --- README.md | 1 + docs/avatars.md | 9 +++++++++ src/chat/gui.rs | 8 ++++---- src/chat/mod.rs | 22 ++++++++++++---------- 4 files changed, 26 insertions(+), 14 deletions(-) create mode 100644 docs/avatars.md diff --git a/README.md b/README.md index 28989f6..090d9b5 100644 --- a/README.md +++ b/README.md @@ -86,6 +86,7 @@ messages starting with a slash are sent to chat only if the `--disable-commands` ## docs - [Compiling](docs/compiling.md) +- [Avatars](docs/avatars.md) - [User agents](docs/user_agents.md) - [Using as crate](docs/crate.md) - [Authenticated mode](docs/auth_mode.md) diff --git a/docs/avatars.md b/docs/avatars.md new file mode 100644 index 0000000..df81f4b --- /dev/null +++ b/docs/avatars.md @@ -0,0 +1,9 @@ +# avatars + +Client just adds this to the end of every message: +``` +\x06!!AR!! +``` + +`\x06` is the control char for ACK \ +`` is the url that leads to the raw image for avatar \ No newline at end of file diff --git a/src/chat/gui.rs b/src/chat/gui.rs index 6691c06..841fe46 100644 --- a/src/chat/gui.rs +++ b/src/chat/gui.rs @@ -934,15 +934,15 @@ fn on_add_message(ctx: Arc, ui: &UiModel, message: String, notify: bool let formatting_enabled = ctx.config(|c| c.formatting_enabled); - let Some(message) = (if formatting_enabled { - sanitize_message(message) + let Some(sanitized) = (if formatting_enabled { + sanitize_message(message.clone()) } else { - Some(message) + Some(message.clone()) }) else { return; }; - if message.is_empty() { + if sanitized.is_empty() { return; } diff --git a/src/chat/mod.rs b/src/chat/mod.rs index f7171d4..abcab9c 100644 --- a/src/chat/mod.rs +++ b/src/chat/mod.rs @@ -34,7 +34,7 @@ lazy_static! { pub static ref DATE_REGEX: Regex = Regex::new(r"\[(.*?)\] (.*)").unwrap(); pub static ref IP_REGEX: Regex = Regex::new(r"\{(.*?)\} (.*)").unwrap(); - pub static ref AVATAR_REGEX: Regex = Regex::new(r"(.*) !!AR!!(.*)").unwrap(); + pub static ref AVATAR_REGEX: Regex = Regex::new(r"(.*) \x06!!AR!!(.*)").unwrap(); pub static ref DEFAULT_USER_AGENT: Regex = Regex::new(r"<(.*?)> (.*)").unwrap(); @@ -271,6 +271,17 @@ pub fn parse_message( return None; } + let (message, avatar) = if let Some(message) = AVATAR_REGEX.captures(&message) { + ( + message.get(1)?.as_str().to_string(), + Some(message.get(2)?.as_str().to_string()), + ) + } else { + (message, None) + }; + + let message = sanitize_message(message)?; + let date = DATE_REGEX.captures(&message)?; let (date, message) = ( date.get(1)?.as_str().to_string(), @@ -304,15 +315,6 @@ pub fn parse_message( (message, None) }; - let (message, avatar) = if let Some(message) = AVATAR_REGEX.captures(&message) { - ( - message.get(1)?.as_str().to_string(), - Some(message.get(2)?.as_str().to_string()), - ) - } else { - (message, None) - }; - Some((date, ip, message, nick, avatar)) }