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