Fix major bugs in annna. - annna - Annna the nice friendly bot.
 (HTM) git clone git://bitreich.org/annna/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/annna/
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) Tags
 (DIR) README
       ---
 (DIR) commit 8ef63faa063c71c42142e1bf2892e8ccafacbb6c
 (DIR) parent bc22021f5895ec90dda9183e932989364fbe0f63
 (HTM) Author: Annna Robert-Houdin <annna@bitreich.org>
       Date:   Mon,  2 Apr 2018 08:31:12 +0200
       
       Fix major bugs in annna.
       
       * On startup annna will listen to commands.
       * If only some channels are set to be joined don't barf.
       * Checking for channels is streamlined.
       * Check for ii and socat so the connection really works.
       
       Diffstat:
         M annna-start-checker                 |       6 ++++--
         M annna-start-checker-dbg             |       6 ++++--
         M annna-start-main                    |       6 ++++++
         M annna-start-services                |      33 +++++++++++++++++++++++--------
       
       4 files changed, 39 insertions(+), 12 deletions(-)
       ---
 (DIR) diff --git a/annna-start-checker b/annna-start-checker
       @@ -9,10 +9,12 @@ export PATH="$PATH:/home/annna/bin"
        while /bin/true;
        do
                # Is annna still in her world?
       -        pid="$(pgrep -U annna -x socat)"
       +        socatpid="$(pgrep -U annna -x socat)"
       +        iipid="$(pgrep -U annna -x ii)"
        
       -        if [ -z "$pid" ];
       +        if [ -z "$socatpid" -o -z "$iipid" ];
                then
       +                annna-stop-socat >/dev/null 2>&1
                        annna-stop-services >/dev/null 2>&1
                        annna-start-main >/dev/null 2>&1
                fi
 (DIR) diff --git a/annna-start-checker-dbg b/annna-start-checker-dbg
       @@ -8,11 +8,13 @@ export PATH="$PATH:/home/annna/bin"
        while /bin/true;
        do
                # Is annna still in her world?
       -        pid="$(pgrep -U annna -x socat)"
       +        socatpid="$(pgrep -U annna -x socat)"
       +        iipid="$(pgrep -U annna -x ii)"
        
       -        if [ -z "$pid" ];
       +        if [ -z "$socatpid" -o -z "$iipid" ];
                then
                        printf "checker: Starting annna.\n"
       +                sh -x annna-stop-socat
                        sh -x annna-stop-services
                        sh -x annna-start-main
                fi
 (DIR) diff --git a/annna-start-main b/annna-start-main
       @@ -10,6 +10,8 @@ export PATH="$PATH:/home/annna/bin"
        channels="#bitreich-con #bitreich-radio
                #bitreich-scm #bitreich-en #bitreich-de
                #bitreich-fr #bitreich-cooking"
       +# Testing
       +#channels="#bitreich-radio"
        
        rm -rf $HOME/irc
        mkdir -p $HOME/irc
       @@ -21,6 +23,7 @@ socat openssl:chat.freenode.net:6697,keepalive,keepcnt=5,keepidle=1,keepintvl=1 
                unix-l:$HOME/freenode.sock &
        while [ ! -e $HOME/freenode.sock ];
        do
       +        [ -z "$(pgrep socat)" ] && exit 1
                sleep 0.5
        done
        
       @@ -72,6 +75,9 @@ for chan in ${channels};
        do
                printf "/j %s\n" "${chan}" > chat.freenode.net/in
        
       +        # Do not flood.
       +        sleep 1
       +
                ## Make sure the pipes are there.
                while [ ! -e "$HOME/irc/chat.freenode.net/${chan}/out" ];
                do
 (DIR) diff --git a/annna-start-services b/annna-start-services
       @@ -4,30 +4,42 @@
        # If this gets too unmaintainable, consider adding some directory structure.
        #
        
       +set -x
       +
        export PATH="$PATH:/home/annna/bin"
        
        # Bitreich members who are allowed to run certain commands.
        brmembers="__20h__ Evil_Bob chripo posativ quinq stateless solene josuah parazyd"
        
        botname="annna"
       +iiroot="/home/annna/irc"
        iibase="/home/annna/irc/chat.freenode.net"
        
        # Permissions
       -chmod o+rx $HOME/irc
       -chmod o+rx $HOME/irc/chat.freenode.net
       +[ -d ${iiroot} ] && chmod o+rx ${iiroot}
       +[ -d ${iibase} ] && chmod o+rx ${iibase}
        ## EN Channel (this script)
       -chmod o+rx "$HOME/irc/chat.freenode.net/#bitreich-en"
       -chmod o+w "$HOME/irc/chat.freenode.net/#bitreich-en/in"
       +[ -d "${iibase}/#bitreich-en" ] \
       +        && chmod o+rx "${iibase}/#bitreich-en"
       +[ -f "${iibase}/#bitreich-en/in" ] \
       +        && chmod o+w "${iibase}/#bitreich-en/in"
        ## SCM (/scm/post-receive)
       -chmod o+rx "$HOME/irc/chat.freenode.net/#bitreich-scm"
       -chmod o+w "$HOME/irc/chat.freenode.net/#bitreich-scm/in"
       +[ -d "${iibase}/#bitreich-scm" ] \
       +        && chmod o+rx "${iibase}/#bitreich-scm"
       +[ -f "${iibase}/#bitreich-scm/in" ] \
       +        && chmod o+w "${iibase}/#bitreich-scm/in"
        ## Radio (/br/radio/playlist.sh + this script)
       -chmod o+rx "$HOME/irc/chat.freenode.net/#bitreich-radio"
       -chmod o+w "$HOME/irc/chat.freenode.net/#bitreich-radio/in"
       +[ -d "${iibase}/#bitreich-radio" ] \
       +        && chmod o+rx "${iibase}/#bitreich-radio"
       +[ -f "${iibase}/#bitreich-radio/in" ] \
       +        && chmod o+w "${iibase}/#bitreich-radio/in"
        
       +if [ -f "${iibase}/#bitreich-radio/out" ];
       +then
        # bitreich-radio
        {
                ls "${iibase}/#bitreich-radio/out" | entr tail -n 1 "${iibase}/#bitreich-radio/out" \
       +                | grep -v --line-buffered -e '[0-9]* -!- .*' \
                        | sed -u 's,[0-9]* <\([^ >]*\)> \(.*\)$,\1\n\2,' \
                        | {
                while read user;
       @@ -52,10 +64,14 @@ chmod o+w "$HOME/irc/chat.freenode.net/#bitreich-radio/in"
                done
                }
        } &
       +fi
        
        # bitreich-en
       +if [ -f "${iibase}/#bitreich-en/out" ];
       +then
        {
                ls "${iibase}/#bitreich-en/out" | entr tail -n 1 "${iibase}/#bitreich-en/out" \
       +                | grep -v --line-buffered -e '[0-9]* -!- .*' \
                        | sed -u 's,[0-9]* <\([^ >]*\)> \(.*\)$,\1\n\2,' \
                        | {
                while read user;
       @@ -187,4 +203,5 @@ chmod o+w "$HOME/irc/chat.freenode.net/#bitreich-radio/in"
                done
                }
        } &
       +fi