Add TIL command for annnna - 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 --- DIR commit cb81412efa9ed5137013987f5b676d9f8785917a DIR parent f7fc5dfb75555f14e781c15a30eeab2581e42e49 HTML Author: Scarlett McAllister <no+reply@roygbyte.com> Date: Mon, 23 Oct 2023 22:53:08 -0300 Add TIL command for annnna Signed-off-by: Annna Robert-Houdin <annna@bitreich.org> Diffstat: M annna-message-common | 18 ++++++++++++++++++ A til | 62 +++++++++++++++++++++++++++++++ 2 files changed, 80 insertions(+), 0 deletions(-) --- DIR diff --git a/annna-message-common b/annna-message-common @@ -1238,6 +1238,24 @@ case "${text}" in taguri="$(printf "%s\n" "${tagline}" | cut -d ' ' -f 2-)" annna-say -s "${server}" -c "${channel}" "${tagname}: ${taguri}" ;; +"${ircuser}, TIL "*) + minimum_learned_len=12 + offset=$(( ${#ircuser} + 6 )) + learned="$(printf "%s\n" "${text}" \ + | cut -c $offset- \ + | sed 's,\t, ,g')" + if [ ${#learned} -le $minimum_learned_len ]; + then + annna-say -s "${server}" -c "${channel}" "${user}, can you explain better what you learned?" + else + result="$(til ${user} "${learned}")" + if [ $? -eq 0 ]; + then + annna-say -s "${server}" -c "${channel}" "${user}, ${result}" + fi + fi + ;; + esac printf '%s' "$text" | awk -v taglimit="$printnhashtags" ' DIR diff --git a/til b/til @@ -0,0 +1,62 @@ +#!/bin/sh + +nick="${1}" +learned="${2}" +tilmodbase="$HOME/bin/modules/til" +tildb="${tilmodbase}/til.txt" + +# Make sure there's a file to store the TILs. +if [ ! -f "${tildb}" ]; +then + mkdir -p "${tilmodbase}" + touch "${tildb}" +fi + +# Make sure file is writable. +if [ ! -w "${tildb}" ]; +then + exit 1 +fi + +# Clean up the learned string. +learned="$(printf "%s" "${learned}" \ + | tr -d [:cntrl:] \ + | sed 's,\n, ,g')" + +# Check to see if its already been learned. +already_learned_entry="$(grep -m 1 "${learned}" "${tildb}")" +if [ $? -eq 0 ]; # Match found (grep exit status of 0) +then + timestamp="$(printf "%s" "${already_learned_entry}" \ + | tr "\t" "\n" \ + | tail -n 1)" + user="$(printf "%s" "${already_learned_entry}" \ + | tr "\t" "\n" \ + | head -n 1)" + learned_text="$(printf "%s" "${already_learned_entry}" \ + | tr "\t" "\n" \ + | tail -n 2 \ + | head -n 1)" + paste="$(printf '%s\n%s learned %s\n' \ + '${timestamp}' \ + '${user}' \ + '${learned_text}' \ +; | /br/bin/bitreich-paste)" + printf "looks like that's already been learned by %s on %s! %s" \ + "${user:-someone}" \ + "$(date -d "${timestamp}" +"%B %d, %Y")" \ + '${paste}' + exit +fi + +# Add the new TIL to the database. +timestamp=$(date -u) +printf "%s\n" "${nick} ${learned} $(date -u)" \ + >> "${tildb}" + +# Count users TILs +til_count="$(grep -cP "^${nick}\t" "${tildb}")" + +# Successful return message. +printf "well done! You've learned ${til_count} things so far! o.o" +exit 0