happybot/happybot/common.sh

116 lines
2.0 KiB
Bash

#!/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/^[^<]*<//' | 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
}