#!/usr/local/bin/zsh export NICK=repppp USER=rep wh='\e[0;37m' WH='\e[1;37m' bk='\e[0;30m' bl='\e[0;34m' cy='\e[0;36m' CY='\e[1;36m' on_exit() { tcp_close -q -s irc echo exiting exit 1 } out() { #echo '->' $1 tcp_send -s irc $1 } process_irc() { tcp_read -qs irc > /dev/null ret=$? if [ $ret -eq 2 ]; then return 0 fi if [ ! $ret -eq 0 ]; then return 1 fi case $TCP_LINE in PING*) serv=`echo $TCP_LINE | cut -d ' ' -f 2` out "pong $serv" return 0 ;;; esac cmd=`echo $TCP_LINE | cut -d ' ' -f 2` nick=`echo $TCP_LINE | cut -d '!' -f 1 | sed s,:,,` addr=`echo $TCP_LINE | cut -d ' ' -f 1 | cut -d '!' -f 2` chan=`echo $TCP_LINE | cut -d ' ' -f 3` msg=`echo $TCP_LINE | cut -d : -f 3-` date=`date +%H:%M` case $cmd in JOIN) echo "$date ${bl}<${WH}!${bl}>${CY} $nick ${bk}[${cy}${addr}${bk}]${wh} has joined ${WH}${msg}${wh}" ;; PRIVMSG) echo "$date ${bk}<${wh}${nick}${bk}:${wh}${chan}${bk}>${wh} $msg" ;; QUIT) echo "$date ${bl}<${WH}!${bl}>${cy} $nick ${bk}[${cy}${addr}${bk}]${wh} has quit ${bk}[${wh}${msg}${bk}]{$wh}" ;; *) echo $TCP_LINE ;; esac return 0 } process_term() { local line read -t line if [ $? -eq 1 ]; then return 0 fi date=`date +%H:%M` case $line in /*) echo $line | grep '^/join' > /dev/null if [ $? -eq 0 ]; then export curr_chan=`echo $line | awk '{ print $2 }'` echo curr_chan $curr_chan fi out "`echo $line | sed 's,^/,,'`" ;; *) out "privmsg $curr_chan :$line" echo "$date ${bk}<${WH}${NICK}${bk}:${WH}${curr_chan}${bk}>${wh} $line" ;; esac return 0 } trap on_exit 1 2 3 15 autoload -U tcp_open export TCP_PROMPT='' tcp_open -zq $1 6666 irc out "user $USER $USER $USER $USER" out "nick $NICK" while [ 1 ]; do process_irc if [ $? -eq 1 ]; then break fi process_term if [ $? -eq 1 ]; then break fi zselect 1 ${tcp_by_name[irc]} done on_exit