blockbot/bot.sh
2023-08-03 12:08:59 -06:00

123 lines
3.0 KiB
Bash

#!/bin/bash
#############################
ENDPOINT='myinstance.com'
SQL_USER='root'
SQL_PASS='sql'
SQL_HOST='127.0.0.1'
SQL_DATABASE='pleroma'
STATS_MESSAGE="Daily Block Stats for: $ENDPOINT"
############################
blocks() {
TIME_STAMP="$(TZ=Atlantic/Reykjavik date +%y-%m-%d) $(TZ=Atlantic/Reykjavik date +%H:%M)"
TIME=$(echo $TIME_STAMP | sed 's/.$//')
data=''
echo "select * from activities where data->>'type' = 'Block';" | PGPASSWORD=$SQL_PASS psql -h $SQL_HOST -U $SQL_USER $SQL_DATABASE | grep "$TIME" >/tmp/list
readarray -t list </tmp/list
for i in "${list[@]}"; do
:
json=$(echo $i | cut -d '{' -f2-3 | cut -d '}' -f1 | sed '1 i\{' | sed '$a } ')
blocker="$(echo $json | jq -r .actor | cut -d '/' -f5)@$(echo $json | jq -r .actor | cut -d '/' -f3)"
blocked="@$(echo $json | jq -r .object | cut -d '/' -f5)@$(echo $json | jq -r .object | cut -d '/' -f3)"
profile=$(echo $json | jq -r .actor)
message="BLOCK ALERT! $blocker blocked $blocked. Profile is available at: $profile"
if [ -n "$1" ]; then
echo $message
else
echo $message
sleep 30
toot post "$message" -m /opt/bot.png
fi
done
}
scalps() {
users=($(echo "select nickname from users where ap_id like '%${ENDPOINT}%';" | PGPASSWORD=sql psql -h $SQL_HOST -U $SQL_USER $SQL_DATABASE --csv | egrep -vi 'relay|nickname|internal.fetch '))
echo >/tmp/a.txt
for i in "${users[@]}"; do
:
number=$(echo "select * from activities where data->>'type' = 'Block';" | PGPASSWORD=$SQL_PASS psql -h $SQL_HOST -U $SQL_USER $SQL_DATABASE | grep -i "$ENDPOINT/users/$i" | cut -d '"' -f18 | grep -iv $ENDPOINT | wc -l)
if [ $number -gt 10 ]; then
if [ "$i" != "a" ]; then
echo "@$i: $(echo "select * from activities where data->>'type' = 'Block';" | PGPASSWORD=$SQL_PASS psql -h $SQL_HOST -U $SQL_USER $SQL_DATABASE | grep -i "$ENDPOINT/users/$i" | cut -d '"' -f18 | grep -iv $ENDPOINT | wc -l)! " >>/tmp/a.txt
fi
fi
done
data="$STATS_MESSAGE $(cat /tmp/a.txt | sort -n -k 2)"
if [ -n "$1" ]; then
echo $data
else
echo "$data" | toot post
fi
}
background_daemon() {
echo
echo "BlockBot running in Daemon Mode"
echo
echo
while true; do
echo "#######################################"
echo "Current Time: $(date)"
if [[ $(date | cut -d ':' -f2 | tail -c2) == *"9"* ]]; then
echo "Checking for new blocks......."
echo
blocks
fi
if [[ $(date) == *"16:30:"* ]]; then
echo "Sending Block Report......."
echo
scalps
fi
blocks print
echo "Sleeping for 50......"
echo "#######################################"
sleep 50
done
}
background() {
if [[ $(date) == *":00"* ]]; then
background_daemon
else
echo "Waiting for time to be in sync...."
sleep 1
background
fi
}
help() {
echo
echo "bot.sh daemon"
echo
echo "bot.sh blocks"
echo
echo "bot.sh blocks print"
echo "bot.sh scalps"
echo "bot.sh scalps print"
echo "bot.sh help"
echo
echo
}
if [ "$1" = "daemon" ]; then
background
elif [ "$1" = "blocks" ]; then
blocks "$2"
elif [ "$1" = "scalps" ]; then
scalps "$2"
else
help
fi