#!/bin/bash
#-----------------------------------------------------------
# ban / unban ip from all servers
# Galaxip aka LoveBug 2020-08-14
#
# checks ladder log for ban_ip and unban_ip admin commands
# then sends the command to command.txt file in all servers
#-----------------------------------------------------------
# base location of servers change as needed
serverRoot="/home/pi/armagetronad/servers/"
# list of server directories change as needed
serverDirectories="server00 server01 server02 server03 server04 server05 server06 server07 server08 server09 server10 server11 server12 server13"
# array to store ladderlog data
serverData=()
# main loop read ladderlog data if available and process
while read -a serverData
do
# first entry 0 commands we need to check
command=${serverData[0]}
# check command and run function
case $command in
#----------------
# admin commands
#----------------
ADMIN_COMMAND)
# get the admin command
adminCommand=${serverData[4]}
# get ip address for ban/unban
ipAddress=${serverData[5]}
# get time for ban
banTime=${serverData[6]}
# get ban message
banMessage=${serverData[7]}
# now check for ban_ip and unban_ip
case $adminCommand in
# ban_ip or BAN_IP ipaddress time message .. ban ip from all servers
ban_ip|BAN_IP)
for i in $serverDirectories
do
serverCommandTxt="$serverRoot$i/command.txt"
printf "ban_ip %s %s %s\n" "$ipAddress" "$banTime" "$banMessage" >> "$serverCommandTxt"
done
# debug
printf "say %s banned from all servers for %s minutes\n" "$ipAddress" "$banTime"
;;
# /unban_ip or UNBAN_IP ipaddress .. unban ip from all servers
unban_ip|UNBAN_IP)
for i in $serverDirectories
do
serverCommandTxt="$serverRoot$i/command.txt"
printf "unban_ip %s\n" "$ipAddress" >> "$serverCommandTxt"
done
# debug
printf "say %s unbanned from all servers\n" "$ipAddress"
;;
esac
;;
esac
done
exit 0