diff --git a/code/__DEFINES/say.dm b/code/__DEFINES/say.dm index 9403eca2da..d04004c659 100644 --- a/code/__DEFINES/say.dm +++ b/code/__DEFINES/say.dm @@ -87,12 +87,15 @@ //Don't set this very much higher then 1024 unless you like inviting people in to dos your server with message spam #define MAX_MESSAGE_LEN 4096 //Citadel edit: What's the WORST that could happen? -#define MAX_FLAVOR_LEN 4096 +#define MAX_FLAVOR_LEN 4096 #define MAX_TASTE_LEN 40 //lick... vore... ew... #define MAX_NAME_LEN 42 #define MAX_BROADCAST_LEN 512 #define MAX_CHARTER_LEN 80 +// Is something in the IC chat filter? This is config dependent. +#define CHAT_FILTER_CHECK(T) (config.ic_filter_regex && findtext(T, config.ic_filter_regex)) + // Audio/Visual Flags. Used to determine what sense are required to notice a message. #define MSG_VISUAL (1<<0) #define MSG_AUDIBLE (1<<1) diff --git a/code/controllers/configuration/configuration.dm b/code/controllers/configuration/configuration.dm index 32da3b5938..5d7de05598 100644 --- a/code/controllers/configuration/configuration.dm +++ b/code/controllers/configuration/configuration.dm @@ -22,7 +22,7 @@ var/motd // var/policy - // var/static/regex/ic_filter_regex + var/static/regex/ic_filter_regex /datum/controller/configuration/proc/admin_reload() if(IsAdminAdvancedProcCall()) @@ -53,7 +53,7 @@ loadmaplist(CONFIG_MAPS_FILE) LoadMOTD() // LoadPolicy() - // LoadChatFilter() + LoadChatFilter() if (Master) Master.OnConfigLoad() @@ -486,7 +486,7 @@ Example config: continue runnable_modes[M] = probabilities[M.config_tag] return runnable_modes -/* + /datum/controller/configuration/proc/LoadChatFilter() var/list/in_character_filter = list() if(!fexists("[directory]/in_character_filter.txt")) @@ -499,7 +499,7 @@ Example config: continue in_character_filter += REGEX_QUOTE(line) ic_filter_regex = in_character_filter.len ? regex("\\b([jointext(in_character_filter, "|")])\\b", "i") : null -*/ + //Message admins when you can. /datum/controller/configuration/proc/DelayedMessageAdmins(text) addtimer(CALLBACK(GLOBAL_PROC, /proc/message_admins, text), 0) diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm index 9646796802..7ca2234081 100644 --- a/code/modules/mob/living/say.dm +++ b/code/modules/mob/living/say.dm @@ -90,11 +90,11 @@ GLOBAL_LIST_INIT(department_radio_keys, list( var/static/list/one_character_prefix = list(MODE_HEADSET = TRUE, MODE_ROBOT = TRUE, MODE_WHISPER = TRUE) var/ic_blocked = FALSE - /* - if(client && !forced && config.ic_filter_regex && findtext(message, config.ic_filter_regex)) + + if(client && !forced && CHAT_FILTER_CHECK(message)) //The filter doesn't act on the sanitized message, but the raw message. ic_blocked = TRUE - */ + if(sanitize) message = trim(copytext_char(sanitize(message), 1, MAX_MESSAGE_LEN)) if(!message || message == "") @@ -103,6 +103,7 @@ GLOBAL_LIST_INIT(department_radio_keys, list( if(ic_blocked) //The filter warning message shows the sanitized message though. to_chat(src, "That message contained a word prohibited in IC chat! Consider reviewing the server rules.\n\"[message]\"") + SSblackbox.record_feedback("tally", "ic_blocked_words", 1, lowertext(config.ic_filter_regex.match)) return var/datum/saymode/saymode = SSradio.saymodes[talk_key] @@ -333,7 +334,7 @@ GLOBAL_LIST_INIT(department_radio_keys, list( var/obj/item/bodypart/rightarm = get_bodypart(BODY_ZONE_R_ARM) if(HAS_TRAIT(src, TRAIT_MUTE) && get_selected_language() != /datum/language/signlanguage) return 0 - + if (get_selected_language() == /datum/language/signlanguage) var/left_disabled = FALSE var/right_disabled = FALSE