diff --git a/code/controllers/configuration/configuration.dm b/code/controllers/configuration/configuration.dm index 7207f878614a..b74275d2cee2 100644 --- a/code/controllers/configuration/configuration.dm +++ b/code/controllers/configuration/configuration.dm @@ -19,7 +19,7 @@ var/motd var/policy - var/static/regex/ic_filter_regex + var/static/regex/word_filter_regex var/is_loaded = FALSE @@ -315,21 +315,21 @@ /datum/controller/configuration/proc/LoadChatFilter() - var/list/in_character_filter = list() + var/list/word_filter = list() - if(!fexists("[directory]/in_character_filter.txt")) + if(!fexists("[directory]/word_filter.txt")) return - log_config("Loading config file in_character_filter.txt...") + log_config("Loading config file word_filter.txt...") - for(var/line in file2list("[directory]/in_character_filter.txt")) + for(var/line in file2list("[directory]/word_filter.txt")) if(!line) continue if(findtextEx(line,"#",1,2)) continue - in_character_filter += REGEX_QUOTE(line) + word_filter += REGEX_QUOTE(line) - ic_filter_regex = length(in_character_filter) ? regex("\\b([jointext(in_character_filter, "|")])\\b", "i") : null + word_filter_regex = length(word_filter) ? regex("\\b([jointext(word_filter, "|")])\\b", "i") : null //Message admins when you can. /datum/controller/configuration/proc/DelayedMessageAdmins(text) diff --git a/code/game/verbs/ooc.dm b/code/game/verbs/ooc.dm index a5ecea8b05a4..4d52635c6f88 100644 --- a/code/game/verbs/ooc.dm +++ b/code/game/verbs/ooc.dm @@ -7,6 +7,9 @@ to_chat(src, "Guests may not use OOC.") return + if(!filter_message(src, msg)) + return + msg = trim(strip_html(msg)) if(!msg) return @@ -101,6 +104,9 @@ to_chat(src, "Guests may not use LOOC.") return + if(!filter_message(src, msg)) + return + msg = trim(strip_html(msg)) if(!msg) return diff --git a/code/modules/mob/dead/observer/say.dm b/code/modules/mob/dead/observer/say.dm index b9a972bda5c2..04e93095f42d 100644 --- a/code/modules/mob/dead/observer/say.dm +++ b/code/modules/mob/dead/observer/say.dm @@ -12,6 +12,9 @@ if (src.client.handle_spam_prevention(message, MUTE_DEADCHAT)) return + if(!filter_message(client, message)) + return + . = src.say_dead(message) diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm index 7f3af1449266..5bd2b4283c86 100644 --- a/code/modules/mob/living/say.dm +++ b/code/modules/mob/living/say.dm @@ -62,6 +62,24 @@ GLOBAL_LIST_INIT(department_radio_keys, list( /proc/prefix_to_channel(prefix) return GLOB.department_radio_keys[prefix] +/proc/filter_message(client/user, message) + if(!config.word_filter_regex) + return TRUE + + if(config.word_filter_regex.Find(message)) + to_chat(user, + html = "\n-- Word Filter Message --", + ) + to_chat(user, + type = MESSAGE_TYPE_ADMINPM, + html = "\nYour message has been automatically filtered due to its contents. Trying to circumvent this filter will get you banned.", + ) + SEND_SOUND(user, sound('sound/effects/adminhelp_new.ogg')) + log_admin("[user.ckey] triggered the chat filter with the following message: [message].") + return FALSE + + return TRUE + ///Shows custom speech bubbles for screaming, *warcry etc. /mob/living/proc/show_speech_bubble(bubble_name, bubble_type = bubble_icon) @@ -81,6 +99,9 @@ GLOBAL_LIST_INIT(department_radio_keys, list( if(SEND_SIGNAL(src, COMSIG_LIVING_SPEAK, message, speaking, verb, alt_name, italics, message_range, speech_sound, sound_vol, nolog, message_mode) & COMPONENT_OVERRIDE_SPEAK) return + if(!filter_message(src, message)) + return + message = process_chat_markup(message, list("~", "_")) for(var/dst=0; dst<=1; dst++) //Will run twice if src has a clone diff --git a/config/example/config.txt b/config/example/config.txt index d63e6822465c..07dfe6f1b839 100644 --- a/config/example/config.txt +++ b/config/example/config.txt @@ -257,4 +257,4 @@ CLIENT_ERROR_VERSION 514 ## GITHUB API #GITHUB_APP_API #REPO_NAME cmss13 -#ORG cmss13-devs \ No newline at end of file +#ORG cmss13-devs diff --git a/config/example/word_filter.txt b/config/example/word_filter.txt new file mode 100644 index 000000000000..aab5cae627fa --- /dev/null +++ b/config/example/word_filter.txt @@ -0,0 +1 @@ +# Words that should be filtered from being said, both IC and OOC, should be included here, one per line. Case insensitive.