query_gamedig.sh 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  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. moduleselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
  9. # Default query status to failure. Will be changed to 0 if query is successful.
  10. querystatus="2"
  11. # Check if gamedig and jq are installed.
  12. if [ "$(command -v gamedig 2> /dev/null)" ] && [ "$(command -v jq 2> /dev/null)" ]; then
  13. # will bypass query if server offline.
  14. check_status.sh
  15. if [ "${status}" != "0" ]; then
  16. # GameDig requires you use the voice port when querying.
  17. if [ "${querytype}" == "teamspeak3" ]; then
  18. queryport="${port}"
  19. fi
  20. # checks if query is working null = pass.
  21. gamedigcmd=$(echo -e "gamedig --type \"${querytype}\" \"${queryip}:${queryport}\"|jq")
  22. gamedigraw=$(gamedig --type "${querytype}" "${queryip}:${queryport}")
  23. querystatus=$(echo "${gamedigraw}" | jq '.error|length')
  24. if [ "${querytype}" == "teamspeak3" ]; then
  25. fn_info_game_ts3
  26. fi
  27. # server name.
  28. gdname=$(echo "${gamedigraw}" | jq -re '.name')
  29. if [ "${gdname}" == "null" ]; then
  30. unset gdname
  31. fi
  32. # numplayers.
  33. if [ "${querytype}" == "minecraft" ]; then
  34. gdplayers=$(echo "${gamedigraw}" | jq -re '.players | length-1')
  35. elif [ "${querytype}" == "teamspeak3" ]; then
  36. gdplayers=$(echo "${gamedigraw}" | jq -re '.raw.virtualserver_clientsonline')
  37. else
  38. gdplayers=$(echo "${gamedigraw}" | jq -re '.players | length')
  39. fi
  40. if [ "${gdplayers}" == "null" ]; then
  41. unset gdplayers
  42. elif [ "${gdplayers}" == "[]" ] || [ "${gdplayers}" == "-1" ]; then
  43. gdplayers=0
  44. fi
  45. # maxplayers.
  46. gdmaxplayers=$(echo "${gamedigraw}" | jq -re '.maxplayers')
  47. if [ "${gdmaxplayers}" == "null" ]; then
  48. unset gdmaxplayers
  49. elif [ "${gdmaxplayers}" == "[]" ]; then
  50. gdmaxplayers=0
  51. fi
  52. # current map.
  53. gdmap=$(echo "${gamedigraw}" | jq -re '.map')
  54. if [ "${gdmap}" == "null" ]; then
  55. unset gdmap
  56. fi
  57. # current gamemode.
  58. gdgamemode=$(echo "${gamedigraw}" | jq -re '.raw.rules.GameMode_s')
  59. if [ "${gdgamemode}" == "null" ]; then
  60. unset gdgamemode
  61. fi
  62. # numbots.
  63. gdbots=$(echo "${gamedigraw}" | jq -re '.bots | length')
  64. if [ "${gdbots}" == "null" ] || [ "${gdbots}" == "0" ]; then
  65. unset gdbots
  66. fi
  67. # server version.
  68. if [ "${querytype}" == "teamspeak3" ]; then
  69. gdversion=$(echo "${gamedigraw}" | jq -re '.raw.virtualserver_version')
  70. else
  71. gdversion=$(echo "${gamedigraw}" | jq -re '.raw.version')
  72. fi
  73. if [ "${gdversion}" == "null" ] || [ "${gdversion}" == "0" ]; then
  74. unset gdversion
  75. fi
  76. fi
  77. fi