Adds SDQL chat command (#33366)
Allow's calling SDQL from bots supporting the CHAT system API
This commit is contained in:
committed by
CitadelStationBot
parent
a22b225015
commit
253a3d519e
@@ -82,6 +82,22 @@ GLOBAL_LIST(round_end_notifiees)
|
||||
GLOB.round_end_notifiees[sender] = TRUE
|
||||
return "I will notify [sender] when the round ends."
|
||||
|
||||
/datum/server_tools_command/sdql
|
||||
name = "sdql"
|
||||
help_text = "Runs an SDQL query"
|
||||
admin_only = TRUE
|
||||
|
||||
/datum/server_tools_command/sdql/Run(sender, params)
|
||||
if(GLOB.AdminProcCaller)
|
||||
return "Unable to run query, another admin proc call is in progress. Try again later."
|
||||
GLOB.AdminProcCaller = "CHAT_[sender]" //_ won't show up in ckeys so it'll never match with a real admin
|
||||
var/list/results = world.SDQL2_query(params, GLOB.AdminProcCaller, GLOB.AdminProcCaller)
|
||||
if(!results)
|
||||
return "Query produced no output"
|
||||
var/list/text_res = results.Copy(1, 3)
|
||||
var/list/refs = results.len > 3 ? results.Copy(4) : null
|
||||
. = "[text_res.Join("\n")][refs ? "\nRefs: [refs.Join(" ")]" : ""]"
|
||||
|
||||
/datum/server_tools_command/reload_admins
|
||||
name = "reload_admins"
|
||||
help_text = "Forces the server to reload admins."
|
||||
|
||||
@@ -24,10 +24,14 @@
|
||||
message_admins("<span class='danger'>ERROR: Non-admin [key_name(usr, usr.client)] attempted to execute a SDQL query!</span>")
|
||||
log_admin("Non-admin [usr.ckey]([usr]) attempted to execute a SDQL query!")
|
||||
return FALSE
|
||||
var/list/results = world.SDQL2_query(query_text, key_name_admin(usr), "[usr.ckey]([usr])")
|
||||
for(var/I in 1 to 3)
|
||||
to_chat(usr, results[I])
|
||||
|
||||
/world/proc/SDQL2_query(query_text, log_entry1, log_entry2)
|
||||
var/query_log = "executed SDQL query: \"[query_text]\"."
|
||||
message_admins("[key_name_admin(usr)] [query_log]")
|
||||
query_log = "[usr.ckey]([usr]) [query_log]"
|
||||
message_admins("[log_entry1] [query_log]")
|
||||
query_log = "[log_entry2] [query_log]"
|
||||
log_game(query_log)
|
||||
NOTICE(query_log)
|
||||
var/objs_all = 0
|
||||
@@ -49,6 +53,7 @@
|
||||
if(!querys || querys.len < 1)
|
||||
return
|
||||
|
||||
var/list/refs = list()
|
||||
for(var/list/query_tree in querys)
|
||||
var/list/from_objs = list()
|
||||
var/list/select_types = list()
|
||||
@@ -100,6 +105,7 @@
|
||||
var/text = ""
|
||||
for(var/datum/t in objs)
|
||||
text += SDQL_gen_vv_href(t)
|
||||
refs[REF(t)] = TRUE
|
||||
CHECK_TICK
|
||||
usr << browse(text, "window=SDQL-result")
|
||||
|
||||
@@ -112,9 +118,9 @@
|
||||
|
||||
var/end_time = REALTIMEOFDAY
|
||||
end_time -= start_time
|
||||
to_chat(usr, "<span class='admin'>SDQL query results: [query_text]</span>")
|
||||
to_chat(usr, "<span class='admin'>SDQL query completed: [objs_all] objects selected by path, and [objs_eligible] objects executed on after WHERE filtering if applicable.</span>")
|
||||
to_chat(usr, "<span class='admin'>SDQL query took [DisplayTimeText(end_time)] to complete.</span>")
|
||||
return list("<span class='admin'>SDQL query results: [query_text]</span>",\
|
||||
"<span class='admin'>SDQL query completed: [objs_all] objects selected by path, and [objs_eligible] objects executed on after WHERE filtering if applicable.</span>",\
|
||||
"<span class='admin'>SDQL query took [DisplayTimeText(end_time)] to complete.</span>") + refs
|
||||
|
||||
/proc/SDQL_qdel_datum(datum/d)
|
||||
qdel(d)
|
||||
|
||||
@@ -110,7 +110,9 @@ GLOBAL_PROTECT(LastAdminCalledProc)
|
||||
|
||||
/proc/WrapAdminProcCall(target, procname, list/arguments)
|
||||
var/current_caller = GLOB.AdminProcCaller
|
||||
var/ckey = usr.client.ckey
|
||||
var/ckey = usr ? usr.client.ckey : GLOB.AdminProcCaller
|
||||
if(!ckey)
|
||||
CRASH("WrapAdminProcCall with no ckey: [target] [procname] [english_list(arguments)]")
|
||||
if(current_caller && current_caller != ckey)
|
||||
to_chat(usr, "<span class='adminnotice'>Another set of admin called procs are still running, your proc will be run after theirs finish.</span>")
|
||||
UNTIL(!GLOB.AdminProcCaller)
|
||||
|
||||
Reference in New Issue
Block a user