Files
Paradise/code/modules/admin/banappearance.dm
AffectedArc07 2bad70717c Async SQL + SSdbcore (#15007)
* Initial Commit - Async SQL

* First batch of queries

* More progress

* Nukes DB Polls

* More work

* oops

* One push

* Notes work now

* Ok these work

* Watchlist done

* Async Bans!

* Async Permissions

* Async client procs

* I officially hate preference datums

* Also these

* Async Custom Items

* Async Karma

* Async Library

* Async TOS

* Cleans out the old SQL code

* CI Sanity

* Apparently MySQL doesnt support this

* What about this

* Maybe this

* Review pass 1

* This too

* Fixes job ban loading

* Fix undeleted queries

* Prevents sensitive queries being logged

* Documentation + tweaks

* Adds a verb to force reconnect the DB

* More review tweaks

* Farie tweaks

* Fixes this
2020-12-16 15:46:25 -05:00

99 lines
2.8 KiB
Plaintext

//ban people from using custom names and appearances. that'll show 'em.
GLOBAL_VAR(appearanceban_runonce) //Updates legacy bans with new info
GLOBAL_LIST_EMPTY(appearance_keylist) //to store the keys
/proc/appearance_fullban(mob/M, reason)
if(!M || !M.key) return
GLOB.appearance_keylist.Add(text("[M.ckey] ## [reason]"))
appearance_savebanfile()
/proc/appearance_client_fullban(ckey)
if(!ckey) return
GLOB.appearance_keylist.Add(text("[ckey]"))
appearance_savebanfile()
//returns a reason if M is banned, returns 0 otherwise
/proc/appearance_isbanned(mob/M)
if(M)
for(var/s in GLOB.appearance_keylist)
if(findtext(s, "[M.ckey]") == 1)
var/startpos = findtext(s, "## ") + 3
if(startpos && startpos < length(s))
var/text = copytext(s, startpos, 0)
if(text)
return text
return "Reason Unspecified"
return 0
/*
DEBUG
/mob/verb/list_all_appearances()
set name = "list all appearances"
for(var/s in appearance_keylist)
to_chat(world, s)
/mob/verb/reload_appearances()
set name = "reload appearances"
appearance_loadbanfile()
*/
// AA 2020-11-25: This entire proc isnt even called. What the actual fuck.
/proc/appearance_loadbanfile()
if(config.ban_legacy_system)
var/savefile/S=new("data/appearance_full.ban")
S["keys[0]"] >> GLOB.appearance_keylist
log_admin("Loading appearance_rank")
S["runonce"] >> GLOB.appearanceban_runonce
if(!length(GLOB.appearance_keylist))
GLOB.appearance_keylist=list()
log_admin("appearance_keylist was empty")
else
if(!SSdbcore.IsConnected())
log_world("Database connection failed. Reverting to the legacy ban system.")
config.ban_legacy_system = 1
appearance_loadbanfile()
return
//appearance bans
var/datum/db_query/appearanceban_query = SSdbcore.NewQuery("SELECT ckey FROM [format_table_name("ban")] WHERE bantype = 'APPEARANCE_BAN' AND NOT unbanned = 1")
if(!appearanceban_query.warn_execute())
qdel(appearanceban_query)
return FALSE
while(appearanceban_query.NextRow())
var/ckey = appearanceban_query.item[1]
GLOB.appearance_keylist.Add("[ckey]")
qdel(appearanceban_query)
/proc/appearance_savebanfile()
var/savefile/S=new("data/appearance_full.ban")
to_chat(S["keys[0]"], GLOB.appearance_keylist)
/proc/appearance_unban(mob/M)
appearance_remove("[M.ckey]")
appearance_savebanfile()
/proc/appearance_updatelegacybans()
if(!GLOB.appearanceban_runonce)
log_admin("Updating appearancefile!")
// Updates bans.. Or fixes them. Either way.
for(var/T in GLOB.appearance_keylist)
if(!T) continue
GLOB.appearanceban_runonce++ //don't run this update again
/proc/appearance_remove(X)
for(var/i = 1; i <= length(GLOB.appearance_keylist); i++)
if( findtext(GLOB.appearance_keylist[i], "[X]") )
GLOB.appearance_keylist.Remove(GLOB.appearance_keylist[i])
appearance_savebanfile()
return 1
return 0