mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2025-12-21 23:52:12 +00:00
API refactor + update (#6127)
This commit is contained in:
295
code/modules/world_api/commands/server_query.dm
Normal file
295
code/modules/world_api/commands/server_query.dm
Normal file
@@ -0,0 +1,295 @@
|
||||
//Get Server Status
|
||||
/datum/topic_command/get_serverstatus
|
||||
name = "get_serverstatus"
|
||||
description = "Gets the server status."
|
||||
no_auth = TRUE
|
||||
|
||||
/datum/topic_command/get_serverstatus/run_command(queryparams)
|
||||
var/list/s[] = list()
|
||||
s["version"] = game_version
|
||||
s["mode"] = master_mode
|
||||
s["respawn"] = config.abandon_allowed
|
||||
s["enter"] = config.enter_allowed
|
||||
s["vote"] = config.allow_vote_mode
|
||||
s["ai"] = config.allow_ai
|
||||
s["host"] = host ? host : null
|
||||
s["stationtime"] = worldtime2text()
|
||||
s["roundduration"] = get_round_duration_formatted()
|
||||
s["gameid"] = game_id
|
||||
s["game_state"] = SSticker ? 0 : SSticker.current_state
|
||||
s["transferring"] = emergency_shuttle ? !emergency_shuttle.online() : FALSE
|
||||
|
||||
s["players"] = clients.len
|
||||
s["admins"] = 0
|
||||
|
||||
for(var/client/C in clients)
|
||||
if(C.holder)
|
||||
if(C.holder.fakekey)
|
||||
continue
|
||||
|
||||
s["admins"]++
|
||||
|
||||
statuscode = 200
|
||||
response = "Server status fetched."
|
||||
data = s
|
||||
return TRUE
|
||||
|
||||
|
||||
//Get a Staff List
|
||||
/datum/topic_command/get_stafflist
|
||||
name = "get_stafflist"
|
||||
description = "Gets a list of connected staffmembers"
|
||||
|
||||
/datum/topic_command/get_stafflist/run_command(queryparams)
|
||||
var/list/staff = list()
|
||||
for (var/client/C in admins)
|
||||
staff[C] = C.holder.rank
|
||||
|
||||
statuscode = 200
|
||||
response = "Staff list fetched"
|
||||
data = staff
|
||||
return TRUE
|
||||
|
||||
//Char Names
|
||||
/datum/topic_command/get_char_list
|
||||
name = "get_char_list"
|
||||
description = "Provides a list of all characters ingame"
|
||||
|
||||
/datum/topic_command/get_char_list/run_command(queryparams)
|
||||
var/list/chars = list()
|
||||
|
||||
var/list/mobs = sortmobs()
|
||||
for(var/mob/M in mobs)
|
||||
if(!M.ckey) continue
|
||||
chars[M.name] += M.key ? (M.client ? M.key : "[M.key] (DC)") : "No key"
|
||||
|
||||
statuscode = 200
|
||||
response = "Char list fetched"
|
||||
data = chars
|
||||
return TRUE
|
||||
|
||||
//Admin Count
|
||||
/datum/topic_command/get_count_admin
|
||||
name = "get_count_admin"
|
||||
description = "Gets the number of admins connected"
|
||||
|
||||
/datum/topic_command/get_count_admin/run_command(queryparams)
|
||||
var/n = 0
|
||||
for (var/client/client in clients)
|
||||
if (client.holder && client.holder.rights & (R_ADMIN))
|
||||
n++
|
||||
|
||||
statuscode = 200
|
||||
response = "Admin count fetched"
|
||||
data = n
|
||||
return TRUE
|
||||
|
||||
//CCIA Count
|
||||
/datum/topic_command/get_count_cciaa
|
||||
name = "get_count_cciaa"
|
||||
description = "Gets the number of ccia connected"
|
||||
|
||||
/datum/topic_command/get_count_ccia/run_command(queryparams)
|
||||
var/n = 0
|
||||
for (var/client/client in clients)
|
||||
if (client.holder && (client.holder.rights & R_CCIAA) && !(client.holder.rights & R_ADMIN))
|
||||
n++
|
||||
|
||||
statuscode = 200
|
||||
response = "CCIA count fetched"
|
||||
data = n
|
||||
return TRUE
|
||||
|
||||
//Mod Count
|
||||
/datum/topic_command/get_count_mod
|
||||
name = "get_count_mod"
|
||||
description = "Gets the number of mods connected"
|
||||
|
||||
/datum/topic_command/get_count_mod/run_command(queryparams)
|
||||
var/n = 0
|
||||
for (var/client/client in clients)
|
||||
if (client.holder && (client.holder.rights & R_MOD) && !(client.holder.rights & R_ADMIN))
|
||||
n++
|
||||
|
||||
statuscode = 200
|
||||
response = "Mod count fetched"
|
||||
data = n
|
||||
return TRUE
|
||||
|
||||
//Player Count
|
||||
/datum/topic_command/get_count_player
|
||||
name = "get_count_player"
|
||||
description = "Gets the number of players connected"
|
||||
no_auth = TRUE
|
||||
|
||||
/datum/topic_command/get_count_player/run_command(queryparams)
|
||||
var/n = 0
|
||||
for(var/mob/M in player_list)
|
||||
if(M.client)
|
||||
n++
|
||||
|
||||
statuscode = 200
|
||||
response = "Player count fetched"
|
||||
data = n
|
||||
return TRUE
|
||||
|
||||
//Get Ghosts
|
||||
/datum/topic_command/get_ghosts
|
||||
name = "get_ghosts"
|
||||
description = "Gets the ghosts"
|
||||
|
||||
/datum/topic_command/get_ghosts/run_command(queryparams)
|
||||
var/list/ghosts[] = list()
|
||||
ghosts = get_ghosts(1,1)
|
||||
|
||||
statuscode = 200
|
||||
response = "Fetched Ghost list"
|
||||
data = ghosts
|
||||
return TRUE
|
||||
|
||||
// Crew Manifest
|
||||
/datum/topic_command/get_manifest
|
||||
name = "get_manifest"
|
||||
description = "Gets the crew manifest"
|
||||
|
||||
/datum/topic_command/get_manifest/run_command(queryparams)
|
||||
var/list/positions = list()
|
||||
var/list/set_names = list(
|
||||
"heads" = command_positions,
|
||||
"sec" = security_positions,
|
||||
"eng" = engineering_positions,
|
||||
"med" = medical_positions,
|
||||
"sci" = science_positions,
|
||||
"civ" = civilian_positions,
|
||||
"bot" = nonhuman_positions
|
||||
)
|
||||
|
||||
for(var/datum/data/record/t in data_core.general)
|
||||
var/name = t.fields["name"]
|
||||
var/rank = t.fields["rank"]
|
||||
var/real_rank = make_list_rank(t.fields["real_rank"])
|
||||
|
||||
var/department = 0
|
||||
for(var/k in set_names)
|
||||
if(real_rank in set_names[k])
|
||||
if(!positions[k])
|
||||
positions[k] = list()
|
||||
positions[k][name] = rank
|
||||
department = 1
|
||||
if(!department)
|
||||
if(!positions["misc"])
|
||||
positions["misc"] = list()
|
||||
positions["misc"][name] = rank
|
||||
|
||||
statuscode = 200
|
||||
response = "Manifest fetched"
|
||||
data = positions
|
||||
return TRUE
|
||||
|
||||
//Player Ckeys
|
||||
/datum/topic_command/get_player_list
|
||||
name = "get_player_list"
|
||||
description = "Gets a list of connected players"
|
||||
params = list(
|
||||
"showadmins" = list("name"="show admins","desc"="A boolean to toggle whether or not hidden admins should be shown with proper or improper ckeys.","req"=0,"type"="int")
|
||||
)
|
||||
|
||||
/datum/topic_command/get_player_list/run_command(queryparams)
|
||||
var/show_hidden_admins = 0
|
||||
|
||||
if (!isnull(queryparams["showadmins"]))
|
||||
show_hidden_admins = text2num(queryparams["showadmins"])
|
||||
|
||||
var/list/players = list()
|
||||
for (var/client/C in clients)
|
||||
if (show_hidden_admins && C.holder && C.holder.fakekey)
|
||||
players += ckey(C.holder.fakekey)
|
||||
else
|
||||
players += C.ckey
|
||||
|
||||
statuscode = 200
|
||||
response = "Player list fetched"
|
||||
data = players
|
||||
return TRUE
|
||||
|
||||
//Get info about a specific player
|
||||
/datum/topic_command/get_player_info
|
||||
name = "get_player_info"
|
||||
description = "Gets information about a specific player"
|
||||
params = list(
|
||||
"search" = list("name"="search","desc"="List with strings that should be searched for","req"=1,"type"="lst")
|
||||
)
|
||||
|
||||
/datum/topic_command/get_player_info/run_command(queryparams)
|
||||
var/list/search = queryparams["search"]
|
||||
|
||||
var/list/ckeysearch = list()
|
||||
for(var/text in search)
|
||||
ckeysearch += ckey(text)
|
||||
|
||||
var/list/match = list()
|
||||
|
||||
for(var/mob/M in mob_list)
|
||||
var/strings = list(M.name, M.ckey)
|
||||
if(M.mind)
|
||||
strings += M.mind.assigned_role
|
||||
strings += M.mind.special_role
|
||||
for(var/text in strings)
|
||||
if(ckey(text) in ckeysearch)
|
||||
match[M] += 10 // an exact match is far better than a partial one
|
||||
else
|
||||
for(var/searchstr in search)
|
||||
if(findtext(text, searchstr))
|
||||
match[M] += 1
|
||||
|
||||
var/maxstrength = 0
|
||||
for(var/mob/M in match)
|
||||
maxstrength = max(match[M], maxstrength)
|
||||
for(var/mob/M in match)
|
||||
if(match[M] < maxstrength)
|
||||
match -= M
|
||||
|
||||
if(!match.len)
|
||||
statuscode = 449
|
||||
response = "No match found"
|
||||
data = null
|
||||
return TRUE
|
||||
else if(match.len == 1)
|
||||
var/mob/M = match[1]
|
||||
var/info = list()
|
||||
info["key"] = M.key
|
||||
if (M.client)
|
||||
var/client/C = M.client
|
||||
info["discordmuted"] = C.mute_discord ? "Yes" : "No"
|
||||
info["name"] = M.name == M.real_name ? M.name : "[M.name] ([M.real_name])"
|
||||
info["role"] = M.mind ? (M.mind.assigned_role ? M.mind.assigned_role : "No role") : "No mind"
|
||||
var/turf/MT = get_turf(M)
|
||||
info["loc"] = M.loc ? "[M.loc]" : "null"
|
||||
info["turf"] = MT ? "[MT] @ [MT.x], [MT.y], [MT.z]" : "null"
|
||||
info["area"] = MT ? "[MT.loc]" : "null"
|
||||
info["antag"] = M.mind ? (M.mind.special_role ? M.mind.special_role : "Not antag") : "No mind"
|
||||
info["hasbeenrev"] = M.mind ? M.mind.has_been_rev : "No mind"
|
||||
info["stat"] = M.stat
|
||||
info["type"] = M.type
|
||||
if(isliving(M))
|
||||
var/mob/living/L = M
|
||||
info["damage"] = list2params(list(
|
||||
oxy = L.getOxyLoss(),
|
||||
tox = L.getToxLoss(),
|
||||
fire = L.getFireLoss(),
|
||||
brute = L.getBruteLoss(),
|
||||
clone = L.getCloneLoss(),
|
||||
brain = L.getBrainLoss()
|
||||
))
|
||||
else
|
||||
info["damage"] = "non-living"
|
||||
info["gender"] = M.gender
|
||||
statuscode = 200
|
||||
response = "Client data fetched"
|
||||
data = info
|
||||
return TRUE
|
||||
else
|
||||
statuscode = 449
|
||||
response = "Multiple Matches found"
|
||||
data = null
|
||||
return TRUE
|
||||
Reference in New Issue
Block a user