query_gamedig.sh 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. #!/bin/bash
  2. # query_gamedig.sh function
  3. # Author: Daniel Gibbs
  4. # Website: https://linuxgsm.com
  5. # Description: Querys a gameserver using node-gamedig.
  6. # https://github.com/sonicsnes/node-gamedig
  7. # Check if gamedig and jq are installed.
  8. if [ "$(command -v gamedig 2>/dev/null)" ]&&[ "$(command -v jq 2>/dev/null)" ]; then
  9. if [ "${engine}" == "idtech3_ql" ]; then
  10. local engine="quakelive"
  11. elif [ "${gamename}" == "Killing Floor 2" ]; then
  12. local engine="unreal4"
  13. fi
  14. local engine_query_array=( avalanche3.0 barotrauma madness quakelive realvirtuality refractor source goldsource spark starbound unity3d unreal4 wurm )
  15. for engine_query in "${engine_query_array[@]}"
  16. do
  17. if [ "${engine_query}" == "${engine}" ]; then
  18. gamedigengine="protocol-valve"
  19. fi
  20. done
  21. local engine_query_array=( avalanche2.0 )
  22. for engine_query in "${engine_query_array[@]}"
  23. do
  24. if [ "${engine_query}" == "${engine}" ]; then
  25. gamedigengine="jc2mp"
  26. fi
  27. done
  28. local engine_query_array=( quake )
  29. for engine_query in "${engine_query_array[@]}"
  30. do
  31. if [ "${engine_query}" == "${engine}" ]; then
  32. gamedigengine="protocol-quake1"
  33. fi
  34. done
  35. local engine_query_array=( idtech2 iw2.0 )
  36. for engine_query in "${engine_query_array[@]}"
  37. do
  38. if [ "${engine_query}" == "${engine}" ]; then
  39. gamedigengine="protocol-quake2"
  40. fi
  41. done
  42. local engine_query_array=( idtech3 iw3.0 ioquake3 )
  43. for engine_query in "${engine_query_array[@]}"
  44. do
  45. if [ "${engine_query}" == "${engine}" ]; then
  46. gamedigengine="protocol-quake3"
  47. fi
  48. done
  49. local engine_query_array=( lwjgl2 )
  50. for engine_query in "${engine_query_array[@]}"
  51. do
  52. if [ "${engine_query}" == "${engine}" ]; then
  53. gamedigengine="minecraft"
  54. fi
  55. done
  56. local shortname_query_array=( ts3 )
  57. for shortname_query in "${shortname_query_array[@]}"
  58. do
  59. if [ "${shortname_query}" == "${shortname}" ]; then
  60. gamedigengine="teamspeak3"
  61. fi
  62. done
  63. local engine_query_array=( unreal )
  64. for engine_query in "${engine_query_array[@]}"
  65. do
  66. if [ "${engine_query}" == "${engine}" ]; then
  67. gamedigengine="ut"
  68. fi
  69. done
  70. # will bypass query if server offline.
  71. check_status.sh
  72. if [ "${status}" != "0" ]; then
  73. # checks if query is working null = pass.
  74. gamedigcmd=$(echo "gamedig --type \"${gamedigengine}\" --host \"${ip}\" --query_port \"${queryport}\"|jq")
  75. gamedigraw=$(gamedig --type "${gamedigengine}" --host "${ip}" --query_port "${queryport}")
  76. querystatus=$(echo "${gamedigraw}" | jq '.error|length')
  77. if [ "${querystatus}" != "null" ]; then
  78. gamedigcmd=$(echo "gamedig --type \"${gamedigengine}\" --host \"${ip}\" --port \"${queryport}\"|jq")
  79. gamedigraw=$(gamedig --type "${gamedigengine}" --host "${ip}" --port "${queryport}")
  80. querystatus=$(echo "${gamedigraw}" | jq '.error|length')
  81. fi
  82. # server name.
  83. gdname=$(echo "${gamedigraw}" | jq -re '.name')
  84. if [ "${gdname}" == "null" ]; then
  85. unset gdname
  86. fi
  87. # numplayers.
  88. gdplayers=$(echo "${gamedigraw}" | jq -re '.players|length')
  89. if [ "${gdplayers}" == "null" ]; then
  90. unset gdplayers
  91. fi
  92. # maxplayers.
  93. gdmaxplayers=$(echo "${gamedigraw}" | jq -re '.maxplayers|length')
  94. if [ "${gdmaxplayers}" == "null" ]; then
  95. unset maxplayers
  96. fi
  97. # current map.
  98. gdmap=$(echo "${gamedigraw}" | jq -re '.map')
  99. if [ "${gdmap}" == "null" ]; then
  100. unset gdmap
  101. fi
  102. # current gamemode.
  103. gdgamemode=$(echo "${gamedigraw}" | jq -re '.raw.rules.GameMode_s')
  104. if [ "${gdgamemode}" == "null" ]; then
  105. unset gdgamemode
  106. fi
  107. # numbots.
  108. gdbots=$(echo "${gamedigraw}" | jq -re '.raw.numbots')
  109. if [ "${gdbots}" == "null" ]||[ "${gdbots}" == "0" ]; then
  110. unset gdbots
  111. fi
  112. fi
  113. fi