From a16ba83cee9fae27bba0314465ff5f12d0f4e055 Mon Sep 17 00:00:00 2001 From: lancebord Date: Sun, 8 Mar 2026 11:10:08 -0400 Subject: make private messages more obvious --- src/client/handler.rs | 17 +++-------------- src/main.rs | 6 ++++-- 2 files changed, 7 insertions(+), 16 deletions(-) diff --git a/src/client/handler.rs b/src/client/handler.rs index 6b61fed..334240c 100644 --- a/src/client/handler.rs +++ b/src/client/handler.rs @@ -12,18 +12,16 @@ pub fn handle(msg: IrcMessage, state: &mut ClientState, sender: &Sender) -> Vec< let mut events = Vec::new(); match &msg.command { - // --- PING: must reply immediately or the server drops us --- Command::Ping => { let token = msg.params.first().cloned().unwrap_or_default(); sender.send(IrcMessage::new(Command::Pong, vec![token])); } - // --- CAP: capability negotiation --- Command::Cap => { handle_cap(&msg, state, sender); } - // --- 001: welcome — registration complete --- + // 001: welcome Command::Numeric(1) => { let server = msg .prefix @@ -48,7 +46,7 @@ pub fn handle(msg: IrcMessage, state: &mut ClientState, sender: &Sender) -> Vec< }); } - // --- 353: NAMES reply (list of members in a channel) --- + // 353: NAMES Command::Numeric(353) => { // params: [our_nick, ("=" / "*" / "@"), channel, ":member1 member2 ..."] if let (Some(channel), Some(members_str)) = (msg.params.get(2), msg.params.get(3)) { @@ -70,7 +68,7 @@ pub fn handle(msg: IrcMessage, state: &mut ClientState, sender: &Sender) -> Vec< } } - // --- 332: topic on join --- + // 332: topic on join Command::Numeric(332) => { if let (Some(channel), Some(topic)) = (msg.params.get(1), msg.params.get(2)) { state.channel.topic = Some(topic.clone()); @@ -81,7 +79,6 @@ pub fn handle(msg: IrcMessage, state: &mut ClientState, sender: &Sender) -> Vec< } } - // --- JOIN --- Command::Join => { let nick = nick_from_prefix(&msg.prefix); if let Some(channel) = msg.params.first() { @@ -95,7 +92,6 @@ pub fn handle(msg: IrcMessage, state: &mut ClientState, sender: &Sender) -> Vec< } } - // --- PART --- Command::Part => { let nick = nick_from_prefix(&msg.prefix); let channel = msg.params.first().cloned().unwrap_or_default(); @@ -112,7 +108,6 @@ pub fn handle(msg: IrcMessage, state: &mut ClientState, sender: &Sender) -> Vec< }); } - // --- QUIT --- Command::Quit => { let nick = nick_from_prefix(&msg.prefix); let reason = msg.params.first().cloned(); @@ -122,7 +117,6 @@ pub fn handle(msg: IrcMessage, state: &mut ClientState, sender: &Sender) -> Vec< events.push(Event::Quit { nick, reason }); } - // --- NICK --- Command::Nick => { let old_nick = nick_from_prefix(&msg.prefix); let new_nick = msg.params.first().cloned().unwrap_or_default(); @@ -139,7 +133,6 @@ pub fn handle(msg: IrcMessage, state: &mut ClientState, sender: &Sender) -> Vec< events.push(Event::NickChanged { old_nick, new_nick }); } - // --- PRIVMSG / NOTICE --- Command::Privmsg | Command::Notice => { let from = nick_from_prefix(&msg.prefix); let target = msg.params.first().cloned().unwrap_or_default(); @@ -154,7 +147,6 @@ pub fn handle(msg: IrcMessage, state: &mut ClientState, sender: &Sender) -> Vec< }); } - // --- TOPIC (live change) --- Command::Topic => { if let (Some(channel), Some(topic)) = (msg.params.first(), msg.params.get(1)) { state.channel.topic = Some(topic.clone()); @@ -165,7 +157,6 @@ pub fn handle(msg: IrcMessage, state: &mut ClientState, sender: &Sender) -> Vec< } } - // --- Everything else: surface as Raw --- _ => { debug!("Unhandled: {}", serialize(&msg)); events.push(Event::Raw(msg)); @@ -206,7 +197,6 @@ fn handle_cap(msg: &IrcMessage, state: &mut ClientState, sender: &Sender) { } "ACK" => { - // Server acknowledged our capability requests if let Some(caps) = msg.params.last() { for cap in caps.split_whitespace() { state.caps.insert(cap.to_string()); @@ -217,7 +207,6 @@ fn handle_cap(msg: &IrcMessage, state: &mut ClientState, sender: &Sender) { } "NAK" => { - // Server rejected our request — just end negotiation warn!("CAP NAK: {:?}", msg.params.last()); sender.send(IrcMessage::new(Command::Cap, vec!["END".into()])); state.reg = RegistrationState::WaitingForWelcome; diff --git a/src/main.rs b/src/main.rs index 1f6b972..d7df2bb 100644 --- a/src/main.rs +++ b/src/main.rs @@ -170,7 +170,7 @@ fn handle_input(text: &str, app: &mut AppState, client: &mut Client) -> bool { let mut p = args.splitn(2, ' '); if let (Some(target), Some(msg)) = (p.next(), p.next()) { client.privmsg(target, msg); - app.push_system(&format!("→ {}: {}", target, msg)); + app.push_message(&format!("You → {target}:"), &msg); } } other => { @@ -217,8 +217,10 @@ fn handle_irc_event(event: IrcEvent, app: &mut AppState) { let is_self = from == app.nick; if !is_self { // Don't re-echo our own messages (we already pushed them in handle_input) - if target == app.channel || target == app.nick { + if target == app.channel { app.push_message(&from, &text); + } else if target == app.nick { + app.push_message(&format!("{from} → You:"), &text); } } } -- cgit v1.2.3-59-g8ed1b