rfork ne
-server=irc.freenode.net
+server=irc.oftc.net
port=6667
realname='<nil>'
target=''
-clonefile=/net/tcp/clone
netdir=()
nick=$user
pass=()
+tls=0
+serverpass=()
fn sighup {
exit 'hang up'
}
fn work {
+ if(~ $#serverpass 1)
+ echo PASS $serverpass > $netdir/data
echo USER $user foo bar :$realname > $netdir/data
echo NICK $nick > $netdir/data
if (~ $#pass 1)
title
echo JOIN $target > $netdir/data
}
+ if(~ $target *,*)
+ target = `{echo $target | awk -F',' '{print $NF}'}
while (cmd=`{read}) {
- msg=()
- out=()
+ s=$status
+ if(~ $s *eof) {
+ echo QUIT : Leaving... > $netdir/data
+ exit
+ }
+ msg=()
+ out=()
switch ($cmd(1)) {
case /!
eval `{mshift $cmd} | while(rc=`{read})echo 'PRIVMSG '^$target^' :' $rc | tee $netdir/data
target=$cmd(2)
title
msg = (JOIN `{mshift $cmd})
+ if(~ $target *,*)
+ target = `{echo $target | awk -F',' '{print $NF}'}
}
case /l
msg = (LIST `{mshift $cmd})
case /x
echo QUIT : Leaving... > $netdir/data
exit
+ case /*
+ echo unknown command
case *
msg = 'PRIVMSG '^$target^' :'^$"cmd
out = '('^$target^') ⇐ '^$"cmd
s = s ":" $i;
printf("%s\n", s);
}'
-
}
fn pretty {
- while (~ `{cat $netdir/status} *Established*) {
- line=`{read}
+ while (line=`{read}) {
switch ($line) {
+ case *PRIVMSG*
+ line = `{echo -n $line | privmsg}
case *JOIN* *QUIT* *PART* *NICK*
line = `{echo -n $line | misc}
case *NOTICE*
line = `{echo -n $line | notice}
- case *PRIVMSG*
- line = `{echo -n $line | privmsg}
case *PING*
echo -n $line | sed 's/PING/PONG/' > $netdir/data
line = ()
exit
}
-fn getip {
- echo $1 ip | ndb/dnsquery | sed 1q | awk '{print $NF}'
-}
-
fn title {
if (! ~ $#winid 0) {
if (test -f /mnt/acme/$winid/ctl)
echo name /$server/$target/-ircrc > /mnt/acme/$winid/ctl
}
if not
- label ircrc $server - $target
+ label $target@$server
}
while (~ $1 -*) {
case -p
port=$2
shift
+ case -P
+ serverpass=$2
+ shift
case -r
realname=$2
shift
case -t
target=$2
shift
+ case -T
+ tls=1
case -*
- echo 'usage: ircrc [-p port] [-r realname] [-t target] [-n nick] [server]' >[1=2]
+ echo 'usage: ircrc [-p port] [-P server password] [-r realname] [-t target] [-n nick] [-T] [server]' >[1=2]
exit 'usage'
}
shift
}
}
-ip=`{getip $server}
-if (~ $#ip 0) {
- echo cant translate $server
- exit 'unknown host'
-}
-
title
userpass=`{auth/userpasswd 'server='^$server^' service=irc user='^$nick >[2]/dev/null}
-if(~ $#userpass 2 && ~ $nick $user) {
+if(~ $#userpass 2) {
nick=$userpass(1)
pass=$userpass(2)
}
-<[4] $clonefile {
- netdir=`{basename -d $clonefile} ^ / ^ `{cat /fd/4}
- echo connect $ip!$port >$netdir/ctl || exit 'cannot connect'
- echo connected to tcp!$ip!$port on $netdir
- cat $netdir/data | tr -d '\r\ 2' | pretty &
- work
+p='/n/ircrc'
+bind '#|' $p
+echo connecting to tcp!$server!$port...
+if(~ $tls 0){
+ aux/trampoline tcp!$server!$port <>$p/data1 >[1=0] &
+}
+if not {
+ tlsclient tcp!$server!$port <>$p/data1 >[1=0] &
}
+netdir=$p
+cat $netdir/data | tr -d '\x2\x8\xd\x1f' | pretty &
+work
+