Browse Source

Fixes typos and improves code consistency

Addresses various typos and inconsistencies across multiple files,
enhancing code readability and maintainability.

Adds codespell and flake8 configurations for linting.

Relates to #4696
pull/4854/head
Daniel Gibbs 4 months ago
parent
commit
cd45f4f367
Failed to extract signature
  1. 9
      .github/linters/.codespellrc
  2. 2
      .github/linters/.flake8
  3. 2
      lgsm/config-default/config-lgsm/armarserver/_default.cfg
  4. 2
      lgsm/config-default/config-lgsm/necserver/_default.cfg
  5. 2
      lgsm/config-default/config-lgsm/ns2cserver/_default.cfg
  6. 2
      lgsm/config-default/config-lgsm/ns2server/_default.cfg
  7. 2
      lgsm/config-default/config-lgsm/pwserver/_default.cfg
  8. 2
      lgsm/modules/check_deps.sh
  9. 2
      lgsm/modules/check_permissions.sh
  10. 2
      lgsm/modules/check_system_requirements.sh
  11. 2
      lgsm/modules/command_details.sh
  12. 2
      lgsm/modules/command_dev_detect_glibc.sh
  13. 2
      lgsm/modules/command_postdetails.sh
  14. 4
      lgsm/modules/command_skeleton.sh
  15. 4
      lgsm/modules/command_stop.sh
  16. 8
      lgsm/modules/core_dl.sh
  17. 2
      lgsm/modules/core_legacy.sh
  18. 2
      lgsm/modules/core_messages.sh
  19. 4
      lgsm/modules/fix_ark.sh
  20. 2
      lgsm/modules/fix_dst.sh
  21. 2
      lgsm/modules/fix_onset.sh
  22. 2
      lgsm/modules/fix_rust.sh
  23. 2
      lgsm/modules/info_distro.sh
  24. 6
      lgsm/modules/info_game.sh
  25. 2
      lgsm/modules/info_messages.sh
  26. 4
      lgsm/modules/install_config.sh
  27. 4
      lgsm/modules/mods_core.sh
  28. 6
      lgsm/modules/mods_list.sh
  29. 2
      lgsm/modules/query_gamedig.sh
  30. 184
      lgsm/modules/query_gsquery.py

9
.github/linters/.codespellrc

@ -0,0 +1,9 @@
[codespell]
# Skip data tables that contain many short server identifiers (e.g. "fof", "nd")
skip =
lgsm/data/*.csv,
package-lock.json,
node_modules
# Ignore common identifiers/acronyms and extensions used throughout LinuxGSM
ignore-words-list = distroname,fof,nd,sav,parms,ThirdParty

2
.github/linters/.flake8

@ -0,0 +1,2 @@
[flake8]
max-line-length = 120

2
lgsm/config-default/config-lgsm/armarserver/_default.cfg

@ -9,7 +9,7 @@
#### Game Server Settings ####
# https://community.bistudio.com/wiki/Arma_Reforger:Server_Hosting
# MaxFPS to limit the used Server resouces
# MaxFPS to limit the used Server resources
maxfps="60"
# Profile Name

2
lgsm/config-default/config-lgsm/necserver/_default.cfg

@ -8,7 +8,7 @@
#### Game Server Settings ####
## Pre-defined Paramters | https://docs.linuxgsm.com/configuration/start-parameters#predefined-parameters
## Pre-defined Parameters | https://docs.linuxgsm.com/configuration/start-parameters#predefined-parameters
worldname="MyWorld"
## Server Parameters | https://docs.linuxgsm.com/configuration/start-parameters#additional-parameters

2
lgsm/config-default/config-lgsm/ns2cserver/_default.cfg

@ -19,7 +19,7 @@ httppassword="CHANGE_ME"
httpport="8080"
mods=""
serverpassword=""
# Add the following line to the parms if you want a private server. Ensuring
# Add the following line to the params if you want a private server. Ensuring
# that the password variable above is not left empty.
# -password \"${serverpassword}\"

2
lgsm/config-default/config-lgsm/ns2server/_default.cfg

@ -20,7 +20,7 @@ httppassword="CHANGE_ME"
httpport="8080"
modserverport="27031"
serverpassword=""
# Add the following line to the parms if you want a private server. Ensuring
# Add the following line to the params if you want a private server. Ensuring
# that the password variable above is not left empty.
# -password '${serverpassword}'

2
lgsm/config-default/config-lgsm/pwserver/_default.cfg

@ -11,7 +11,7 @@
## Predefined Parameters | https://docs.linuxgsm.com/configuration/start-parameters
servername="LinuxGSM"
# For community servers (serverlist) you need to change these settings (publicip & publicport) in the gameserver config file aswell
# For community servers (serverlist) you need to change these settings (publicip & publicport) in the gameserver config file as well
port="8211"
steamport="27015"

2
lgsm/modules/check_deps.sh

@ -234,7 +234,7 @@ fn_install_missing_deps() {
}
fn_check_loop() {
# Loop though required depenencies checking if they are installed.
# Loop though required dependencies checking if they are installed.
for deptocheck in "${array_deps_required[@]}"; do
fn_deps_detector
done

2
lgsm/modules/check_permissions.sh

@ -249,7 +249,7 @@ fn_sys_perm_error_process() {
fi
}
## Run permisions checks when not root.
## Run permissions checks when not root.
if [ "$(whoami)" != "root" ]; then
fn_check_ownership
fn_check_permissions

2
lgsm/modules/check_system_requirements.sh

@ -71,7 +71,7 @@ fi
if [ "${ramrequirementgb}" ]; then
if (($(echo "${physmemtotalgb} < ${ramrequirementgb}" | bc -l))); then
fn_print_dots "Checking RAM"
fn_print_warn_nl "Checking RAM: Minumum RAM requirements not met"
fn_print_warn_nl "Checking RAM: Minimum RAM requirements not met"
fn_print_nl "* ${ramrequirementgb}G is required, but only ${physmemtotal} is available."
fn_print_nl "* ${gamename} server may fail to run or experience poor performance."
fn_sleep_time_5

2
lgsm/modules/command_details.sh

@ -29,7 +29,7 @@ fn_info_messages_gameserver_resource
fn_info_messages_gameserver
fn_info_messages_script
fn_info_messages_backup
# Some game servers do not have parms.
# Some game servers do not have params.
if [ "${shortname}" != "jc2" ] && [ "${shortname}" != "dst" ] && [ "${shortname}" != "pz" ] && [ "${engine}" != "renderware" ]; then
fn_info_messages_commandlineparms
fi

2
lgsm/modules/command_dev_detect_glibc.sh

@ -63,7 +63,7 @@ for glibc_check_var in "${glibc_check_dir_array[@]}"; do
cat "${tmpdir}/detect_glibc_${glibc_check_var}.tmp" | sort | uniq | sort -r --version-sort | head -1 | tee -a "${tmpdir}/detect_glibc_highest.tmp"
echo -e ""
echo -e "Files requiring GLIBC"
echo -e "Highest verion required: filename"
echo -e "Highest version required: filename"
cat "${tmpdir}/detect_glibc_files_${glibc_check_var}.tmp"
echo -e ""
echo -e "All required GLIBC versions"

2
lgsm/modules/command_postdetails.sh

@ -46,7 +46,7 @@ else
fn_info_messages_gameserver
fn_info_messages_script
fn_info_messages_backup
# Some game servers do not have parms.
# Some game servers do not have params.
if [ "${shortname}" != "jc2" ] && [ "${shortname}" != "jc3" ] && [ "${shortname}" != "dst" ] && [ "${shortname}" != "pz" ] && [ "${engine}" != "renderware" ]; then
fn_info_messages_commandlineparms
fi

4
lgsm/modules/command_skeleton.sh

@ -3,7 +3,7 @@
# Author: Daniel Gibbs
# Contributors: https://linuxgsm.com/contrib
# Website: https://linuxgsm.com
# Description: Creates an copy of a game servers directorys.
# Description: Creates an copy of a game servers directories.
commandname="SKELETON"
commandaction="Skeleton"
@ -13,7 +13,7 @@ fn_firstcommand_set
fn_print_dots "Creating skeleton directory"
check.sh
# Find all directorys and create them in the skel directory
# Find all directories and create them in the skel directory
find "${rootdir}" -type d -not \( -path ./skel -prune \) | cpio -pdvm skel 2> /dev/null
exitcode=$?
if [ "${exitcode}" -ne 0 ]; then

4
lgsm/modules/command_stop.sh

@ -16,7 +16,7 @@ fn_stop_graceful_ctrlc() {
fn_script_log_info "Graceful: CTRL+c"
# Sends CTRL+c.
tmux -L "${socketname}" send-keys -t "${sessionname}" C-c > /dev/null 2>&1
# Waits up to 30 seconds giving the server time to shutdown gracefuly.
# Waits up to 30 seconds giving the server time to shutdown gracefully.
for seconds in {1..30}; do
check_status.sh
if [ "${status}" == "0" ]; then
@ -293,7 +293,7 @@ fn_stop_graceful_avorion() {
fn_sleep_time_5
# Sends /quit.
tmux -L "${socketname}" send-keys -t "${sessionname}" /stop ENTER > /dev/null 2>&1
# Waits up to 30 seconds giving the server time to shutdown gracefuly.
# Waits up to 30 seconds giving the server time to shutdown gracefully.
for seconds in {1..30}; do
check_status.sh
if [ "${status}" == "0" ]; then

8
lgsm/modules/core_dl.sh

@ -144,9 +144,9 @@ fn_dl_steamcmd() {
fn_print_error2_nl "${commandaction} ${selfname}: ${remotelocation}: Corrupt update files"
fn_script_log_error "${commandaction} ${selfname}: ${remotelocation}: Corrupt update files"
else
fn_print_error2_nl "${commandaction} ${selfname}: ${remotelocation}: Unknown error occured"
fn_print_error2_nl "${commandaction} ${selfname}: ${remotelocation}: Unknown error occurred"
fn_print_nl "Please provide content log to LinuxGSM developers https://linuxgsm.com/steamcmd-error"
fn_script_log_error "${commandaction} ${selfname}: ${remotelocation}: Unknown error occured"
fn_script_log_error "${commandaction} ${selfname}: ${remotelocation}: Unknown error occurred"
fi
elif [ "${exitcode}" -ne 0 ]; then
fn_print_error2_nl "${commandaction} ${selfname}: ${remotelocation}: Exit code: ${exitcode}"
@ -200,8 +200,8 @@ fn_dl_hash() {
hashbin="sha512sum"
hashtype="SHA512"
else
fn_script_log_error "hash lengh not known for hash type"
fn_print_error_nl "hash lengh not known for hash type"
fn_script_log_error "hash length not known for hash type"
fn_print_error_nl "hash length not known for hash type"
core_exit.sh
fi
echo -en "verifying ${local_filename} with ${hashtype}..."

2
lgsm/modules/core_legacy.sh

@ -3,7 +3,7 @@
# Author: Daniel Gibbs
# Contributors: https://linuxgsm.com/contrib
# Website: https://linuxgsm.com
# Description: Code for backwards compatability with older versions of LinuxGSM.
# Description: Code for backwards compatibility with older versions of LinuxGSM.
moduleselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"

2
lgsm/modules/core_messages.sh

@ -560,7 +560,7 @@ fn_print_restart_warning() {
}
# Functions below are used to ensure that logs and UI correctly reflect the command it is actually running.
# Useful when a command has to call upon another command causing the other command to overrite commandname variables
# Useful when a command has to call upon another command causing the other command to overwrite commandname variables
# Used to remember the command that ran first.
fn_firstcommand_set() {

4
lgsm/modules/fix_ark.sh

@ -7,7 +7,7 @@
moduleselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
# removes mulitple appworkshop_346110.acf if found.
# removes multiple appworkshop_346110.acf if found.
steamappsfilewc="$(find "${HOME}" -name appworkshop_346110.acf | wc -l)"
if [ "${steamappsfilewc}" -gt "1" ]; then
fixname="multiple appworkshop acf files"
@ -15,7 +15,7 @@ if [ "${steamappsfilewc}" -gt "1" ]; then
find "${HOME}" -name appworkshop_346110.acf -exec rm -f {} \;
fn_fix_msg_end
elif [ "${steamappsfilewc}" -eq "1" ]; then
# Steam mods directory selecter
# Steam mods directory selector
# This allows LinxuGSM to select either ~/.steam or ~/Steam. depending on what is being used
steamappsfile=$(find "${HOME}" -name appworkshop_346110.acf)
steamappsdir=$(dirname "${steamappsfile}")

2
lgsm/modules/fix_dst.sh

@ -8,7 +8,7 @@
moduleselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
# Fixes: ./dontstarve_dedicated_server_nullrenderer: ./lib32/libcurl-gnutls.so.4: no version information available (required by ./dontstarve_dedicated_server_nullrenderer).
# Issue only occures on CentOS as libcurl-gnutls.so.4 is called libcurl.so.4 on CentOS.
# Issue only occurs on CentOS as libcurl-gnutls.so.4 is called libcurl.so.4 on CentOS.
if [ -f "/etc/redhat-release" ] && [ ! -f "${serverfiles}/bin/lib32/libcurl-gnutls.so.4" ]; then
fixname="libcurl-gnutls.so.4"
fn_fix_msg_start

2
lgsm/modules/fix_onset.sh

@ -10,7 +10,7 @@ moduleselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:${serverfiles}"
# Fixes: Failed loading "mariadb": libmariadbclient.so.18: cannot open shared object file: No such file or directory
# Issue only occures on CentOS as libmariadbclient.so.18 is called libmariadb.so.3 on CentOS.
# Issue only occurs on CentOS as libmariadbclient.so.18 is called libmariadb.so.3 on CentOS.
if [ -f "/etc/redhat-release" ] && [ ! -f "${serverfiles}/libmariadbclient.so.18" ] && [ -f "/usr/lib64/libmariadb.so.3" ]; then
fixname="libmariadbclient.so.18"
fn_fix_msg_start

2
lgsm/modules/fix_rust.sh

@ -23,7 +23,7 @@ if [ -z "${seed}" ] || [ "${seed}" == "0" ]; then
randomseed=1
fi
# If Carbon mod is installed, run enviroment.sh
# If Carbon mod is installed, run environment.sh
if [ -f "${serverfiles}/carbon/tools/environment.sh" ]; then
fn_print_info_nl "Running Carbon environment.sh"
fn_script_log_info "Running Carbon environment.sh"

2
lgsm/modules/info_distro.sh

@ -3,7 +3,7 @@
# Author: Daniel Gibbs
# Contributors: https://linuxgsm.com/contrib
# Website: https://linuxgsm.com
# Description: Variables providing useful info on the Operating System such as disk and performace info.
# Description: Variables providing useful info on the Operating System such as disk and performance info.
# Used for command_details.sh, command_debug.sh and alert.sh.
# !Note: When adding variables to this script, ensure that they are also added to the command_dev_parse_distro_details.sh script.

6
lgsm/modules/info_game.sh

@ -350,7 +350,7 @@ fn_info_game_av() {
rconenabled="${rconenabled:-"false"}"
rconpassword="${rconpassword:-"NOT SET"}"
rconport="${rconport:-"0"}"
# queryport doesnt respond to any queries, using session only.
# queryport doesn't respond to any queries, using session only.
queryport=""$((port + 3))""
servername="${servername:-"NOT SET"}"
serverpassword="${serverpassword:-"NOT SET"}"
@ -2514,7 +2514,7 @@ if [ ! -f "${tmpdir}/publicip.json" ] || [ "$(find "${tmpdir}/publicip.json" -mm
ipresponse=$(curl -s --max-time 3 "${apiurl}") # Attempt to query ip-api.com with a 3 second timeout
exitcode=$?
# Check if the first request was successfull
# Check if the first request was successful
if [ "${exitcode}" -eq 0 ]; then
fn_script_log_pass "Queried ${apiurl} for public IP address"
@ -2532,7 +2532,7 @@ if [ ! -f "${tmpdir}/publicip.json" ] || [ "$(find "${tmpdir}/publicip.json" -mm
ipresponse=$(curl -s --max-time 3 "${apiurl}") # Attempt to query myip.wtf with a 3 second timeout as a backup
exitcode=$?
# Check if the backup request was successfull
# Check if the backup request was successful
if [ "${exitcode}" -eq 0 ]; then
fn_script_log_pass "Queried ${apiurl} for public IP address"

2
lgsm/modules/info_messages.sh

@ -369,7 +369,7 @@ fn_info_messages_gameserver() {
fi
fi
# Reverved Slots
# Reserved Slots
if [ -n "${statspassword}" ]; then
echo -e "${lightblue}Reserved Slots:\t${default}${reservedslots}"
fi

4
lgsm/modules/install_config.sh

@ -16,7 +16,7 @@ fn_check_cfgdir() {
fi
}
# Copys default configs from Game-Server-Configs repo to server config location.
# Copies default configs from Game-Server-Configs repo to server config location.
fn_default_config_remote() {
echo -e ""
echo -e "${bold}${lightyellow}Downloading ${gamename} Configs${default}"
@ -88,7 +88,7 @@ fn_default_config_remote() {
done
}
# Copys local default config to server config location.
# Copies local default config to server config location.
fn_default_config_local() {
echo -e ""
echo -e "${bold}${lightyellow}Copying ${gamename} Configs${default}"

4
lgsm/modules/mods_core.sh

@ -250,7 +250,7 @@ fn_mods_define() {
}
# Builds list of installed mods.
# using installed-mods.txt grabing mod info from mods_list.sh.
# using installed-mods.txt grabbing mod info from mods_list.sh.
fn_mods_installed_list() {
fn_mods_count_installed
# Set/reset variables.
@ -567,7 +567,7 @@ fn_mod_liblist_gam_filenames() {
esac
}
# modifers for liblist.gam to add/remote metamod binaries
# modifiers for liblist.gam to add/remote metamod binaries
fn_mod_install_liblist_gam_file() {
fn_mod_liblist_gam_filenames

6
lgsm/modules/mods_list.sh

@ -129,7 +129,7 @@ modseparator="MOD"
# [9] | "Supported Engines;": list them according to LGSM ${engine} variables, separated and ended with a semicolon, or use ENGINES to ignore the value
# [10] | "Supported Games;": list them according to LGSM ${gamename} variables, separated and ended with a semicolon, or use GAMES to ignore the value
# [11] | "Unsupported Games;": list them according to LGSM ${gamename} variables, separated and ended with a semicolon, or use NOTGAMES to ignore the value (useful to exclude a game when using Supported Engines)
# [12] | "AUTHOR_URL" is the author's website, displayed to the user when chosing mods to install
# [12] | "AUTHOR_URL" is the author's website, displayed to the user when choosing mods to install
# [13] | "Short Description" a description showed to the user upon installation/removal
# Half-life 1 Engine Mods
@ -172,7 +172,7 @@ mod_info_ulib=(MOD "ulib" "ULib" "https://codeload.github.com/TeamUlysses/ulib/z
mod_info_ulx=(MOD "ulx" "ULX" "https://codeload.github.com/TeamUlysses/ulx/zip/master" "ulx-master.zip" "0" "LowercaseOff" "${systemdir}/addons" "OVERWRITE" "ENGINES" "Garry's Mod;" "NOTGAMES" "http://ulyssesmod.net" "Admin Panel (requires ULib)")
mod_info_utime=(MOD "utime" "UTime" "https://github.com/TeamUlysses/utime/archive/master.zip" "utime-master.zip" "0" "LowercaseOff" "${systemdir}/addons" "OVERWRITE" "ENGINES" "Garry's Mod;" "NOTGAMES" "http://ulyssesmod.net" "Keep track of players play time")
mod_info_uclip=(MOD "uclip" "UClip" "https://github.com/TeamUlysses/uclip/archive/master.zip" "uclip-master.zip" "0" "LowercaseOff" "${systemdir}/addons" "OVERWRITE" "ENGINES" "Garry's Mod;" "NOTGAMES" "http://ulyssesmod.net" "An alternative to noclip")
mod_info_acf=(MOD "acf" "Armoured Combat Framework" "https://github.com/nrlulz/ACF/archive/master.zip" "acf-master.zip" "0" "LowercaseOn" "${systemdir}/addons" "acf-master/lua/acf/shared/guns;" "ENGINES" "Garry's Mod;" "NOTGAMES" "https://github.com/nrlulz/ACF" "Realistic Wepons & Engines")
mod_info_acf=(MOD "acf" "Armoured Combat Framework" "https://github.com/nrlulz/ACF/archive/master.zip" "acf-master.zip" "0" "LowercaseOn" "${systemdir}/addons" "acf-master/lua/acf/shared/guns;" "ENGINES" "Garry's Mod;" "NOTGAMES" "https://github.com/nrlulz/ACF" "Realistic Weapons & Engines")
mod_info_acf_missiles=(MOD "acfmissiles" "ACF Missiles" "https://github.com/Bubbus/ACF-Missiles/archive/master.zip" "acf-missiles-master.zip" "0" "LowercaseOn" "${systemdir}/addons" "OVERWRITE" "ENGINES" "Garry's Mod;" "NOTGAMES" "https://github.com/Bubbus/ACF-Missiles" "More missiles for ACF")
mod_info_advdupe2=(MOD "advdupe2" "Advanced Duplicator 2" "https://github.com/wiremod/advdupe2/archive/master.zip" "advdupe2-master.zip" "0" "LowercaseOn" "${systemdir}/addons" "OVERWRITE" "ENGINES" "Garry's Mod;" "NOTGAMES" "http://www.wiremod.com" "Save your constructions. Second version")
mod_info_pac3=(MOD "pac3" "PAC3" "https://github.com/CapsAdmin/pac3/archive/master.zip" "pac3-master.zip" "0" "LowercaseOff" "${systemdir}/addons" "OVERWRITE" "ENGINES" "Garry's Mod;" "NOTGAMES" "https://github.com/CapsAdmin/pac3" "Advanced player model customization")
@ -191,7 +191,7 @@ mod_info_magneticdipole=(MOD "magneticdipole" "Magnetic Dipole" "https://github.
mod_info_environmentorganizer=(MOD "environmentorganizer" "Environment Organizer" "https://github.com/dvdvideo1234/environmentorganizer/archive/master.zip" "environmentorganizer-master.zip" "0" "LowercaseOn" "${systemdir}/addons" "OVERWRITE" "ENGINES" "Garry's Mod;" "NOTGAMES" "https://github.com/dvdvideo1234/EnvironmentOrganizer" "Installs routines designed for server settings adjustment")
mod_info_improved_stacker=(MOD "improved-stacker" "Improved Stacker" "https://github.com/Mista-Tea/improved-stacker/archive/master.zip" "improved-stacker-master.zip" "0" "LowercaseOn" "${systemdir}/addons" "OVERWRITE" "ENGINES" "Garry's Mod;" "NOTGAMES" "https://github.com/Mista-Tea/improved-stacker" "Stacks entities in the direction chosen")
mod_info_improved_weight=(MOD "improved-weight" "Improved Weight" "https://github.com/Mista-Tea/improved-weight/archive/master.zip" "improved-weight-master.zip" "0" "LowercaseOn" "${systemdir}/addons" "OVERWRITE" "ENGINES" "Garry's Mod;" "NOTGAMES" "https://github.com/Mista-Tea/improved-weight" "Weight tool but with more features")
mod_info_improved_antinoclip=(MOD "improved-antinoclip" "Improved Antinoclip" "https://github.com/Mista-Tea/improved-antinoclip/archive/master.zip" "improved-antinoclip-master.zip" "0" "LowercaseOn" "${systemdir}/addons" "OVERWRITE" "ENGINES" "Garry's Mod;" "NOTGAMES" "https://github.com/Mista-Tea/improved-antinoclip" "Controls clipping trough an object")
mod_info_improved_antinoclip=(MOD "improved-antinoclip" "Improved Antinoclip" "https://github.com/Mista-Tea/improved-antinoclip/archive/master.zip" "improved-antinoclip-master.zip" "0" "LowercaseOn" "${systemdir}/addons" "OVERWRITE" "ENGINES" "Garry's Mod;" "NOTGAMES" "https://github.com/Mista-Tea/improved-antinoclip" "Controls clipping through an object")
mod_info_darkrp=(MOD "darkrp" "DarkRP" "https://github.com/FPtje/DarkRP/archive/master.zip" "darkrp-master.zip" "0" "LowercaseOn" "${systemdir}/gamemodes" "OVERWRITE" "ENGINES" "Garry's Mod;" "NOTGAMES" "http://darkrp.com" "Most popular gamemode")
mod_info_darkrpmodification=(MOD "darkrpmodification" "DarkRP Modification" "https://github.com/FPtje/darkrpmodification/archive/master.zip" "darkrpmodification-master.zip" "0" "LowercaseOff" "${systemdir}/addons" "NOUPDATE" "ENGINES" "Garry's Mod;" "NOTGAMES" "http://darkrp.com" "Customize DarkRP settings")
mod_info_laserstool=(MOD "laserstool" "Laser STool" "https://github.com/dvdvideo1234/laserstool/archive/main.zip" "laserstool-main.zip" "0" "LowercaseOn" "${systemdir}/addons" "OVERWRITE" "ENGINES" "Garry's Mod;" "NOTGAMES" "https://github.com/dvdvideo1234/LaserSTool" "Scripted tool that spawns laser entities, simulates light rays and even kill players")

2
lgsm/modules/query_gamedig.sh

@ -3,7 +3,7 @@
# Author: Daniel Gibbs
# Contributors: https://linuxgsm.com/contrib
# Website: https://linuxgsm.com
# Description: Querys a gameserver using node-gamedig.
# Description: Queries a gameserver using node-gamedig.
# https://github.com/gamedig/node-gamedig
moduleselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"

184
lgsm/modules/query_gsquery.py

@ -6,154 +6,206 @@
# Website: https://linuxgsm.com
# Description: Allows querying of various game servers.
"""Query game servers using a set of lightweight UDP protocols."""
import argparse
import socket
import sys
engine_types = ('protocol-valve', 'protocol-quake2', 'protocol-quake3', 'protocol-gamespy1',
'protocol-unreal2', 'ut3', 'minecraft', 'minecraftbe', 'jc2m', 'mumbleping', 'soldat', 'teeworlds')
engine_types = (
"protocol-valve",
"protocol-quake2",
"protocol-quake3",
"protocol-gamespy1",
"protocol-unreal2",
"ut3",
"minecraft",
"minecraftbe",
"jc2m",
"mumbleping",
"soldat",
"teeworlds",
)
class GSQuery:
"""Game server query dispatcher."""
class gsquery:
server_response_timeout = 2
default_buffer_length = 1024
sourcequery = ('protocol-valve', 'avalanche3.0', 'barotrauma', 'madness', 'quakelive', 'realvirtuality',
'refractor', 'source', 'goldsrc', 'spark', 'starbound', 'unity3d', 'unreal4', 'wurm')
idtech2query = ('protocol-quake2', 'idtech2', 'quake', 'iw2.0')
idtech3query = ('protocol-quake3', 'iw3.0', 'ioquake3', 'qfusion')
minecraftquery = ('minecraft', 'lwjgl2')
minecraftbequery = ('minecraftbe')
jc2mquery = ('jc2m')
mumblequery = ('mumbleping')
soldatquery = ('soldat')
twquery = ('teeworlds')
unrealquery = ('protocol-gamespy1', 'unreal')
unreal2query = ('protocol-unreal2', 'unreal2')
unreal3query = ('ut3', 'unreal3')
sourcequery = (
"protocol-valve",
"avalanche3.0",
"barotrauma",
"madness",
"quakelive",
"realvirtuality",
"refractor",
"source",
"goldsrc",
"spark",
"starbound",
"unity3d",
"unreal4",
"wurm",
)
idtech2query = ("protocol-quake2", "idtech2", "quake", "iw2.0")
idtech3query = ("protocol-quake3", "iw3.0", "ioquake3", "qfusion")
minecraftquery = ("minecraft", "lwjgl2")
minecraftbequery = ("minecraftbe",)
jc2mquery = ("jc2m",)
mumblequery = ("mumbleping",)
soldatquery = ("soldat",)
twquery = ("teeworlds",)
unrealquery = ("protocol-gamespy1", "unreal")
unreal2query = ("protocol-unreal2", "unreal2")
unreal3query = ("ut3", "unreal3")
def __init__(self, arguments):
"""Create a query instance from parsed CLI args."""
self.argument = arguments
#
if self.argument.engine in self.sourcequery:
self.query_prompt_string = b'\xFF\xFF\xFF\xFFTSource Engine Query\0'
self.query_prompt_string = b"\xff\xff\xff\xffTSource Engine Query\0"
elif self.argument.engine in self.idtech2query:
self.query_prompt_string = b'\xff\xff\xff\xffstatus\x00'
self.query_prompt_string = b"\xff\xff\xff\xffstatus\x00"
elif self.argument.engine in self.idtech3query:
self.query_prompt_string = b'\xff\xff\xff\xffgetstatus'
self.query_prompt_string = b"\xff\xff\xff\xffgetstatus"
elif self.argument.engine in self.jc2mquery:
self.query_prompt_string = b'\xFE\xFD\x09\x10\x20\x30\x40'
self.query_prompt_string = b"\xfe\xfd\x09\x10\x20\x30\x40"
elif self.argument.engine in self.minecraftquery:
self.query_prompt_string = b'\xFE\xFD\x09\x3d\x54\x1f\x93'
self.query_prompt_string = b"\xfe\xfd\x09\x3d\x54\x1f\x93"
elif self.argument.engine in self.minecraftbequery:
self.query_prompt_string = b'\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\xfe\xfe\xfe\xfe\xfd\xfd\xfd\xfd\x12\x34\x56\x78\x00\x00\x00\x00\x00\x00\x00\x00'
self.query_prompt_string = (
b"\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00"
b"\xfe\xfe\xfe\xfe\xfd\xfd\xfd\xfd\x12\x34\x56\x78"
b"\x00\x00\x00\x00\x00\x00\x00\x00"
)
elif self.argument.engine in self.mumblequery:
self.query_prompt_string = b'\x00\x00\x00\x00\x01\x02\x03\x04\x05\x06\x07\x08'
self.query_prompt_string = (
b"\x00\x00\x00\x00\x01\x02\x03\x04\x05\x06\x07\x08"
)
elif self.argument.engine in self.soldatquery:
self.query_prompt_string = b'\x69\x00'
self.query_prompt_string = b"\x69\x00"
elif self.argument.engine in self.twquery:
self.query_prompt_string = b'\x04\x00\x00\xff\xff\xff\xff\x05' + \
bytearray(511)
self.query_prompt_string = b"\x04\x00\x00\xff\xff\xff\xff\x05" + bytearray(
511
)
elif self.argument.engine in self.unrealquery:
self.query_prompt_string = b'\x5C\x69\x6E\x66\x6F\x5C'
self.query_prompt_string = b"\x5c\x69\x6e\x66\x6f\x5c"
elif self.argument.engine in self.unreal2query:
self.query_prompt_string = b'\x79\x00\x00\x00\x00'
self.query_prompt_string = b"\x79\x00\x00\x00\x00"
elif self.argument.engine in self.unreal3query:
self.query_prompt_string = b'\xFE\xFD\x09\x00\x00\x00\x00'
self.query_prompt_string = b"\xfe\xfd\x09\x00\x00\x00\x00"
self.connected = False
self.response = None
@staticmethod
def fatal_error(error_message, error_code=1):
sys.stderr.write('ERROR: ' + str(error_message) + '\n')
"""Write an error message to stderr and exit."""
sys.stderr.write("ERROR: " + str(error_message) + "\n")
sys.exit(error_code)
@staticmethod
def exit_success(success_message=''):
sys.stdout.write('OK: ' + str(success_message) + '\n')
def exit_success(success_message=""):
"""Write a success message to stdout and exit."""
sys.stdout.write("OK: " + str(success_message) + "\n")
sys.exit(0)
def responding(self):
"""Send a single UDP query and print the response."""
# Connect.
connection = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
connection.settimeout(self.server_response_timeout)
try:
self.connected = connection.connect(
(self.argument.address, int(self.argument.port)))
(self.argument.address, int(self.argument.port))
)
except socket.timeout:
self.fatal_error('Request timed out', 1)
except Exception:
self.fatal_error('Unable to connect', 1)
self.fatal_error("Request timed out", 1)
except OSError:
self.fatal_error("Unable to connect", 1)
# Send.
connection.send(self.query_prompt_string)
# Receive.
try:
self.response = connection.recv(self.default_buffer_length)
except socket.error:
self.fatal_error('Unable to receive', 2)
self.fatal_error("Unable to receive", 2)
connection.close()
# Response.
if self.response is None:
self.fatal_error('No response', 3)
self.fatal_error("No response", 3)
if len(self.response) < 5:
sys.exit('Short response.', 3)
sys.exit("Short response.", 3)
else:
self.exit_success(str(self.response))
def parse_args():
"""Parse command-line arguments."""
parser = argparse.ArgumentParser(
description='Allows querying of various game servers.',
usage='usage: python3 %(prog)s [options]',
add_help=False
description="Allows querying of various game servers.",
usage="usage: python3 %(prog)s [options]",
add_help=False,
)
parser.add_argument(
'-a', '--address',
"-a",
"--address",
type=str,
required=True,
help='The IPv4 address of the server.'
help="The IPv4 address of the server.",
)
parser.add_argument(
'-p', '--port',
"-p",
"--port",
type=int,
required=True,
help='The IPv4 port of the server.'
help="The IPv4 port of the server.",
)
parser.add_argument(
'-e', '--engine',
metavar='ENGINE',
"-e",
"--engine",
metavar="ENGINE",
choices=engine_types,
help='Engine type: ' + ' '.join(engine_types)
help="Engine type: " + " ".join(engine_types),
)
parser.add_argument(
'-v', '--verbose',
action='store_true',
help='Display verbose output.'
"-v",
"--verbose",
action="store_true",
help="Display verbose output.",
)
parser.add_argument(
'-d', '--debug',
action='store_true',
help='Display debugging output.'
"-d",
"--debug",
action="store_true",
help="Display debugging output.",
)
parser.add_argument(
'-V', '--version',
action='version',
version='%(prog)s 0.0.1',
help='Display version and exit.'
)
parser.add_argument(
'-h', '--help',
action='help',
help='Display help and exit.'
"-V",
"--version",
action="version",
version="%(prog)s 0.0.1",
help="Display version and exit.",
)
parser.add_argument("-h", "--help", action="help", help="Display help and exit.")
return parser.parse_args()
def main():
"""CLI entrypoint."""
arguments = parse_args()
server = gsquery(arguments)
server = GSQuery(arguments)
server.responding()
if __name__ == '__main__':
if __name__ == "__main__":
main()

Loading…
Cancel
Save