betlog

BFBC2qstat.sh

Nov 21st, 2019
334
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 2.98 KB | None | 0 0
  1. #!/bin/bash
  2. # betlog - 2019-11-13--11-42-53
  3. #
  4. if [[ 14 -eq $(lsb_release -sr|awk -F'.' '{print $1}') ]];then
  5.     echo "14.04 has problems with awk AND quakestat, so it can fuck off"
  6.     exit
  7. fi
  8. quakestatFile="$(realpath ${0%/*})/BFBC2serverList.qstat"
  9. frequency=20
  10. portBase=19567
  11. portOffset=29321
  12. alarmKeywordArray=( "RBL" "SQDM" )
  13. alarmThresh=3 #max 9
  14. alarmArray=( "0.1" "/home/user/music/audio/_all-alarms-notifications-ringtones/DIR-usr-share-sounds-freedesktop-stereo/service-login.oga" )
  15. # ================
  16. tick=$frequency
  17. alarmToggle=1
  18. declare -a serverArray=()
  19. bold=$(tput smso)
  20. offbold=$(tput rmso)
  21. f_status(){
  22.     tput cup 0 0
  23.     echo -ne "$bold $(($frequency-$tick)) $offbold  \
  24.    'a' or 0/1' toggle alarm $bold $(echo $alarmToggle|sed 's/1/ON/; s/0/OFF/') $offbold  \
  25.    '2-9' / 'q'+ / 'z'- : alarm threshold $bold $alarmThresh $offbold  \\r"
  26. }
  27. echo "" #yes really
  28. while :; do
  29.     f_status
  30.     if [[ $tick -eq $frequency ]];then
  31.         clear
  32.         f_status
  33.         tput cup 1 0
  34.         i=0
  35.         while read -r line; do 
  36.             if [[ ${line:0:1} == [0-9] ]];then
  37.                 serverArray[$i]=$(echo $line|awk -F':' '{print $1}')
  38.                 port=$(echo $line|awk -F':' '{print $2}')
  39.                 if [[ ${port:0:1} == [0-9] ]];then
  40.                     let port+=(portOffset)
  41.                     serverArray[$i]="${serverArray[$i]}:$port"
  42.                 else
  43.                     let port=(portBase+portOffset)
  44.                     serverArray[$i]="${serverArray[$i]}:$port"
  45.                 fi
  46.                 let i+=1
  47.             fi
  48.         done < "${quakestatFile}"          
  49.         for line in "${serverArray[@]}"; do
  50.             data=$(quakestat -nocfg -retry 1 -timeout 3 -u -allowserverdups -default bfbc2 -ne -nh $line|\
  51.                 awk '{printf "%s\t%10s\t",$2,$8;for(i=9; i<=NF; ++i) printf "%s ", $i; print ""}')
  52.             if [[ -n $data ]];then
  53.                 echo "$data"
  54.                 if [[ $alarmToggle -eq 1 && ${data%%/*} -ge $alarmThresh ]];then                
  55.                     serverString=$(echo $data| awk '{for(i=2; i<=NF; ++i) printf "%s ", $i;}')
  56.                     for check in ${alarmKeywordArray[@]}; do
  57.                         if [[ "${serverString/"$check"/}" != "$serverString" ]]; then
  58.                             play --volume=${alarmArray[0]} "${alarmArray[1]}" &> /dev/null
  59.                             break
  60.                         fi
  61.                     done
  62.                 fi
  63.             fi
  64.         done
  65.         tick=0
  66.     fi
  67.     read -n1 -t1 key
  68.     case $key in
  69.         a|A) alarmToggle=$((1-alarmToggle)) ;;
  70.         q|Q) let alarmThresh+=1 ;;
  71.         z|Z) let alarmThresh-=1 ;;
  72.         0) alarmToggle=0 ;;
  73.         1) alarmToggle=1 ;;        
  74.         2) alarmThresh=2 ;;        
  75.         3) alarmThresh=3 ;;        
  76.         4) alarmThresh=4 ;;        
  77.         5) alarmThresh=5 ;;        
  78.         6) alarmThresh=6 ;;        
  79.         7) alarmThresh=7 ;;        
  80.         8) alarmThresh=8 ;;        
  81.         9) alarmThresh=9 ;;        
  82.     esac
  83.     tick=$((tick+1))    
  84. done
Advertisement
Add Comment
Please, Sign In to add comment