Reduce sloc with more personality logic and bash shortcuts. - 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 0117f54a4a5e061cd6b524514f65b7eb325ebfc1
(DIR) parent ae39f7d89e846846281873d6aaaec0c071b1f956
(HTM) Author: Annna Robert-Houdin <annna@bitreich.org>
Date: Sun, 19 Oct 2025 11:37:26 +0200
Reduce sloc with more personality logic and bash shortcuts.
Thanks seninha for all of your work!
Diffstat:
M annna-message-common | 298 ++++++++++++-------------------
1 file changed, 118 insertions(+), 180 deletions(-)
---
(DIR) diff --git a/annna-message-common b/annna-message-common
@@ -24,6 +24,24 @@ dospoil=0
# Expand meme hashtag and show recommendations.
doexpand=0
+# Personalities.
+declare -A personalities
+add_personality() {
+ printf "@ = %s\n" "$@" >&2
+ for personality in "$@";
+ do
+ personalities+=(["${personality}"]="$1")
+ done
+}
+for person in preacher uplift trump mao teleromeo modem orphet luther sadh_guru;
+do
+ add_personality "${person}"
+done
+add_personality grumpy-fart grumpy
+add_personality santa sannnta
+add_personality satan satannn
+add_personality sigmund-freud freud sigmund
+
regeximatch() {
printf '%s' "$1" | grep -i -E -q "$2"
}
@@ -588,102 +606,10 @@ case "${IRC_PRIVMSG_TEXT}" in
fi
fi;;
"${IRC_USER}, gpt "*)
- # TODO: use modules/prompt-agents
prompt="$(printf "%s\n" "${IRC_PRIVMSG_TEXT}" | cut -c 12- | sed 's,\t, ,g')"
{
annna-say "$(gpt "${prompt}. Please answer short and precise.")"
} & ;;
-"Preacher, "*|"preacher, "*)
- personality="preacher"
- preprompt="$(cat ${ANNNA_MODBASE}/prompt-agents/${personality}.prompt.txt)"
- prompt="$(printf "%s\n" "${IRC_PRIVMSG_TEXT}" | cut -d' ' -f 2- | sed 's,\t, ,g')"
- {
- annna-say "$(gpt "System: ${preprompt}\n User: ${prompt}\n Bot:")"
- } & ;;
-"Uplift, "*|"uplift, "*)
- personality="uplifting"
- preprompt="$(cat ${ANNNA_MODBASE}/prompt-agents/${personality}.prompt.txt)"
- prompt="$(printf "%s\n" "${IRC_PRIVMSG_TEXT}" | cut -d' ' -f 2- | sed 's,\t, ,g')"
- {
- annna-say "$(gpt "System: ${preprompt}\n User: ${prompt}\n Bot:")"
- } & ;;
-"Grumpy, "*|"grumpy, "*)
- personality="grumpy-fart"
- preprompt="$(cat ${ANNNA_MODBASE}/prompt-agents/${personality}.prompt.txt)"
- prompt="$(printf "%s\n" "${IRC_PRIVMSG_TEXT}" | cut -d' ' -f 2- | sed 's,\t, ,g')"
- {
- annna-say "$(gpt "System: ${preprompt}\n User:${prompt}\n Bot:")"
- } & ;;
-"Santa, "*|"Sannnta, "*|"santa, "*|"sannnta, "*)
- personality="santa"
- preprompt="$(cat ${ANNNA_MODBASE}/prompt-agents/${personality}.prompt.txt)"
- prompt="$(printf "%s\n" "${IRC_PRIVMSG_TEXT}" | cut -d' ' -f 2- | sed 's,\t, ,g')"
- {
- annna-say "$(gpt "System: ${preprompt}\n User: ${prompt}\n Bot:")"
- } & ;;
-"Satan, "*|"Satannn, "*|"satan, "*|"satannn, "*)
- personality="satan"
- preprompt="$(cat ${ANNNA_MODBASE}/prompt-agents/${personality}.prompt.txt)"
- prompt="$(printf "%s\n" "${IRC_PRIVMSG_TEXT}" | cut -d' ' -f 2- | sed 's,\t, ,g')"
- {
- annna-say "$(gpt "System: ${preprompt}\n User: ${prompt}\n Bot:")"
- } & ;;
-"Trump, "*|"trump, "*)
- personality="trump"
- preprompt="$(cat ${ANNNA_MODBASE}/prompt-agents/${personality}.prompt.txt)"
- prompt="$(printf "%s\n" "${IRC_PRIVMSG_TEXT}" | cut -d' ' -f 2- | sed 's,\t, ,g')"
- {
- annna-say "$(gpt "System: ${preprompt}\n User: ${prompt}\n Bot:")"
- } & ;;
-"Freud, "*|"freud, "*|"Sigmund, "*|"sigmund, "*)
- personality="sigmund-freud"
- preprompt="$(cat ${ANNNA_MODBASE}/prompt-agents/${personality}.prompt.txt)"
- prompt="$(printf "%s\n" "${IRC_PRIVMSG_TEXT}" | cut -d' ' -f 2- | sed 's,\t, ,g')"
- {
- annna-say "$(gpt "System: ${preprompt}\n User:${prompt}\n Bot:")"
- } & ;;
-"Mao, "*|"mao, "*)
- personality="mao"
- preprompt="$(cat ${ANNNA_MODBASE}/prompt-agents/${personality}.prompt.txt)"
- prompt="$(printf "%s\n" "${IRC_PRIVMSG_TEXT}" | cut -d' ' -f 2- | sed 's,\t, ,g')"
- {
- annna-say "$(gpt "System: ${preprompt}\n User:${prompt}\n Bot:")"
- } & ;;
-"Teleromeo, "*|"teleromeo, "*)
- personality="teleromeo"
- preprompt="$(cat ${ANNNA_MODBASE}/prompt-agents/${personality}.prompt.txt)"
- prompt="$(printf "%s\n" "${IRC_PRIVMSG_TEXT}" | cut -d' ' -f 2- | sed 's,\t, ,g')"
- {
- annna-say "$(gpt "System: ${preprompt}\n User:${prompt}\n Bot:")"
- } & ;;
-"Modem, "*|"modem, "*)
- personality="modem"
- preprompt="$(cat ${ANNNA_MODBASE}/prompt-agents/${personality}.prompt.txt)"
- prompt="$(printf "%s\n" "${IRC_PRIVMSG_TEXT}" | cut -d' ' -f 2- | sed 's,\t, ,g')"
- {
- annna-say "$(gpt "System: ${preprompt}\n User: ${prompt}\n Bot:")"
- } & ;;
-"Sadh_Guru, "*|"Sadh_guru, "*|"sadh_guru, "*|"sadh_Guru, "*)
- personality="sadh_guru"
- preprompt="$(cat ${ANNNA_MODBASE}/prompt-agents/${personality}.prompt.txt)"
- prompt="$(printf "%s\n" "${IRC_PRIVMSG_TEXT}" | cut -d' ' -f 2- | sed 's,\t, ,g')"
- {
- annna-say "$(gpt "System: ${preprompt}\n User: ${prompt}\n Bot:")"
- } & ;;
-"Prophet, "*|"prophet, "*)
- personality="prophet"
- preprompt="$(cat ${ANNNA_MODBASE}/prompt-agents/${personality}.prompt.txt)"
- prompt="$(printf "%s\n" "${IRC_PRIVMSG_TEXT}" | cut -d' ' -f 2- | sed 's,\t, ,g')"
- {
- annna-say "$(gpt "System: ${preprompt}\n User: ${prompt}\n Bot:")"
- } & ;;
-"Luther, "*|"luther, "*)
- personality="luther"
- preprompt="$(cat ${ANNNA_MODBASE}/prompt-agents/${personality}.prompt.txt)"
- prompt="$(printf "%s\n" "${IRC_PRIVMSG_TEXT}" | cut -d' ' -f 2- | sed 's,\t, ,g')"
- {
- annna-say "$(gpt "System: ${preprompt}\n User: ${prompt}\n Bot:")"
- } & ;;
"${IRC_USER}, wolfram is "*)
word="$(printf "%s\n" "${IRC_PRIVMSG_TEXT}" | cut -c 19- | sed 's,\t, ,g')"
case "$word" in
@@ -1129,6 +1055,106 @@ $'\001'"ACTION pokes ${IRC_USER}"$'\001') annna-say "$(echo -e '\001')ACTION pok
| head -n 1)"
outfile="/br/gopher/midi/${midifile##*/}.ogg"
midi-play "$midifile" >"$outfile" && annna-say "${IRC_CMD_USER}, gophers://bitreich.org/9/midi/${outfile##*/}";;
+"${IRC_USER}, please 3d "*)
+ args=$(echo ${IRC_PRIVMSG_TEXT} | cut -d' ' -f 4-)
+ outfile=$(blender-effect $args)
+ annna-say "${IRC_CMD_USER}, gophers://bitreich.org/I/memecache/3d/${outfile}";;
+# https://ednaundharvey.fandom.com/de/wiki/Droggelbecher
+"${IRC_USER}, droggelbecher"*) annna-say "${IRC_CMD_USER}, Droggelbecher!";;
+"${IRC_USER}, thanks"*|"${IRC_USER}, thx"*) annna-say "${IRC_CMD_USER}, you're welcome.";;
+"${IRC_USER}, please simulate "*" simulator"*)
+ q="${IRC_PRIVMSG_TEXT#* please simulate }"
+ q="${q% simulator*}"
+ outpath="/br/gopher/p/"
+ {
+ if outfile="$(simulate-simulator "$q")"
+ then
+ mv "${outfile}" "${outpath}/"
+ annna-say "${IRC_CMD_USER}, gophers://bitreich.org/I/p/${outfile}"
+ fi
+ } & ;;
+"${IRC_USER}, can "*" certify itself?")
+ q="${IRC_PRIVMSG_TEXT#* can }"
+ q="${q% certify*}"
+ {
+ # host:port is needed for tlsgrab
+ curi="$(tlsgrab "${q}")"
+ if [ -n "${curi}" ];
+ then
+ annna-say "${IRC_CMD_USER}, let us see the certificate: ${curi}"
+ fi
+ } & ;;
+"${IRC_USER}, please mine "*" bitreichcoin"*)
+ q="${IRC_PRIVMSG_TEXT#* please mine }"
+ q="${q% bitreichcoin*}"
+ curi="$(bitreichcoin "$q" | /br/bin/bitreich-paste)"
+ annna-say "${IRC_CMD_USER}, please don't spend it all at once: ${curi}";;
+"${IRC_USER}, please hug me.") annna-say "$(echo -e '\001')ACTION hugs ${IRC_CMD_USER}$(echo -e '\001')";;
+"${IRC_USER}, please hug "*" for me.")
+ huggee="${IRC_PRIVMSG_TEXT#* please hug }"
+ huggee="${huggee% for me*}"
+ [ -n "${huggee}" ] && annna-say "$(echo -e '\001')ACTION hugs ${huggee}$(echo -e '\001')";;
+"${IRC_USER}, how many fucks were given?") annna-say "${IRC_CMD_USER}, current fucks given: 0.0";;
+"${IRC_USER}, please slam the door.") annna-say "${IRC_CMD_USER}, *BANG*";;
+"${IRC_USER}, what is my credit score?") annna-say "${IRC_CMD_USER}, your credit score is 0.";;
+"${IRC_USER}, please give me a cookie.")
+ cookie="$(cookie)"
+ [ -n "${cookie}" ] && annna-say "$(echo -e '\001')ACTION gives ${IRC_CMD_USER} a ${cookie} cookie$(echo -e '\001')";;
+"${IRC_USER}, please help"*) annna-say -c "${IRC_CMD_USER}" "See git://bitreich.org/annna for my commands.";;
+"${IRC_USER}, please meme meme meme me"*)
+ randomtag=2
+ while [ $randomtag -gt 0 ];
+ do
+ rtag="$(printf "%s\n" "$(hashtags)" | shuf -n 1)"
+ tagname=""
+ taguri=""
+ for tag in ${rtag};
+ do
+ [ -z "${tagname}" ] && tagname="${tag}" && continue
+ taguri="${tag}"
+ done
+ annna-say "${tagname}: ${taguri}"
+ randomtag=$((randomtag - 1))
+ done;;
+"${IRC_USER}, what's the wheelchair shooter meme again?")
+ tagname="#scrollby"
+ tagline="$(printf "%s\n" "$(hashtags)" | grep "^${tagname} ")"
+ tagname="$(printf "%s\n" "${tagline}" | cut -d ' ' -f 1)"
+ taguri="$(printf "%s\n" "${tagline}" | cut -d ' ' -f 2-)"
+ annna-say "${tagname}: ${taguri}";;
+"${IRC_USER}, TIL "*|"${IRC_USER}, til "*)
+ minimum_learned_len=12
+ offset=$(( ${#IRC_USER} + 6 ))
+ learned="$(printf "%s\n" "${IRC_PRIVMSG_TEXT}" \
+ | cut -c $offset- \
+ | sed 's,\t, ,g')"
+ if [ ${#learned} -le $minimum_learned_len ];
+ then
+ annna-say "${IRC_CMD_USER}, can you explain better what you learned?"
+ else
+ result="$(til ${IRC_CMD_USER} "${learned}")"
+ if [ $? -eq 0 ];
+ then
+ annna-say "${IRC_CMD_USER}, ${result}"
+ fi
+ fi;;
+"${IRC_USER}, what have I learned?")
+ if result=$(til-user ${IRC_CMD_USER});
+ then
+ annna-say "${IRC_CMD_USER}, ${result}"
+ fi;;
+esac
+
+for person in "${!personalities[@]}";
+do case "${IRC_PRIVMSG_TEXT,,}" in
+"${person}, "*)
+ personality="${personalities[${person}]}"
+ preprompt="$(cat ${ANNNA_MODBASE}/prompt-agents/${personality}.prompt.txt)"
+ prompt="$(printf "%s\n" "${IRC_PRIVMSG_TEXT}" | cut -d' ' -f 2- | sed 's,\t, ,g')"
+ { annna-say "$(gpt "System: ${preprompt}\n User: ${prompt}\n Bot:")" } & ;;
+esac done
+
+case "${IRC_PRIVMSG_TEXT}" in
"${IRC_USER}, please antidepressant #"*|\
"${IRC_USER}, please amplify #"*|\
"${IRC_USER}, please amsterdamify #"*|\
@@ -1272,94 +1298,6 @@ $'\001'"ACTION pokes ${IRC_USER}"$'\001') annna-say "$(echo -e '\001')ACTION pok
[ -s "${outpath}" ] && annna-say "${recipient}, gophers://bitreich.org/${outtype}/memecache/filter/${outfile}"
} &
exit 0;;
-"${IRC_USER}, please 3d "*)
- args=$(echo ${IRC_PRIVMSG_TEXT} | cut -d' ' -f 4-)
- outfile=$(blender-effect $args)
- annna-say "${IRC_CMD_USER}, gophers://bitreich.org/I/memecache/3d/${outfile}";;
-# https://ednaundharvey.fandom.com/de/wiki/Droggelbecher
-"${IRC_USER}, droggelbecher"*) annna-say "${IRC_CMD_USER}, Droggelbecher!";;
-"${IRC_USER}, thanks"*|"${IRC_USER}, thx"*) annna-say "${IRC_CMD_USER}, you're welcome.";;
-"${IRC_USER}, please simulate "*" simulator"*)
- q="${IRC_PRIVMSG_TEXT#* please simulate }"
- q="${q% simulator*}"
- outpath="/br/gopher/p/"
- {
- if outfile="$(simulate-simulator "$q")"
- then
- mv "${outfile}" "${outpath}/"
- annna-say "${IRC_CMD_USER}, gophers://bitreich.org/I/p/${outfile}"
- fi
- } & ;;
-"${IRC_USER}, can "*" certify itself?")
- q="${IRC_PRIVMSG_TEXT#* can }"
- q="${q% certify*}"
- {
- # host:port is needed for tlsgrab
- curi="$(tlsgrab "${q}")"
- if [ -n "${curi}" ];
- then
- annna-say "${IRC_CMD_USER}, let us see the certificate: ${curi}"
- fi
- } & ;;
-"${IRC_USER}, please mine "*" bitreichcoin"*)
- q="${IRC_PRIVMSG_TEXT#* please mine }"
- q="${q% bitreichcoin*}"
- curi="$(bitreichcoin "$q" | /br/bin/bitreich-paste)"
- annna-say "${IRC_CMD_USER}, please don't spend it all at once: ${curi}";;
-"${IRC_USER}, please hug me.") annna-say "$(echo -e '\001')ACTION hugs ${IRC_CMD_USER}$(echo -e '\001')";;
-"${IRC_USER}, please hug "*" for me.")
- huggee="${IRC_PRIVMSG_TEXT#* please hug }"
- huggee="${huggee% for me*}"
- [ -n "${huggee}" ] && annna-say "$(echo -e '\001')ACTION hugs ${huggee}$(echo -e '\001')";;
-"${IRC_USER}, how many fucks were given?") annna-say "${IRC_CMD_USER}, current fucks given: 0.0";;
-"${IRC_USER}, please slam the door.") annna-say "${IRC_CMD_USER}, *BANG*";;
-"${IRC_USER}, what is my credit score?") annna-say "${IRC_CMD_USER}, your credit score is 0.";;
-"${IRC_USER}, please give me a cookie.")
- cookie="$(cookie)"
- [ -n "${cookie}" ] && annna-say "$(echo -e '\001')ACTION gives ${IRC_CMD_USER} a ${cookie} cookie$(echo -e '\001')";;
-"${IRC_USER}, please help"*) annna-say -c "${IRC_CMD_USER}" "See git://bitreich.org/annna for my commands.";;
-"${IRC_USER}, please meme meme meme me"*)
- randomtag=2
- while [ $randomtag -gt 0 ];
- do
- rtag="$(printf "%s\n" "$(hashtags)" | shuf -n 1)"
- tagname=""
- taguri=""
- for tag in ${rtag};
- do
- [ -z "${tagname}" ] && tagname="${tag}" && continue
- taguri="${tag}"
- done
- annna-say "${tagname}: ${taguri}"
- randomtag=$((randomtag - 1))
- done;;
-"${IRC_USER}, what's the wheelchair shooter meme again?")
- tagname="#scrollby"
- tagline="$(printf "%s\n" "$(hashtags)" | grep "^${tagname} ")"
- tagname="$(printf "%s\n" "${tagline}" | cut -d ' ' -f 1)"
- taguri="$(printf "%s\n" "${tagline}" | cut -d ' ' -f 2-)"
- annna-say "${tagname}: ${taguri}";;
-"${IRC_USER}, TIL "*|"${IRC_USER}, til "*)
- minimum_learned_len=12
- offset=$(( ${#IRC_USER} + 6 ))
- learned="$(printf "%s\n" "${IRC_PRIVMSG_TEXT}" \
- | cut -c $offset- \
- | sed 's,\t, ,g')"
- if [ ${#learned} -le $minimum_learned_len ];
- then
- annna-say "${IRC_CMD_USER}, can you explain better what you learned?"
- else
- result="$(til ${IRC_CMD_USER} "${learned}")"
- if [ $? -eq 0 ];
- then
- annna-say "${IRC_CMD_USER}, ${result}"
- fi
- fi;;
-"${IRC_USER}, what have I learned?")
- if result=$(til-user ${IRC_CMD_USER});
- then
- annna-say "${IRC_CMD_USER}, ${result}"
- fi;;
esac
printf '%s' "${IRC_PRIVMSG_TEXT}" | awk -v taglimit="$printnhashtags" '