//This is a list of words which are ignored by the parser when comparing message contents for names. MUST BE IN LOWER CASE!
var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey","alien","as")
/client/verb/adminhelp()
set category = "Admin"
set name = "Adminhelp"
if(say_disabled) //This is here to try to identify lag problems
to_chat(usr, "Speech is currently admin-disabled.")
return
//handle muting and automuting
if(prefs.muted & MUTE_ADMINHELP)
to_chat(src, "Error: Admin-PM: You cannot send adminhelps (Muted).")
return
var/msg = input(usr, "What message would you like to send to the administrators?", "Send a message to admins", "") as null|text
//clean the input msg
if(!msg)
return
msg = trim_left(trim_right(sanitize(copytext(msg,1,MAX_MESSAGE_LEN))))
if(!msg)
return
//sanity check, do it twice
if(prefs.muted & MUTE_ADMINHELP)
to_chat(src, "Error: Admin-PM: You cannot send adminhelps (Muted).")
return
if(src.handle_spam_prevention(msg,MUTE_ADMINHELP))
return
var/original_msg = msg
//explode the input msg into a list
var/list/msglist = splittext(msg, " ")
//generate keywords lookup
var/list/surnames = list()
var/list/forenames = list()
var/list/ckeys = list()
for(var/mob/M in mob_list)
var/list/indexing = list(M.real_name, M.name)
if(M.mind)
indexing += M.mind.name
for(var/string in indexing)
var/list/L = splittext(string, " ")
var/surname_found = 0
//surnames
for(var/i=L.len, i>=1, i--)
var/word = ckey(L[i])
if(word)
surnames[word] = M
surname_found = i
break
//forenames
for(var/i=1, i[original_word] (?) "
continue
msg += "[original_word] "
if(!mob)
return //this doesn't happen
var/ref_mob = "\ref[mob]"
msg = "HELP: [key_name(src, 1)] (?) (PP) (RP) (VV) (SM) (JMP) (SR) [ai_found ? " (CL)" : ""]: [msg]"
//send this msg to all admins
var/admin_number_afk = 0
for(var/client/X in admins)
if((R_ADMIN|R_MOD) & X.holder.rights)
if(X.is_afk())
admin_number_afk++
if(X.prefs.get_pref(/datum/preference_setting/binary_flag/toggles) & SOUND_ADMINHELP)
X << 'sound/effects/adminhelp.ogg'
X.output_to_special_tab(msg)
//show it to the person adminhelping too
output_to_special_tab("PM to-Admins: [original_msg]")
var/admin_number_present = admins.len - admin_number_afk
log_admin("HELP: [key_name(src)]: [original_msg] - heard by [admin_number_present] non-AFK admins.")
if(admin_number_present <= 0)
if(!admin_number_afk)
send2adminirc("HELP [key_name(src)]: [original_msg] - No admins online")
send2admindiscord("**Help**: [key_name(src)]: `[replacetext(original_msg, "`", "\\`")]` - **No admins online**", TRUE)
else
send2adminirc("HELP [key_name(src)]: [original_msg] - All admins AFK ([admin_number_afk])")
send2admindiscord("**Help**: [key_name(src)]: `[replacetext(original_msg, "`", "\\`")]` - **All admins AFK** ([admin_number_afk])", TRUE)
else
send2adminirc("HELP [key_name(src)]: [original_msg]")
send2admindiscord("**Help**: [key_name(src)]: `[replacetext(original_msg, "`", "\\`")]` - **[admin_number_present]** Active admins, **[admin_number_afk]** AFK admins.")
feedback_add_details("admin_verb","AH") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!