aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar lancebord 2026-03-08 11:10:08 -0400
committerGravatar lancebord 2026-03-08 11:10:08 -0400
commita16ba83cee9fae27bba0314465ff5f12d0f4e055 (patch)
tree7b80aa36b7310331a08832cd4dd16e1327d125a8
parentcommand line args for config (diff)
make private messages more obvious
-rw-r--r--src/client/handler.rs17
-rw-r--r--src/main.rs6
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);
}
}
}