shithub: irc.myr

Download patch

ref: 2f4b821ef292c55b9296e65308e9e95cdf610a06
parent: 777033348977a2350f2a9d051f33711acabfc79e
author: Ori Bernstein <ori@eigenstate.org>
date: Thu Oct 17 15:44:46 EDT 2019

Fix leave.

--- a/irc.myr
+++ b/irc.myr
@@ -40,6 +40,7 @@
 		| `std.None:	-> void
 		;;
 
+		status(irc, irc.self, "server said: {}\n", ln)
 		(src, cmd, args) = parse(ln)
 		a0 = args.len > 0 ? args[0] : ""
 		uppercase(cmd)
@@ -195,20 +196,22 @@
 }
 
 const delchanuser = {irc, srv, user, args
-	var c
-
 	if args.len == 0
 		-> void
 	;;
-	c = name2chan(irc, srv, args[0])
-	user = displayname(user)
-	match std.lsearch(c.users, user, std.strcmp)
-	| `std.None:    /* ignore */
-	| `std.Some i:
-		std.slfree(c.users[i])
-		std.sldel(&c.users, i)
-		puthist(irc, c, (std.now(), `Part std.sldup(user)))
+	for c : srv.chan
+		if std.strcasecmp(c.name, args[0]) == `std.Equal
+			user = displayname(user)
+			match std.lsearch(c.users, user, std.strcmp)
+			| `std.None:    /* ignore */
+			| `std.Some i:
+				std.slfree(c.users[i])
+				std.sldel(&c.users, i)
+				puthist(irc, c, (std.now(), `Part std.sldup(user)))
+			;;
+		;;
 	;;
+
 }
 
 const fd2srv = {irc, fd
@@ -516,7 +519,7 @@
 	srv = irc.srv[irc.focus]
 	for var i = 0; i < srv.chan.len; i++
 		c = srv.chan[i]
-		if std.strcasecmp(name, c.name) != `std.Equal
+		if std.strcasecmp(name, c.name) == `std.Equal
 			send(irc, srv, "PART {}\r\n", name)
 			std.sldel(&srv.chan, i)
 			if i == srv.focus
--