shithub: irc.myr

Download patch

ref: da30c36250f4c39d63b5de5bfd05aab4ad3b4ee6
parent: 631b0296c9ba9a5dd32e62a7e7d0dc707752216b
author: Ori Bernstein <ori@eigenstate.org>
date: Sun Aug 5 10:55:25 EDT 2018

Add /onconn command.

	It should probably be per-sever, but all the commands
	I want to run are idempotent, and it's easier to implement
	this way.

--- a/irc.myr
+++ b/irc.myr
@@ -66,7 +66,7 @@
 		| "QUIT":	deluser(irc, srv, src)
 		| "PART":	delchanuser(irc, srv, src, args)
 		| "366":	shownames(irc, srv, args, 1)
-		| "PRIVMSG":	recievemsg(irc, srv, src, args)
+		| "PRIVMSG":	receivemsg(irc, srv, src, args)
 		| "PING":	send(irc, srv, "PONG :{}\r\n", a0)
 		| "JOIN":	joined(irc, srv, src, args)
 		| "NICK":	renamed(irc, srv, src, args)
@@ -131,7 +131,7 @@
 	;;
 }
 
-const recievemsg = {irc, srv, src, args
+const receivemsg = {irc, srv, src, args
 	var c
 
 	if std.sleq(args[0], srv.nick)
@@ -309,6 +309,7 @@
 		-> void
 	;;
 	match sp[0]
+	| "/onconn":	std.slpush(&irc.onconn, std.sldup(text[sp[0].len:]))
 	| "/connect":	connect(irc, sp[1:])
 	| "/join":	join(irc, sp[1:])
 	| "/leave":	leave(irc, sp[1:])
@@ -327,7 +328,6 @@
 	;;
 	std.slfree(sp)
 }
-
 
 const changenick = {irc, args
 	if args.len != 1
--- a/main.myr
+++ b/main.myr
@@ -17,6 +17,7 @@
 	var fd
 	var cmd
 
+	std.nopipe()
 	home = fileutil.homedir()
 	rcfile = std.pathcat(home, ".ircrc")
 	logdir = std.pathcat(home, ".irclogs")
@@ -61,6 +62,9 @@
 			if !handshake(irc, s)
 				std.close(s.fd)
 				continue
+			;;
+			for j : irc.onconn
+				do(irc, j)
 			;;
 			s.death = 0
 			for c : s.chan
--- a/types.myr
+++ b/types.myr
@@ -11,6 +11,9 @@
 		user	: byte[:]
 		nick	: byte[:]
 
+		/*should probably be per-server, but.. eh. */
+		onconn	: byte[:][:]
+
 		/* input editing */
 		off	: std.size
 		cmd	: char[:]
--