tazirc annotate tazirc @ rev 4
Add tazirc - SliTaz text mode IRC client
author | Christophe Lincoln <pankso@slitaz.org> |
---|---|
date | Tue Jan 14 21:39:39 2014 +0100 (2014-01-14) |
parents | |
children | 710ed4ffb0f8 |
rev | line source |
---|---|
pankso@4 | 1 #!/bin/sh |
pankso@4 | 2 # |
pankso@4 | 3 # TazIRC - SliTaz IRC client: Keep it small! Maybe use a plugins system |
pankso@4 | 4 # We use a single temporary text file to send commands to the IRC server |
pankso@4 | 5 # and handle custom user commands such /q to quit. |
pankso@4 | 6 # |
pankso@4 | 7 # Copyright 2014 (C) SliTaz GNU/Linux - BSD License |
pankso@4 | 8 # Author: Christophe Lincoln <pankso@slitaz.org> |
pankso@4 | 9 # |
pankso@4 | 10 . /lib/libtaz.sh |
pankso@4 | 11 |
pankso@4 | 12 # Internationalization |
pankso@4 | 13 TEXTDOMAIN='tazirc' |
pankso@4 | 14 export TEXTDOMAIN |
pankso@4 | 15 |
pankso@4 | 16 if [ ! "$1" ] || [ ! "$2" ]; then |
pankso@4 | 17 cat << EOT |
pankso@4 | 18 |
pankso@4 | 19 $(boldify "$(gettext 'Usage:')") $(basename $0) [host] [nick] [--option]" |
pankso@4 | 20 |
pankso@4 | 21 $(boldify "$(gettext 'Options:')") |
pankso@4 | 22 --chan= $(gettext "Join specified channel after connection") |
pankso@4 | 23 --mode= $(gettext "Use specified mode. Default: +i") |
pankso@4 | 24 --port= $(gettext "Use specified port. Default: 6667") |
pankso@4 | 25 |
pankso@4 | 26 EOT |
pankso@4 | 27 exit 0 |
pankso@4 | 28 fi |
pankso@4 | 29 |
pankso@4 | 30 # Cmdline --options= are parsed by libtaz.sh |
pankso@4 | 31 [ "$mode" ] || mode="+i" |
pankso@4 | 32 [ "$port" ] || port="6667" |
pankso@4 | 33 host="$1" && nick="$2" |
pankso@4 | 34 send="/tmp/tazirc/${host}.${nick}.$$.txt" |
pankso@4 | 35 |
pankso@4 | 36 # Clean up on exit |
pankso@4 | 37 trap "echo 'Exiting...' && rm -f $send" SIGINT INT TERM |
pankso@4 | 38 trap "kill 0" EXIT |
pankso@4 | 39 mkdir -p $(dirname $send) |
pankso@4 | 40 |
pankso@4 | 41 # |
pankso@4 | 42 # Functions |
pankso@4 | 43 # |
pankso@4 | 44 |
pankso@4 | 45 # Error message: error "Message blabla..." |
pankso@4 | 46 error() { |
pankso@4 | 47 echo "$(colorize 31 'ERROR:') $1" |
pankso@4 | 48 } |
pankso@4 | 49 |
pankso@4 | 50 # |
pankso@4 | 51 # Start: send login commands to connect to server then handle commands |
pankso@4 | 52 # |
pankso@4 | 53 |
pankso@4 | 54 # Introduce me! |
pankso@4 | 55 clear |
pankso@4 | 56 colorize 30 "TazIRC - SliTaz IRC Client" |
pankso@4 | 57 boldify "$(gettext 'Connecting to:') $host $([ $chan ] && echo \#${chan})" |
pankso@4 | 58 cat > ${send} << EOT |
pankso@4 | 59 NICK $nick |
pankso@4 | 60 USER $nick $mode * :$0 |
pankso@4 | 61 EOT |
pankso@4 | 62 [ "$chan" ] && echo "JOIN #${chan}" >> ${send} |
pankso@4 | 63 |
pankso@4 | 64 # Connect and handle server messages |
pankso@4 | 65 (tail -f ${send} | busybox nc ${host} ${port} | while read MESSAGE |
pankso@4 | 66 do |
pankso@4 | 67 debug "$MESSAGE" |
pankso@4 | 68 case "$MESSAGE" in |
pankso@4 | 69 *" PRIVMSG "*) |
pankso@4 | 70 # Display channel messages |
pankso@4 | 71 user=$(echo "${MESSAGE%!*}" | sed s'/://') |
pankso@4 | 72 text=$(echo "${MESSAGE#* :}") |
pankso@4 | 73 echo "[$(date -u '+%R')] $(colorize 35 "$user"): $text" ;; |
pankso@4 | 74 *" MODE "*) |
pankso@4 | 75 echo "${MESSAGE#* }" ;; |
pankso@4 | 76 PING*) |
pankso@4 | 77 # Responding to ping |
pankso@4 | 78 echo "PONG${MESSAGE#PING}" >> ${send} ;; |
pankso@4 | 79 *) |
pankso@4 | 80 echo "${MESSAGE#* :}" ;; |
pankso@4 | 81 esac |
pankso@4 | 82 done) & |
pankso@4 | 83 |
pankso@4 | 84 # Handle user input commands/messages |
pankso@4 | 85 while read COMMAND |
pankso@4 | 86 do |
pankso@4 | 87 # tazirc> prompt ? |
pankso@4 | 88 # while true: echo -en "$(colorize 33 "tazirc")> "; read COMMAND |
pankso@4 | 89 case "$COMMAND" in |
pankso@4 | 90 "") continue ;; |
pankso@4 | 91 /JOIN*|/join*|/j*) |
pankso@4 | 92 chan="$(echo ${COMMAND} | cut -d '#' -f 2)" |
pankso@4 | 93 boldify "$(gettext 'Joining:') #$chan" |
pankso@4 | 94 echo "JOIN #$chan" >> ${send} ;; |
pankso@4 | 95 /QUIT|/quit|/q) |
pankso@4 | 96 boldify "$(gettext 'Diconnecting from:') $host" |
pankso@4 | 97 echo "QUIT" >> ${send} |
pankso@4 | 98 sleep 1 && rm -f ${send} && break ;; |
pankso@4 | 99 /*) |
pankso@4 | 100 echo "${COMMAND#/}" >> ${send} ;; |
pankso@4 | 101 *) |
pankso@4 | 102 if [ ! "$chan" ]; then |
pankso@4 | 103 error "$(gettext 'No channel to send to')" && continue |
pankso@4 | 104 fi |
pankso@4 | 105 echo "[$(date -u '+%R')] $(colorize 34 "$nick"): ${COMMAND}" |
pankso@4 | 106 echo "PRIVMSG #$chan :${COMMAND}" >> ${send} ;; |
pankso@4 | 107 esac |
pankso@4 | 108 done |
pankso@4 | 109 |
pankso@4 | 110 exit 0 |