Big refactoring for automatic server restart, if needed. - annna - Annna the ni… | |
git clone git://bitreich.org/annna/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws6… | |
Log | |
Files | |
Refs | |
Tags | |
README | |
--- | |
commit f3d26842d5e8b3695eb3cd2d0cf8c83ae2f40565 | |
parent e519438ca2a0234f4f0c04fc41dae0160741411a | |
Author: Annna Robert-Houdin <[email protected]> | |
Date: Sat, 1 Jan 2022 21:59:13 +0100 | |
Big refactoring for automatic server restart, if needed. | |
* Make everything configurable in annna base dir. | |
* Have a global file, if annna is running, which is checked everywhere. | |
Diffstat: | |
M annna-channel-service | 7 ++++--- | |
A annna-join-channels | 38 +++++++++++++++++++++++++++++… | |
M annna-message-common | 9 ++++----- | |
M annna-message-gopherproject | 6 ++++-- | |
M annna-message-radio | 6 ++++-- | |
M annna-say | 2 +- | |
M annna-start | 6 ++++-- | |
M annna-start-main | 149 ++++++++++++++---------------… | |
M annna-start-service | 19 ++++++++++--------- | |
M annna-stop | 3 +++ | |
10 files changed, 140 insertions(+), 105 deletions(-) | |
--- | |
diff --git a/annna-channel-service b/annna-channel-service | |
@@ -11,10 +11,11 @@ pgrep -f "$0 $*" | grep -vxq "$$" && exec echo "$0 $* alrea… | |
server="$1" | |
channel="$2" | |
-iiroot="/home/annna/irc" | |
-iibase="/home/annna/irc/${server}" | |
+cfgbase="$(pwd)" | |
+ircbase="$(cat ${cfgbase}/ircbase)" | |
+serverbase="${ircbase}/${server}" | |
-ls "${iibase}/${channel}/out" | entr tail -n 1 "${iibase}/${channel}/out" 2>/d… | |
+ls "${serverbase}/${channel}/out" | entr tail -n 1 "${serverbase}/${channel}/o… | |
| sed -nu 's,[0-9]* <\([^ >]*\)> \(.*\),\1 \2,p' \ | |
| { | |
while read -r user text; | |
diff --git a/annna-join-channels b/annna-join-channels | |
@@ -0,0 +1,38 @@ | |
+#!/bin/sh | |
+ | |
+set -x | |
+ | |
+export PATH="$PATH:/home/annna/bin" | |
+ | |
+cfgbase="$(pwd)" | |
+ircbase="$(cat ${cfgbase}/ircbase)" | |
+ | |
+server="$1" | |
+channels="$2" | |
+ | |
+# Channels | |
+for chan in ${channels}; | |
+do | |
+ printf "/j %s\n" "${chan}" > ${ircbase}/${server}/in | |
+ | |
+ # Do not flood. | |
+ sleep 1 | |
+ | |
+ ## Make sure the pipes are there. | |
+ while [ ! -e "${ircbase}/${server}/${chan}/out" ]; | |
+ do | |
+ [ ! -f ${cfgbase}/running ] && exit 1 | |
+ sleep 1 | |
+ done | |
+ | |
+ ## Make sure we are in the channel, for the services. | |
+ while [ -z "$(grep " JOIN :${chan}" \ | |
+ ${ircbase}/${server}/out)" ]; | |
+ do | |
+ [ ! -f ${cfgbase}/running ] && exit 1 | |
+ sleep 1 | |
+ done | |
+ | |
+ annna-start-service "${server}" "${chan}" | |
+done | |
+ | |
diff --git a/annna-message-common b/annna-message-common | |
@@ -1,17 +1,16 @@ | |
#!/bin/sh | |
-# | |
-# If this gets too unmaintainable, consider adding some directory structure. | |
-# | |
set -x | |
export PATH="/br/bin:$PATH" | |
-modbase="/home/annna/bin/modules" | |
+cfgbase="$(pwd)" | |
+ircbase="$(cat ${cfgbase}/ircbase)" | |
+modbase="$(cat ${cfgbase}/modbase)" | |
+botname="$(cat ${cfgbase}/botname)" | |
hashtagfile="${modbase}/hashtags/hashtags.txt" | |
idontcaredb="${modbase}/i-dont-care/i-dont-care.txt" | |
printnhashtags=2 | |
-botname="annna" | |
brmembers="__20h__ Evil_Bob chripo posativ quinq stateless solene josuah paraz… | |
server="$1" | |
diff --git a/annna-message-gopherproject b/annna-message-gopherproject | |
@@ -1,7 +1,9 @@ | |
#!/bin/sh -e | |
-modbase="/home/annna/bin/modules/" | |
-botname="annna" | |
+cfgbase="$(pwd)" | |
+ircbase="$(cat ${cfgbase}/ircbase)" | |
+modbase="$(cat ${cfgbase}/modbase)" | |
+botname="$(cat ${cfgbase}/botname)" | |
server="$1" | |
channel="$2" | |
diff --git a/annna-message-radio b/annna-message-radio | |
@@ -1,7 +1,9 @@ | |
#!/bin/sh -e | |
-modbase="/home/annna/bin/modules/" | |
-botname="annna" | |
+cfgbase="$(pwd)" | |
+ircbase="$(cat ${cfgbase}/ircbase)" | |
+modbase="$(cat ${cfgbase}/modbase)" | |
+botname="$(cat ${cfgbase}/botname)" | |
server="$1" | |
channel="$2" | |
diff --git a/annna-say b/annna-say | |
@@ -60,7 +60,7 @@ do | |
printf "%s\n" "$@" > "${ircpath}/in" | |
else | |
# Might be a user. | |
- printf "/j %s %s\n" "$c" "$@" > "${ircbase}/in" | |
+ printf "/j %s %s\n" "$c" "$@" > "${ircpath}/in" | |
fi | |
done | |
diff --git a/annna-start b/annna-start | |
@@ -4,9 +4,11 @@ set -x | |
export PATH="$PATH:/home/annna/bin" | |
-cfgbase="/home/annna/annna" | |
-cd ${cfgbase} | |
+#cfgbase="$(pwd)" | |
+cfgbase="$HOME/annna" | |
+touch ${cfgbase}/running | |
+cd ${cfgbase} | |
for server in $(find . -maxdepth 1 -type d | tail -n +2 | cut -c 3-); | |
do | |
[ ! -f ${server}/autoconnect ] && continue | |
diff --git a/annna-start-main b/annna-start-main | |
@@ -4,94 +4,81 @@ set -x | |
export PATH="$PATH:/home/annna/bin" | |
+cfgbase="$(pwd)" | |
+ircbase="$(cat ${cfgbase}/ircbase)" | |
+ | |
server="$1" | |
usetls="$2" | |
-[ $usetls -gt 0 ] && tlsparam=" -t" | |
+[ $usetls -gt 0 ] && tlsparam=" -v -t" | |
port="$3" | |
channels="$4" | |
-rm -rf $HOME/irc/${server} | |
-mkdir -p $HOME/irc/${server} | |
-cd $HOME/irc | |
-rm -f "$HOME/irc/${server}/sock" | |
- | |
-# Connect | |
-#socat openssl:${server}:6697,keepalive,keepcnt=5,keepidle=1,keepintvl=1 \ | |
-# unix-l:$HOME/irc/${server}/sock & | |
-#while [ ! -e $HOME/irc/${server}/sock ]; | |
-#do | |
-# [ -z "$(pgrep socat)" ] && exit 1 | |
-# sleep 0.5 | |
-#done | |
- | |
-# Connection | |
-export ircuser="$(sed -n 's/^user: //p' $HOME/annna/${server}/irc-credentials.… | |
-export ircpass="$(sed -n 's/^pass: //p' $HOME/annna/${server}/irc-credentials.… | |
-#ii -s "${server}" -t -p 6697 -n "$ircuser" -k ircpass \ | |
-# -f "Annna Robert-Houdin" & | |
-if [ -n "${ircuser}" -a -n "${ircpass}" ]; | |
-then | |
- ii -s "${server}" -v${tlsparam} -p 6697 -n "$ircuser" \ | |
- -f "Annna Robert-Houdin" & | |
- iipid=$! | |
-else | |
- ii -s "${server}" -v${tlsparam} -p 6697 \ | |
- -f "Annna Robert-Houdin" & | |
- iipid=$! | |
-fi | |
- | |
{ | |
- # Watch for ii to exit. Then remove the used directory to have all | |
- # services disappear. | |
- while kill -0 $iipid >/dev/null 2>&1; | |
+ while [ -f ${cfgbase}/running ]; | |
do | |
- sleep 10 | |
+ # Connect | |
+ #socat openssl:${server}:6697,keepalive,keepcnt=5,keepidle=1,k… | |
+ # unix-l:${ircbase}/${server}/sock & | |
+ #while [ ! -e ${ircbase}/${server}/sock ]; | |
+ #do | |
+ # [ -z "$(pgrep socat)" ] && exit 1 | |
+ # sleep 0.5 | |
+ #done | |
+ | |
+ rm -rf ${ircbase}/${server} | |
+ mkdir -p ${ircbase}/${server} | |
+ | |
+ # Connection | |
+ export ircuser="$(sed -n 's/^user: //p' ${cfgbase}/${server}/i… | |
+ ircuserparam="" | |
+ [ -n "${ircuserparam}" ] && ircuserparam="-u ${ircuser}" | |
+ | |
+ export ircpass="$(sed -n 's/^pass: //p' ${cfgbase}/${server}/i… | |
+ ircpassparam="" | |
+ [ -n "${ircpassparam}" ] && ircpassparam="-k ircpass" | |
+ | |
+ if [ -f ${cfgbase}/${server}/fullname ]; | |
+ then | |
+ fullname="$(cat ${cfgbase}/${server}/fullname)" | |
+ else | |
+ fullname="Gode" | |
+ fi | |
+ | |
+ #ii -s "${server}" -t -p 6697 -n "$ircuser" -k ircpass \ | |
+ # -f "Annna Robert-Houdin" & | |
+ | |
+ ii -s "${server}"${ircpassparam}${ircuserparam}${tlsparam} \ | |
+ -f "${fullname}" -p ${port} & | |
+ iipid=$! | |
+ | |
+ sleep 5 | |
+ | |
+ ## Waiting for the socket to be available. | |
+ while [ ! -e ${ircbase}/${server}/out ]; | |
+ do | |
+ kill -0 $iipid >/dev/null 2>&1 || exit 1 | |
+ [ ! -f ${cfgbase}/running ] && exit 1 | |
+ sleep 2 | |
+ done | |
+ | |
+ #while [ -z "$(grep " 376 " ${ircbase}/${server}/out)" ]; | |
+ #do | |
+ # [ ! -f ${cfgbase}/running ] && exit 1 | |
+ # sleep 2 | |
+ #done | |
+ | |
+ { | |
+ sleep 2 | |
+ annna-join-channels "${server}" "${channels}" | |
+ } & | |
+ | |
+ # Watch for ii to exit. Then remove the used directory to have… | |
+ # services disappear. | |
+ while kill -0 $iipid >/dev/null 2>&1; | |
+ do | |
+ sleep 10 | |
+ done | |
+ rm -rf ${ircbase}/${server} | |
done | |
- rm -rf $HOME/irc/${server} | |
- | |
} & | |
-## Waiting for the socket to be available. | |
-while [ ! -e $HOME/irc/${server}/out ]; | |
-do | |
- kill -0 $iipid >/dev/null 2>&1 || exit 1 | |
- sleep 0.5 | |
-done | |
- | |
-## Waiting for the motd to have ended so we can send something. | |
-#while [ -z "$(grep "End of /MOTD command" $HOME/irc/${server}/out)" ]; | |
-#do | |
-# if [ -n "$(grep "Nickname is already in use" $HOME/irc/${server}/out)… | |
-# then | |
-# exit 1 | |
-# fi | |
-# | |
-# sleep 0.5 | |
-#done | |
- | |
-sleep 2 | |
- | |
-# Channels | |
-for chan in ${channels}; | |
-do | |
- printf "/j %s\n" "${chan}" > ${server}/in | |
- | |
- # Do not flood. | |
- sleep 1 | |
- | |
- ## Make sure the pipes are there. | |
- while [ ! -e "$HOME/irc/${server}/${chan}/out" ]; | |
- do | |
- sleep 0.5 | |
- done | |
- | |
- ## Make sure we are in the channel, for the services. | |
- while [ -z "$(grep "has joined ${chan}" \ | |
- $HOME/irc/${server}/${chan}/out)" ]; | |
- do | |
- sleep 0.5 | |
- done | |
- | |
- annna-start-service "${server}" "${chan}" | |
-done | |
- | |
diff --git a/annna-start-service b/annna-start-service | |
@@ -15,20 +15,21 @@ export PATH="$PATH:/home/annna/bin" | |
# plan9port | |
export PATH="$PATH:/opt/plan9/bin" | |
-iiroot="/home/annna/irc" | |
-iibase="/home/annna/irc/${server}" | |
+cfgbase="$(pwd)" | |
+ircbase="$(cat ${cfgbase}/ircbase)" | |
+serverbase="${ircbase}/${server}" | |
# Permissions | |
-[ -d ${iiroot} ] && chmod o+rx ${iiroot} | |
-[ -d ${iibase} ] && chmod o+rx ${iibase} | |
+[ -d ${ircbase} ] && chmod o+rx ${ircbase} | |
+[ -d ${serverbase} ] && chmod o+rx ${serverbase} | |
## Channel handlers | |
-[ -d "${iibase}/${channel}" ] \ | |
- && chmod o+rx "${iibase}/${channel}" | |
-[ -p "${iibase}/${channel}/in" ] \ | |
- && chmod o+w "${iibase}/${channel}/in" | |
+[ -d "${serverbase}/${channel}" ] \ | |
+ && chmod o+rx "${serverbase}/${channel}" | |
+[ -p "${serverbase}/${channel}/in" ] \ | |
+ && chmod o+w "${serverbase}/${channel}/in" | |
-if [ -f "${iibase}/${channel}/out" ]; | |
+if [ -f "${serverbase}/${channel}/out" ]; | |
then | |
annna-channel-service "${server}" "${channel}" & | |
fi | |
diff --git a/annna-stop b/annna-stop | |
@@ -5,6 +5,9 @@ | |
export PATH="$PATH:/home/annna/bin" | |
+cfgbase="$HOME/annna" | |
+[ -f "${cfgbase}/running" ] && rm -f "${cfgbase}/running" | |
+ | |
annna-stop-ii | |
annna-stop-checker | |
annna-stop-services |