shithub: gridirc

ref: 792407e805ebd3cbbe140886b5e72a9193a22e1f
dir: /gridirc.rc/

View raw version
#!/bin/rc

rfork en
test -r /srv/gridircmq || {
	/usr/sirjofri/src/gridirc/gridircprep
}
mount /srv/gridircmq /n/chat

nick=user
user=user
prefix=9p.zone
joined=false
pids=()

fn sigint{
	for (i in $pids)
		echo kill>/proc/$i/ctl
	exit
}

fn sighup{
	for (i in $pids)
		echo kill>/proc/$i/ctl
	exit
}

fn loopread{
while(c=`{read})
	echo :$1 PRIVMSG '#'$1 :$"c
}

fn startread{
	{ cat /n/chat/$1 | loopread $1 } &
	pids=($pids $apid)
}

fn loop{
cmd=`{read}
switch($cmd(1)){
case NICK
	nick=$cmd(2)
	#echo nick $cmd(2)
case USER
	user=$cmd(2)
	echo 001 $nick :Welcome $nick!$user@$prefix
case JOIN
	ch=`{echo $cmd(2) | sed 's/^:?#//g'}
	echo :$nick JOIN '#'^$ch
	echo 332 '#'^$ch :Channel $ch
	echo 353 '#'^$ch :$ch $nick
	echo 366 '#'^$ch :End of NAMES list
	startread $ch
case PRIVMSG
	ch=`{echo $cmd(2) | sed 's/^#//g'}
	msg=`{echo $cmd | sed 's/^[^:]*://'}
	echo $nick → $msg >>/n/chat/$ch^WRITE
	#echo msg: $msg
case PING
	echo $cmd | sed 's/PING/PONG/'
case QUIT
	for (i in $pids)
		echo kill>/proc/$i/ctl
	exit
case *
	#echo ignored
}
loop
}

loop