Files
Bubberstation/code/modules/mob/dead/observer/observer_say.dm
SkyratBot 5437e34b65 [MIRROR] Non-admin observers can now use emoji that start with d or p at the beginning of a message without admin command warnings. (#4162)
* Observers can now use emojis at the start of messages without the risk of triggering admin commands. (#57433)

Added a client.holder check to the line about radio extensions for admin chat and deadchat commands. It means common observers can finally spam dchat with plushie emoji. Admin observers still have to deadmin before using emojis safely, until someone takes the time to refactor saycode mods so these admin commands only acept the comma prefix (luckily, observer/get_message_mods() doesn't trim the message).

* Non-admin observers can now use emoji that start with d or p at the beginning of a message without admin command warnings.

Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
2021-03-15 00:21:19 +00:00

52 lines
2.2 KiB
Plaintext

/mob/dead/observer/check_emote(message, forced)
return emote(copytext(message, length(message[1]) + 1), intentional = !forced, force_silence = TRUE)
//Modified version of get_message_mods, removes the trimming, the only thing we care about here is admin channels
/mob/dead/observer/get_message_mods(message, list/mods)
var/key = message[1]
if((key in GLOB.department_radio_prefixes) && length(message) > length(key) + 1 && !mods[RADIO_EXTENSION])
mods[RADIO_KEY] = lowertext(message[1 + length(key)])
mods[RADIO_EXTENSION] = GLOB.department_radio_keys[mods[RADIO_KEY]]
return message
/mob/dead/observer/say(message, bubble_type, list/spans = list(), sanitize = TRUE, datum/language/language = null, ignore_spam = FALSE, forced = null)
message = trim(copytext_char(sanitize(message), 1, MAX_MESSAGE_LEN))
if (!message)
return
var/list/message_mods = list()
message = get_message_mods(message, message_mods)
if(client?.holder && (message_mods[RADIO_EXTENSION] == MODE_ADMIN || message_mods[RADIO_EXTENSION] == MODE_DEADMIN))
message = trim_left(copytext_char(message, length(message_mods[RADIO_KEY]) + 2))
if(message_mods[RADIO_EXTENSION] == MODE_ADMIN)
client.cmd_admin_say(message)
else if(message_mods[RADIO_EXTENSION] == MODE_DEADMIN)
client.dsay(message)
return
if(check_emote(message, forced))
return
. = say_dead(message)
/mob/dead/observer/Hear(message, atom/movable/speaker, message_language, raw_message, radio_freq, list/spans, list/message_mods = list())
. = ..()
var/atom/movable/to_follow = speaker
if(radio_freq)
var/atom/movable/virtualspeaker/V = speaker
if(isAI(V.source))
var/mob/living/silicon/ai/S = V.source
to_follow = S.eyeobj
else
to_follow = V.source
var/link = FOLLOW_LINK(src, to_follow)
// Create map text prior to modifying message for goonchat
if (client?.prefs.chat_on_map && (client.prefs.see_chat_non_mob || ismob(speaker)))
create_chat_message(speaker, message_language, raw_message, spans)
// Recompose the message, because it's scrambled by default
message = compose_message(speaker, message_language, raw_message, radio_freq, spans, message_mods)
to_chat(src,
html = "[link] [message]",
avoid_highlighting = speaker == src)