fix: fix auth messages reading sent from something else than clRAC

This commit is contained in:
MeexReay 2025-06-25 18:46:09 +03:00
parent a0d65b3d81
commit 35a36e3011

View File

@ -6,9 +6,7 @@ use std::{
use crate::connect_rac; use crate::connect_rac;
use super::proto::{ use super::proto::{connect, read_messages, register_user, send_message, send_message_auth};
connect, read_messages, register_user, send_message, send_message_auth,
};
use lazy_static::lazy_static; use lazy_static::lazy_static;
use regex::Regex; use regex::Regex;
@ -37,7 +35,9 @@ lazy_static! {
pub static ref DATE_REGEX: Regex = Regex::new(r"\[(.*?)\] (.*)").unwrap(); pub static ref DATE_REGEX: Regex = Regex::new(r"\[(.*?)\] (.*)").unwrap();
pub static ref IP_REGEX: Regex = Regex::new(r"\{(.*?)\} (.*)").unwrap(); pub static ref IP_REGEX: Regex = Regex::new(r"\{(.*?)\} (.*)").unwrap();
pub static ref COLORED_USERNAMES: Vec<(Regex, String)> = vec![ pub static ref DEFAULT_USER_AGENT: Regex = Regex::new(r"<(.*?)> (.*)").unwrap();
pub static ref USER_AGENTS: Vec<(Regex, String)> = vec![
(Regex::new(r"\u{B9AC}\u{3E70}<(.*?)> (.*)").unwrap(), "#70fa7a".to_string()), // bRAC (Regex::new(r"\u{B9AC}\u{3E70}<(.*?)> (.*)").unwrap(), "#70fa7a".to_string()), // bRAC
(Regex::new(r"\u{2550}\u{2550}\u{2550}<(.*?)> (.*)").unwrap(), "#fa7070".to_string()), // CRAB (Regex::new(r"\u{2550}\u{2550}\u{2550}<(.*?)> (.*)").unwrap(), "#fa7070".to_string()), // CRAB
(Regex::new(r"\u{00B0}\u{0298}<(.*?)> (.*)").unwrap(), "#da70fa".to_string()), // Mefidroniy (Regex::new(r"\u{00B0}\u{0298}<(.*?)> (.*)").unwrap(), "#da70fa".to_string()), // Mefidroniy
@ -286,17 +286,23 @@ pub fn parse_message(
(None, message) (None, message)
}; };
let (message, nick) = match find_username_color(&message) { let (message, nick) = if let Some((nick, message, color)) = DEFAULT_USER_AGENT
Some((name, content, color)) => (content, Some((name, color))), .captures(&message)
None => (message, None), .and_then(|o| parse_user_agent(&o[2].to_string()))
{
(message, Some((nick, color)))
} else if let Some((nick, message, color)) = parse_user_agent(&message) {
(message, Some((nick, color)))
} else {
(message, None)
}; };
Some((date, ip, message, nick)) Some((date, ip, message, nick))
} }
// message -> (nick, content, color) // message -> (nick, content, color)
pub fn find_username_color(message: &str) -> Option<(String, String, String)> { pub fn parse_user_agent(message: &str) -> Option<(String, String, String)> {
for (re, color) in COLORED_USERNAMES.iter() { for (re, color) in USER_AGENTS.iter() {
if let Some(captures) = re.captures(message) { if let Some(captures) = re.captures(message) {
return Some(( return Some((
captures[1].to_string(), captures[1].to_string(),