Skip to content

mute enjoyers can now do verb - #1165

Open
NewyearnewmeUwu wants to merge 3 commits into
DopplerShift13:masterfrom
NewyearnewmeUwu:doverbmute
Open

mute enjoyers can now do verb#1165
NewyearnewmeUwu wants to merge 3 commits into
DopplerShift13:masterfrom
NewyearnewmeUwu:doverbmute

Conversation

@NewyearnewmeUwu

@NewyearnewmeUwu NewyearnewmeUwu commented Jul 31, 2026

Copy link
Copy Markdown

About The Pull Request

fixes #1118 .

Why It's Good For The Game

Testing Evidence

image

Changelog

🆑NewyearnewmeUwu
fix: Mute characters can now use the 'do' verb.
/:cl:

@00-Steven 00-Steven left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

rather than this awkward nonmodular edit that tries to hook through the control flow of the try_speak proc but only the /mob/ layer...
...it probably just shouldn't be using try_speak in the first place, cause it's not speech at all.

consider looking at emote code instead:

/datum/emote/living/custom/can_run_emote(mob/user, status_check, intentional, params)
. = ..()
if(!. || !intentional)
return FALSE
if(!isnull(user.ckey) && is_banned_from(user.ckey, "Emote"))
to_chat(user, span_boldwarning("You cannot send custom emotes (banned)."))
return FALSE
if(QDELETED(user))
return FALSE
if(user.client && user.client.prefs.muted & MUTE_IC)
to_chat(user, span_boldwarning("You cannot send IC messages (muted)."))
return FALSE
/datum/emote/living/custom/proc/emote_is_valid(mob/user, input)
// We're assuming clientless mobs custom emoting is something codebase-driven and not player-driven.
// If players ever get the ability to force clientless mobs to emote, we'd need to reconsider this.
if(!user.client)
return TRUE
if(CAN_BYPASS_FILTER(user))
return TRUE
var/static/regex/stop_bad_mime = regex(@"says|exclaims|yells|asks")
if(stop_bad_mime.Find(input, 1, 1))
to_chat(user, span_danger("Invalid emote."))
return FALSE
var/list/filter_result = is_ic_filtered(input)
if(filter_result)
to_chat(user, span_warning("That emote contained a word prohibited in IC emotes! Consider reviewing the server rules."))
to_chat(user, span_warning("\"[input]\""))
REPORT_CHAT_FILTER_TO_USER(user, filter_result)
log_filter("IC Emote", input, filter_result)
SSblackbox.record_feedback("tally", "ic_blocked_words", 1, LOWER_TEXT(config.ic_filter_regex.match))
return FALSE
filter_result = is_soft_ic_filtered(input)
if(filter_result)
if(tgui_alert(user,"Your emote contains \"[filter_result[CHAT_FILTER_INDEX_WORD]]\". \"[filter_result[CHAT_FILTER_INDEX_REASON]]\", Are you sure you want to emote it?", "Soft Blocked Word", list("Yes", "No")) != "Yes")
SSblackbox.record_feedback("tally", "soft_ic_blocked_words", 1, LOWER_TEXT(config.soft_ic_filter_regex.match))
log_filter("Soft IC Emote", input, filter_result)
return FALSE
message_admins("[ADMIN_LOOKUPFLW(user)] has passed the soft filter for emote \"[filter_result[CHAT_FILTER_INDEX_WORD]]\" they may be using a disallowed term. Emote: \"[input]\"")
log_admin_private("[key_name(user)] has passed the soft filter for emote \"[filter_result[CHAT_FILTER_INDEX_WORD]]\" they may be using a disallowed term. Emote: \"[input]\"")
SSblackbox.record_feedback("tally", "passed_soft_ic_blocked_words", 1, LOWER_TEXT(config.soft_ic_filter_regex.match))
log_filter("Soft IC Emote (Passed)", input, filter_result)
return TRUE

and implementing that as part of our doverb checks:

/mob/living/proc/doverb_checks(message)
if(!length(message))
return FALSE
if(GLOB.say_disabled) //This is here to try to identify lag problems
to_chat(usr, span_danger("Speech is currently admin-disabled."))
return FALSE
//quickly calc our name stub again: duplicate this in say.dm override
var/name_stub = " (<b>[usr]</b>)"
if(length(message) > (MAX_MESSAGE_LEN - length(name_stub)))
to_chat(usr, message)
to_chat(usr, span_warning("^^^----- The preceding message has been DISCARDED for being over the maximum length of [MAX_MESSAGE_LEN]. It has NOT been sent! -----^^^"))
return FALSE
if(usr.stat != CONSCIOUS)
to_chat(usr, span_notice("You cannot send a Do in your current condition."))
return FALSE
return TRUE

@00-Steven
00-Steven marked this pull request as draft July 31, 2026 20:34
@NewyearnewmeUwu
NewyearnewmeUwu marked this pull request as ready for review July 31, 2026 21:45
@github-actions
github-actions Bot requested a review from 00-Steven July 31, 2026 21:45

@00-Steven 00-Steven left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

, I meant to actually implement the filters properly instead of trying to hook into the try_speak version

@NewyearnewmeUwu

Copy link
Copy Markdown
Author

I THINK this is what you're after. Sorry for being a little ditzy today, IDK what's up with me

@github-actions
github-actions Bot requested a review from 00-Steven July 31, 2026 22:15
@github-actions

github-actions Bot commented Aug 8, 2026

Copy link
Copy Markdown

This PR has been inactive for long enough to be automatically marked as stale. This means it is at risk of being auto closed in ~ 7 days, please address any outstanding review items and ensure your PR is finished, if these are all true and you are auto-staled anyway, you need to actively ask maintainers if your PR will be merged. Once you have done any of the previous actions then you should request a maintainer remove the stale label on your PR, to reset the stale timer. If you feel no maintainer will respond in that time, you may wish to close this PR youself, while you seek maintainer comment, as you will then be able to reopen the PR yourself

@github-actions github-actions Bot added the Stale label Aug 8, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Fix Pest removal; Bugs Stale

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Mute characters cannot use do emotes

2 participants