annna-start-main - annna - Annna the nice friendly bot. HTML git clone git://bitreich.org/annna/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/annna/ DIR Log DIR Files DIR Refs DIR Tags DIR README --- annna-start-main (2654B) --- 1 #!/bin/sh 2 3 export PATH="$PATH:/home/annna/bin" 4 5 cfgbase="$(pwd)" 6 ircbase="$(cat ${cfgbase}/ircbase)" 7 8 server="$1" 9 usetls="$2" 10 [ $usetls -gt 0 ] && tlsparam=" -v -t" 11 port="$3" 12 channels="$4" 13 14 maxtries=10 15 maxnicktries=5 16 { 17 nicktries=0 18 iipid=0 19 while [ -f ${cfgbase}/running ]; 20 do 21 # Connect 22 #socat openssl:${server}:6697,keepalive,keepcnt=5,keepidle=1,keepintvl=1 \ 23 # unix-l:${ircbase}/${server}/sock & 24 #while [ ! -e ${ircbase}/${server}/sock ]; 25 #do 26 # [ -z "$(pgrep socat)" ] && exit 1 27 # sleep 0.5 28 #done 29 30 rm -rf ${ircbase}/${server} 31 mkdir -p ${ircbase}/${server} 32 33 # Connection 34 export ircuser="$(cat ${cfgbase}/${server}/ircuser)" 35 [ -n "${ircuser}" ] && ircuserparam=" -n ${ircuser}" 36 37 export ircpass="$(cat ${cfgbase}/${server}/ircpass 2>/dev/null)" 38 ircpassparam="" 39 [ -n "${ircpass}" ] && ircpassparam=" -k ircpass" 40 41 if [ -f ${cfgbase}/${server}/fullname ]; 42 then 43 fullname="$(cat ${cfgbase}/${server}/fullname)" 44 else 45 fullname="Gode" 46 fi 47 48 # For debugging. 49 #ii -s "${server}"${ircpassparam}${ircuserparam}${tlsparam} \ 50 # -f "${fullname}" -p ${port} & 51 52 [ $iipid -gt 0 ] && kill -KILL $iipid >/dev/null 2>&1 53 54 ii -s "${server}"${ircpassparam}${ircuserparam}${tlsparam} \ 55 -f "${fullname}" -p ${port} >/dev/null 2>&1 & 56 #ii -s "${server}"${ircpassparam}${ircuserparam}${tlsparam} \ 57 # -f "${fullname}" -p ${port} 58 iipid=$! 59 60 sleep 5 61 62 tries=0 63 ## Waiting for the socket to be available. 64 while [ ! -e ${ircbase}/${server}/out ]; 65 do 66 kill -0 $iipid >/dev/null 2>&1 || exit 1 67 [ ! -f ${cfgbase}/running ] && exit 1 68 tries=$(($tries + 1)) 69 [ $tries -gt $maxtries ] && break 70 sleep 4 71 done 72 [ $tries -gt $maxtries ] && continue 73 74 # 433: Nickname is already in use. 75 if [ -n "$(grep " 433 " ${ircbase}/${server}/out)" ]; 76 then 77 nicktries=$(($nicktries + 1)) 78 [ $nicktries -gt $maxnicktries ] && exit 3 79 sleep 30 80 continue 81 fi 82 83 tries=0 84 # Check for end of motd. 85 while [ -z "$(grep " 376 " ${ircbase}/${server}/out)" ]; 86 do 87 [ ! -f ${cfgbase}/running ] && exit 1 88 # Sometimes the connection is too fast and the ii USER 89 # and NICK is slurped. 90 printf "USER %s\r\nUSER %s localhost %s :%s" \ 91 "${ircuser}" "${ircuser}" "$(hostname)" \ 92 "${fullname}" \ 93 > "${ircbase}/${server}/in" 94 tries=$(($tries + 1)) 95 [ $tries -gt $maxtries ] && break 96 sleep 2 97 done 98 [ $tries -gt $maxtries ] && continue 99 100 { 101 annna-join-channels "${server}" "${channels}" 102 } & 103 104 # Watch for ii to exit. Then remove the used directory to have all 105 # services disappear. 106 while kill -0 $iipid >/dev/null 2>&1; 107 do 108 sleep 30 109 done 110 rm -rf ${ircbase}/${server} 111 done 112 } & 113