diff --git a/mc b/mc index abd3607..b3ca0b2 100755 --- a/mc +++ b/mc @@ -3,36 +3,39 @@ readonly base_url="https://api.my-mc.link/" readonly headers=( -H "Accept: application/json" -H "Content-Type: application/json" -H "x-my-mc-auth: ${MY_MC_API_KEY}" ) + +# command format: ' [options]' + declare -rA commands=( - [hello]='GET' - [time]='GET' - [stats]='GET' - [log]='GET' - [start]='GET' - [stop]='GET' - [restart]='GET' - [my-link]='GET' - [my-geyser-link]='GET' - [my-sftp]='GET' - [my-hash]='GET' - [my-geyser-hash]='GET' - [my-hash-sftp]='GET' - [list-players]='GET' - [website]='GET' - [map]='GET' - [status-minecraft]='GET' - [status-bedrock]='GET' - [status-sftp]='GET' - [ban]='POST {"username": "%s"}' - [unban]='POST {"username": "%s"}' - [say]='POST {"message": "%s"}' - [tell]='POST {"username": "%s", "message": "%s"}' - [console]='POST {"command": "%s"}' - [give]='POST {"username": "%s", "item": "%s", "amount": "%s"}' - [install]='POST {"mod": "%s"}' - [uninstall]='POST {"mod": "%s"}' - [search]='POST {"mod": "%s"}' - [mod-list]='GET' + [hello]='hello GET' + [time]='time GET' + [stats]='stats GET' + [log]='log GET' + [start]='start GET' + [stop]='stop GET' + [restart]='restart GET' + [my-link]='my-link GET' + [my-geyser-link]='my-geyser-link GET' + [my-sftp]='my-sftp GET' + [my-hash]='my-hash GET' + [my-geyser-hash]='my-geyser-hash GET' + [my-hash-sftp]='my-hash-sftp GET' + [list-players]='list-players GET' + [website]='website GET' + [map]='map GET' + [status-minecraft]='status/Minecraft GET' + [status-bedrock]='status/Bedrock GET' + [status-sftp]='status/SFTP GET' + [ban]='ban POST {"username": "%s"}' + [unban]='unban POST {"username": "%s"}' + [say]='say POST {"message": "%s"}' + [tell]='tell POST {"username": "%s", "message": "%s"}' + [console]='console POST {"command": "%s"}' + [give]='give POST {"username": "%s", "item": "%s", "amount": "%s"}' + [install]='install POST {"mod": "%s"}' + [uninstall]='uninstall POST {"mod": "%s"}' + [search]='search POST {"mod": "%s"}' + [mod-list]='mod-list GET' ) function first() { @@ -60,27 +63,26 @@ function usage() { printf "Positional arguments will fill the JSON objects with values from left to right.\n\n" printf "COMMANDS:\n" for command in "${!commands[@]}"; do - printf "\t ${command} $(rest ${commands[${command}]})\n" + printf "\t ${command} $(rest $(rest ${commands[${command}]}))\n" done printf "\n" } -# remove command from arg list while preserving quoted strings. + args=("$@") +# remove command from arg list while preserving quoted strings. args=("${args[@]:1}") for command in "${!commands[@]}"; do if [[ "$1" == "${command}" ]]; then - if [[ "$(first "${commands[$1]}")" == "POST" ]]; then - curl -sS "${headers[@]}" -X "$(first "${commands[$1]}")" "${base_url}${command}" -d "$(printf "$(rest ${commands[$1]})\n" "${args[@]}")" - echo "" - elif [[ "${command}" =~ ^"status" ]]; then - curl -sS "${headers[@]}" -X "$(first "${commands[$1]}")" "${base_url}status/$(status_format ${command})" + if [[ "$(first $(rest ${commands[$1]}))" == "POST" ]]; then + curl -sS "${headers[@]}" -X "$(first $(rest ${commands[$1]}))" "${base_url}$(first "${commands[$1]}")" -d "$(printf "$(rest $(rest ${commands[$1]}))\n" "${args[@]}")" echo "" else - curl -sS "${headers[@]}" -X "$(first "${commands[$1]}")" "${base_url}${command}" + curl -sS "${headers[@]}" -X "$(first $(rest ${commands[$1]}))" "${base_url}$(first "${commands[$1]}")" echo "" fi + exit 0 fi done