tazirc annotate tazirc @ rev 12
Tiny edits
author | Paul Issott <paul@slitaz.org> |
---|---|
date | Wed Jan 15 16:04:21 2014 +0000 (2014-01-15) |
parents | 1b813a8d6daf |
children |
rev | line source |
---|---|
pankso@4 | 1 #!/bin/sh |
pankso@4 | 2 # |
paul@12 | 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@9 | 16 # Early function used by --ask |
pankso@9 | 17 logo() { |
pankso@9 | 18 clear |
pankso@9 | 19 colorize 30 "TazIRC - SliTaz IRC Client" |
pankso@9 | 20 } |
pankso@9 | 21 |
paul@12 | 22 # Handle ask mode now. So we set $host $nick and optionally $chan |
pankso@9 | 23 # Ask only for a nick: tazirc --ask --host=irc.freenode.net --chan=slitaz |
pankso@9 | 24 if [ "$ask" ]; then |
pankso@9 | 25 logo |
paul@12 | 26 gettext "Auto-join a channel is optional"; echo "" |
pankso@9 | 27 newline |
pankso@9 | 28 if [ "$host" ]; then |
pankso@9 | 29 gettext "IRC server : "; echo "$host" |
pankso@9 | 30 else |
pankso@9 | 31 gettext "IRC server : "; read host |
pankso@9 | 32 fi |
pankso@9 | 33 if [ ! "$nick" ]; then |
pankso@9 | 34 gettext "Nick name : "; read nick |
pankso@9 | 35 fi |
pankso@9 | 36 if [ ! "$chan" ]; then |
pankso@9 | 37 gettext "Channel : "; read chan |
pankso@9 | 38 fi |
pankso@9 | 39 newline |
pankso@9 | 40 if [ ! "$host" ] || [ ! "$nick" ]; then |
pankso@9 | 41 echo "$(colorize 31 'ERROR:') $(gettext 'empty value')" |
pankso@10 | 42 newline && sleep 2 && exit 0 |
pankso@9 | 43 fi |
pankso@9 | 44 fi |
pankso@9 | 45 |
pankso@9 | 46 # Cmdline --options= are parsed by libtaz.sh |
pankso@9 | 47 [ "$host" ] || host="$1" |
pankso@9 | 48 [ "$nick" ] || nick="$2" |
pankso@9 | 49 [ "$mode" ] || mode="+i" |
pankso@9 | 50 [ "$port" ] || port="6667" |
pankso@9 | 51 send="/tmp/tazirc/${host}.${nick}.$$.txt" |
pankso@9 | 52 |
pankso@9 | 53 # Help and usage without 2 cmdline args |
pankso@9 | 54 if [ ! "$host" ] || [ ! "$nick" ]; then |
pankso@4 | 55 cat << EOT |
pankso@4 | 56 |
pankso@9 | 57 $(boldify "$(gettext 'Usage:')") $(basename $0) [host] [nick] [--option] |
pankso@4 | 58 |
pankso@4 | 59 $(boldify "$(gettext 'Options:')") |
pankso@4 | 60 --chan= $(gettext "Join specified channel after connection") |
pankso@4 | 61 --mode= $(gettext "Use specified mode. Default: +i") |
pankso@4 | 62 --port= $(gettext "Use specified port. Default: 6667") |
pankso@9 | 63 --ask $(gettext "Will ask for server, nick and channel") |
pankso@4 | 64 |
pankso@4 | 65 EOT |
pankso@4 | 66 exit 0 |
pankso@4 | 67 fi |
pankso@4 | 68 |
pankso@4 | 69 # Clean up on exit |
pankso@4 | 70 trap "echo 'Exiting...' && rm -f $send" SIGINT INT TERM |
pankso@4 | 71 trap "kill 0" EXIT |
pankso@4 | 72 mkdir -p $(dirname $send) |
pankso@4 | 73 |
pankso@4 | 74 # |
pankso@4 | 75 # Functions |
pankso@4 | 76 # |
pankso@4 | 77 |
pankso@4 | 78 # Error message: error "Message blabla..." |
pankso@4 | 79 error() { |
pankso@4 | 80 echo "$(colorize 31 'ERROR:') $1" |
pankso@4 | 81 } |
pankso@4 | 82 |
pankso@4 | 83 # |
paul@12 | 84 # Start: send login commands to connect to server, then handle commands |
pankso@4 | 85 # |
pankso@4 | 86 |
pankso@9 | 87 # Hello World! |
pankso@9 | 88 [ ! "$ask" ] && logo |
pankso@4 | 89 boldify "$(gettext 'Connecting to:') $host $([ $chan ] && echo \#${chan})" |
pankso@9 | 90 |
pankso@9 | 91 # Login commands |
pankso@4 | 92 cat > ${send} << EOT |
pankso@4 | 93 NICK $nick |
pankso@4 | 94 USER $nick $mode * :$0 |
pankso@4 | 95 EOT |
pankso@4 | 96 [ "$chan" ] && echo "JOIN #${chan}" >> ${send} |
pankso@4 | 97 |
pankso@4 | 98 # Connect and handle server messages |
pankso@4 | 99 (tail -f ${send} | busybox nc ${host} ${port} | while read MESSAGE |
pankso@4 | 100 do |
pankso@4 | 101 debug "$MESSAGE" |
pankso@4 | 102 case "$MESSAGE" in |
pankso@4 | 103 *" PRIVMSG "*) |
pankso@4 | 104 # Display channel messages |
pankso@4 | 105 user=$(echo "${MESSAGE%!*}" | sed s'/://') |
pankso@4 | 106 text=$(echo "${MESSAGE#* :}") |
pankso@4 | 107 echo "[$(date -u '+%R')] $(colorize 35 "$user"): $text" ;; |
pankso@4 | 108 *" MODE "*) |
pankso@4 | 109 echo "${MESSAGE#* }" ;; |
pankso@4 | 110 PING*) |
pankso@4 | 111 # Responding to ping |
pankso@4 | 112 echo "PONG${MESSAGE#PING}" >> ${send} ;; |
pankso@4 | 113 *) |
pankso@4 | 114 echo "${MESSAGE#* :}" ;; |
pankso@4 | 115 esac |
pankso@4 | 116 done) & |
pankso@4 | 117 |
pankso@4 | 118 # Handle user input commands/messages |
pankso@4 | 119 while read COMMAND |
pankso@4 | 120 do |
pankso@4 | 121 # tazirc> prompt ? |
pankso@4 | 122 # while true: echo -en "$(colorize 33 "tazirc")> "; read COMMAND |
pankso@4 | 123 case "$COMMAND" in |
pankso@4 | 124 "") continue ;; |
pankso@4 | 125 /JOIN*|/join*|/j*) |
pankso@4 | 126 chan="$(echo ${COMMAND} | cut -d '#' -f 2)" |
pankso@4 | 127 boldify "$(gettext 'Joining:') #$chan" |
pankso@4 | 128 echo "JOIN #$chan" >> ${send} ;; |
pankso@4 | 129 /QUIT|/quit|/q) |
paul@12 | 130 boldify "$(gettext 'Disconnecting from:') $host" |
pankso@4 | 131 echo "QUIT" >> ${send} |
pankso@4 | 132 sleep 1 && rm -f ${send} && break ;; |
pankso@4 | 133 /*) |
pankso@4 | 134 echo "${COMMAND#/}" >> ${send} ;; |
pankso@4 | 135 *) |
pankso@4 | 136 if [ ! "$chan" ]; then |
pankso@4 | 137 error "$(gettext 'No channel to send to')" && continue |
pankso@4 | 138 fi |
pankso@4 | 139 echo "[$(date -u '+%R')] $(colorize 34 "$nick"): ${COMMAND}" |
pankso@4 | 140 echo "PRIVMSG #$chan :${COMMAND}" >> ${send} ;; |
pankso@4 | 141 esac |
pankso@4 | 142 done |
pankso@4 | 143 |
pankso@4 | 144 exit 0 |