#! /bin/sh db=$1; shift text="$1" cmd=${text%% *} args=${text#* } 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 "$cmd" 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*) key=${args% -=*} val=${args#*-= } 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) 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