#!/usr/bin/env ash chan="$1"; serv="${serv:-irc.freenode.net}"; cd "/home/zgrep/offtopiabday" || exit 1; var() { printf '%s\n' "$1"; } say() { cat - > "$serv/$chan/in"; } alias safe="sed 's%^/%//%'" log="$serv/$chan/out"; irc() { tail -n 0 -f "$serv/$chan/out" | while read -r l; do var "$l" | sed 's/^[^<]*//'; done; } reg() { r=$(var "$1" | sed 's%/%\\\/%g'); r=$(var "$2" | perl -ne '@m=m/'"$r"'/ or exit 1;printf join "\n", @m'); } hreg() { reg "$(var "$1" | sed 's/happybot/(?:[hH][aA][pP][pP][yY]|[hH][aA][tT][eE])[bB][oO][tT]/g')" "$2" } m() { var "$r" | sed -n "$1p"; } zwsp=$(python3 -c 'print("\u200b",end="")'); zwsp() { cat - | sed 's%^\(/m \)\?%\1'"$zwsp"'%'; } x01=$(python3 -c 'print("\x01",end="")'); zirc() { irc | while read -r n l; do l="$(var "$l" | grep -vE "^${zwsp}|^${x01}ACTION ${zwsp}")" if [ -z "$l" ]; then continue else var "$n $l" fi done } nth() { case "$1" in "11" | "12" | "13") var "${1}th"; ;; *"1") var "${1}st"; ;; *"2") var "${1}nd"; ;; *"3") var "${1}rd"; ;; *) var "${1}th"; ;; esac; } s() { if [ "$1" == "1" ]; then var ""; else var "s"; fi; } ns() { var "$1$(s "$1")"; } rand() { if [ -z "$1" ]; then f="-"; else f="$1"; fi perl -e 'srand; rand($.) < 1 && ($line = $_) while <>; print $line;' "$f" } person() { shuf -n100 "$serv/$chan/out" | grep -v -- '-!-' | rand | awk '{print$3}' | sed 's/^<\|>$//g'; } kvnum() { ( flock -s 200 sed 's/ .*//' "$1" | grep -Fnx -e "$2" | sed 's/:.*//' ) 200>"$1.lock" } kvget() { num="$(kvnum "$1" "$2")" if ! [ -z "$num" ]; then sed -n "$num"'s/^\([^ ]* \)* //p' "$1" fi } kvset() { num="$(kvnum "$1" "$2")" if [ -z "$num" ]; then var "$2 $3" >> "$1" else printf '' > "$1.new" if [ "$num" != "1" ]; then sed -n '1,'"$(($num - 1))"'p' "$1" >> "$1.new" fi var "$2 $3" >> "$1.new" sed -n "$(($num + 1))"',$p' "$1" >> "$1.new" mv -f "$1.new" "$1" fi } kvdel() { num="$(kvnum "$1" "$2")" if ! [ -z "$num" ]; then sed -i "$num"'d' "$1" fi }