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