blockbot/bot.sh

125 lines
3.5 KiB
Bash
Raw Normal View History

2022-11-30 16:29:37 -07:00
#!/bin/bash
#############################
2023-07-10 20:22:36 -06:00
ENDPOINT='myinstance.com'
2022-11-30 16:29:37 -07:00
SQL_USER='root'
SQL_PASS='sql'
2023-07-10 20:22:36 -06:00
SQL_HOST='0.0.0.0'
2023-05-24 16:43:32 -06:00
SQL_DATABASE='pleroma'
STATS_MESSAGE=""
#STATS_MESSAGE="Daily Block Stats for: $ENDPOINT"
2022-11-30 16:29:37 -07:00
############################
2023-07-10 20:23:43 -06:00
2022-11-30 16:29:37 -07:00
2023-05-24 16:43:32 -06:00
blocks(){
#TIME_STAMP="`date +%y-%m-%d` `date +%H`"
TIME_STAMP="`TZ=Atlantic/Reykjavik date +%y-%m-%d` `TZ=Atlantic/Reykjavik date +%H:%M`"
#TIME_STAMP="`date +%y-%m-%d` `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
2022-11-30 16:29:37 -07:00
2023-05-24 16:43:32 -06:00
readarray -t list < /tmp/list
2022-11-30 16:29:37 -07:00
2023-05-24 16:43:32 -06:00
for i in "${list[@]}"
do
:
json=`echo $i | cut -d '{' -f2-3 | cut -d '}' -f1 | sed '1 i\{' | sed '$a } '`
2022-11-30 16:29:37 -07:00
2023-05-24 16:43:32 -06:00
blocker="`echo $json | jq -r .actor | cut -d '/' -f5`@`echo $json | jq -r .actor | cut -d '/' -f3`"
2022-11-30 16:29:37 -07:00
2023-05-24 16:43:32 -06:00
blocked="@`echo $json | jq -r .object | cut -d '/' -f5`@`echo $json | jq -r .object | cut -d '/' -f3`"
2022-11-30 16:29:37 -07:00
2023-05-24 16:43:32 -06:00
profile=`echo $json | jq -r .actor`
2022-11-30 16:29:37 -07:00
2023-05-24 16:43:32 -06:00
message="BLOCK ALERT! $blocker blocked $blocked. Profile is available at: $profile"
2022-11-30 16:29:37 -07:00
2023-05-24 16:43:32 -06:00
if [ -n "$1" ]; then
echo $message
else
echo $message
sleep 30
toot post "$message" -m ./bot.png
fi
2022-11-30 16:29:37 -07:00
2023-05-24 16:43:32 -06:00
done
2022-11-30 16:29:37 -07:00
}
2023-05-24 16:43:32 -06:00
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
#data=$data" @$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`! "
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
2023-03-20 14:26:33 -06:00
fi
2023-05-24 16:43:32 -06:00
done
data="$STATS_MESSAGE `cat /tmp/a.txt | sort -n -k 2`"
if [ -n "$1" ]; then
echo $data
else
2023-07-10 20:22:36 -06:00
echo ":hacker_l::hacker_e::hacker_a::hacker_d::hacker_e::hacker_r::hacker_b::hacker_o::hacker_a::hacker_r::hacker_d: $data" | toot post
2023-05-24 16:43:32 -06:00
fi
2023-03-20 14:26:33 -06:00
}
2022-11-30 16:29:37 -07:00
2023-05-24 16:43:32 -06:00
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
2022-11-30 16:29:37 -07:00
done
}
2023-05-24 16:43:32 -06:00
background(){
if [[ `date` == *":00"* ]]; then
background_daemon
else
echo "Waiting for time to be in sync...."
sleep 1
background
fi
}
2022-11-30 16:29:37 -07:00
2023-05-24 16:43:32 -06:00
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
}
2022-11-30 16:29:37 -07:00
if [ "$1" = "daemon" ]; then
2023-05-24 16:43:32 -06:00
background
2022-11-30 16:29:37 -07:00
elif [ "$1" = "blocks" ]; then
2023-05-24 16:43:32 -06:00
blocks "$2"
2022-11-30 16:29:37 -07:00
elif [ "$1" = "scalps" ]; then
2023-05-24 16:43:32 -06:00
scalps "$2"
else
help
2022-11-30 16:29:37 -07:00
fi