#! /bin/sh db=$1; shift text="$1" lookup () { if ! cdb -q -m $db "$1"; then t="$1" while [ "$t" != "$n" ]; do n=$t t=${n%[?!. ]} done if [ "$t" != "$1" ]; then cdb -q -m $db "$t" fi fi } case "$text" in !h*) cat <%s\n" ${#key} ${#val} "$key" "$val"; cdb -d $db) | cdb -c $db echo "Okay, $sender, I added a factoid to $key" ;; !r*) args=$(echo "$text" | cut -d\ -f2-) key=$(printf "%s" "$args" | sed 's/ -=.*//') val=$(printf "%s" "$args" | sed 's/.*-= //') re=":$key->.*$val" n=$(cdb -d $db | grep -c "$re") if [ $n -gt 0 ]; then cdb -d $db | grep -a -v ":$key->.*$val" | cdb -c $db echo "Okay, $sender, I removed $n factoids from $key" else echo "Nothing matched, $sender." fi ;; !forget\ *) args=$(echo "$text" | cut -d\ -f2-) cdb -d $db | grep -a -F -v ":$args->" | cdb -c $db echo "I removed all factoids from $args" ;; *) resp=$(lookup "$text" | shuf -n 1 | sed "s/\$sender/$sender/") case "$resp" in "") exit 1 ;; \\*) echo "Someone's up to no good!" ;; \\*) printf "%s\n" "${resp#\\}" ;; :*) printf '\001ACTION %s\001\n' "${resp#:}" ;; *) echo "It's been said that $text is $resp" ;; esac ;; esac