ref: 9b64e70c2e444d167ceb91583e8c3f560a432377
parent: 4e0257ec951bdfa3e9d8c18368099d94000eb4cf
author: Ori Bernstein <ori@markovcorp.com>
date: Thu Nov 23 05:36:28 EST 2017
Be more targeted about nick changes.
--- a/irc.myr
+++ b/irc.myr
@@ -146,8 +146,7 @@
| "PING": send(irc, srv, "PONG :{}\r\n", args[0])| "JOIN": joined(irc, srv, src, args)
| "NICK": renamed(irc, srv, src, args)
- | c:
- status(irc, irc.self, "unknown server command {}", ln)+ | c: status(irc, irc.self, "unknown server command {}", ln);;
std.slfree(args)
std.slfree(ln)
@@ -155,9 +154,18 @@
}
const renamed = {irc, srv, src, args+ var a, b
if args.len > 0
for c : srv.chan
- status(irc, c, "changed nick: {} => {}", displayname(src), displayname(args[0]))+ a = displayname(src)
+ b = displayname(args[0])
+ match std.lsearch(c.users, a, std.strcmp)
+ | `std.None: /* skip */
+ | `std.Some i:
+ std.slfree(c.users[i])
+ c.users[i] = std.sldup(b)
+ status(irc, c, "changed nick: {} => {}", a, b)+ ;;
;;
;;
}
@@ -777,7 +785,7 @@
}
const terminput = {irc, chan- var s, ln
+ var ln
while true
match termdraw.poll(irc.term)
@@ -809,8 +817,7 @@
| `std.Some `termdraw.Kpgdn: scroll(irc, chan, -std.max(1, irc.term.height - 7))
| `std.Some ev:
if !input(irc, ev)
- s = std.fmt("{}", ev)- puthist(irc, irc.self, (std.now(), `Status s))
+ puthist(irc, irc.self, (std.now(), `Status std.fmt("{}", ev)));;
;;
irc.cmddirty = true
--
⑨