query_gamedig.sh 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. #!/bin/bash
  2. # LinuxGSM query_gamedig.sh module
  3. # Author: Daniel Gibbs
  4. # Contributors: http://linuxgsm.com/contrib
  5. # Website: https://linuxgsm.com
  6. # Description: Querys a gameserver using node-gamedig.
  7. # https://github.com/sonicsnes/node-gamedig
  8. functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
  9. querystatus="2"
  10. # Check if gamedig and jq are installed.
  11. if [ "$(command -v gamedig 2> /dev/null)" ] && [ "$(command -v jq 2> /dev/null)" ]; then
  12. # will bypass query if server offline.
  13. check_status.sh
  14. if [ "${status}" != "0" ]; then
  15. # GameDig requires you use the voice port when querying.
  16. if [ "${querytype}" == "teamspeak3" ]; then
  17. queryport="${port}"
  18. fi
  19. # checks if query is working null = pass.
  20. gamedigcmd=$(echo -e "gamedig --type \"${querytype}\" --host \"${queryip}\" --query_port \"${queryport}\"|jq")
  21. gamedigraw=$(gamedig --type "${querytype}" --host "${queryip}" --query_port "${queryport}")
  22. querystatus=$(echo "${gamedigraw}" | jq '.error|length')
  23. if [ "${querystatus}" != "null" ]; then
  24. gamedigcmd=$(echo -e "gamedig --type \"${querytype}\" --host \"${queryip}\" --port \"${queryport}\"|jq")
  25. gamedigraw=$(gamedig --type "${querytype}" --host "${queryip}" --port "${queryport}")
  26. querystatus=$(echo "${gamedigraw}" | jq '.error|length')
  27. fi
  28. if [ "${querytype}" == "teamspeak3" ]; then
  29. fn_info_game_ts3
  30. fi
  31. # server name.
  32. gdname=$(echo "${gamedigraw}" | jq -re '.name')
  33. if [ "${gdname}" == "null" ]; then
  34. unset gdname
  35. fi
  36. # numplayers.
  37. if [ "${querytype}" == "minecraft" ]; then
  38. gdplayers=$(echo "${gamedigraw}" | jq -re '.players | length-1')
  39. elif [ "${querytype}" == "teamspeak3" ]; then
  40. gdplayers=$(echo "${gamedigraw}" | jq -re '.raw.virtualserver_clientsonline')
  41. else
  42. gdplayers=$(echo "${gamedigraw}" | jq -re '.players | length')
  43. fi
  44. if [ "${gdplayers}" == "null" ]; then
  45. unset gdplayers
  46. elif [ "${gdplayers}" == "[]" ] || [ "${gdplayers}" == "-1" ]; then
  47. gdplayers=0
  48. fi
  49. # maxplayers.
  50. gdmaxplayers=$(echo "${gamedigraw}" | jq -re '.maxplayers')
  51. if [ "${gdmaxplayers}" == "null" ]; then
  52. unset gdmaxplayers
  53. elif [ "${gdmaxplayers}" == "[]" ]; then
  54. gdmaxplayers=0
  55. fi
  56. # current map.
  57. gdmap=$(echo "${gamedigraw}" | jq -re '.map')
  58. if [ "${gdmap}" == "null" ]; then
  59. unset gdmap
  60. fi
  61. # current gamemode.
  62. gdgamemode=$(echo "${gamedigraw}" | jq -re '.raw.rules.GameMode_s')
  63. if [ "${gdgamemode}" == "null" ]; then
  64. unset gdgamemode
  65. fi
  66. # numbots.
  67. gdbots=$(echo "${gamedigraw}" | jq -re '.bots | length')
  68. if [ "${gdbots}" == "null" ] || [ "${gdbots}" == "0" ]; then
  69. unset gdbots
  70. fi
  71. # server version.
  72. if [ "${querytype}" == "teamspeak3" ]; then
  73. gdversion=$(echo "${gamedigraw}" | jq -re '.raw.virtualserver_version')
  74. else
  75. gdversion=$(echo "${gamedigraw}" | jq -re '.raw.version')
  76. fi
  77. if [ "${gdversion}" == "null" ] || [ "${gdversion}" == "0" ]; then
  78. unset gdversion
  79. fi
  80. fi
  81. fi