query_gamedig.sh 2.8 KB

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