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