From 70b9bed2c37dc1e2b50db3f115efc763691b730b Mon Sep 17 00:00:00 2001
From: Toastical <20125180+Toastical@users.noreply.github.com>
Date: Tue, 27 Jan 2026 03:46:00 +0200
Subject: [PATCH] Add pingability to staff-say, dev-say and mentor-say (#31377)
* Add pingability to staff-say and dev-say
* Consolidate all pinging to a proc, add it to mentor-say
* Make pings work with ckeys regardless of stealth-mode
---
code/datums/user_verb.dm | 11 +++++++++++
code/modules/admin/verbs/adminsay.dm | 25 +++++++++++++------------
2 files changed, 24 insertions(+), 12 deletions(-)
diff --git a/code/datums/user_verb.dm b/code/datums/user_verb.dm
index 0911e5c75d5..81a17f51b3a 100644
--- a/code/datums/user_verb.dm
+++ b/code/datums/user_verb.dm
@@ -25,3 +25,14 @@ GENERAL_PROTECT_DATUM(/datum/user_verb)
/// Unassigns the verb from the user.
/datum/user_verb/proc/unassign_from_client(client/user)
remove_verb(user, verb_path)
+
+/// Lets people be pinged inside of staff channels.
+/datum/user_verb/proc/do_chat_ping(client/C, message)
+ var/display_name = C.ckey || C.key
+ if(C.holder.fakekey && findtext(message, "@[C.holder.fakekey]"))
+ SEND_SOUND(C, sound('sound/misc/ping.ogg'))
+ message = replacetext(message, "@[C.holder.fakekey]", "@[C.holder.fakekey]")
+ else if(findtext(message, "@[display_name]"))
+ SEND_SOUND(C, sound('sound/misc/ping.ogg'))
+ message = replacetext(message, "@[display_name]", "@[display_name]")
+ return message
diff --git a/code/modules/admin/verbs/adminsay.dm b/code/modules/admin/verbs/adminsay.dm
index 7206c7b62ef..0b3476a18d2 100644
--- a/code/modules/admin/verbs/adminsay.dm
+++ b/code/modules/admin/verbs/adminsay.dm
@@ -24,14 +24,9 @@ USER_VERB(admin_say, R_ADMIN, "Asay", "Asay", VERB_CATEGORY_HIDDEN, msg as text)
var/display_color = client.get_staffsay_color()
for(var/client/C in GLOB.admins)
- var/temp_message = msg
if(R_ADMIN & C.holder.rights)
// Lets see if this admin was pinged in the asay message
- if(findtext(temp_message, "@[C.ckey]") || findtext(temp_message, "@[C.key]")) // Check ckey and key, so you can type @AffectedArc07 or @affectedarc07
- SEND_SOUND(C, sound('sound/misc/ping.ogg'))
- temp_message = replacetext(temp_message, "@[C.ckey]", "@[C.ckey]")
- temp_message = replacetext(temp_message, "@[C.key]", "@[C.key]") // Same applies here. key and ckey.
-
+ var/temp_message = do_chat_ping(C, msg)
temp_message = SPAN_EMOJI_ENABLED("[temp_message]")
to_chat(C, SPAN_ADMIN_CHANNEL("ADMIN: [key_name(client, 1)] ([admin_jump_link(client.mob)]): [SPAN_MESSAGE("[temp_message]")]"), MESSAGE_TYPE_ADMINCHAT, confidential = TRUE)
@@ -64,8 +59,10 @@ USER_VERB(dev_say, R_ADMIN|R_DEV_TEAM, "Devsay", "Devsay", VERB_CATEGORY_HIDDEN,
display_name = "[client.holder.fakekey]/([client.key])"
else
display_name = client.holder.fakekey
- msg = SPAN_EMOJI_ENABLED("[msg]")
- to_chat(C, "DEV: [display_name] ([admin_jump_link(client.mob)]): [SPAN_MESSAGE("[msg]")]", MESSAGE_TYPE_DEVCHAT, confidential = TRUE)
+
+ var/temp_message = do_chat_ping(C, msg)
+ temp_message = SPAN_EMOJI_ENABLED("[temp_message]")
+ to_chat(C, "DEV: [display_name] ([admin_jump_link(client.mob)]): [SPAN_MESSAGE("[temp_message]")]", MESSAGE_TYPE_DEVCHAT, confidential = TRUE)
SSblackbox.record_feedback("tally", "admin_verb", 1, "Devsay") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
@@ -99,8 +96,10 @@ USER_VERB(staff_say, R_ADMIN|R_MENTOR|R_DEV_TEAM, "Staffsay", "Staffsay", VERB_C
display_name = "[client.holder.fakekey]/([client.key])"
else
display_name = client.holder.fakekey
- msg = SPAN_EMOJI_ENABLED("[msg]")
- to_chat(C, "STAFF: [display_name] ([admin_jump_link(client.mob)]): [SPAN_MESSAGE("[msg]")]", MESSAGE_TYPE_STAFFCHAT, confidential = TRUE)
+
+ var/temp_message = do_chat_ping(C, msg)
+ temp_message = SPAN_EMOJI_ENABLED("[temp_message]")
+ to_chat(C, "STAFF: [display_name] ([admin_jump_link(client.mob)]): [SPAN_MESSAGE("[temp_message]")]", MESSAGE_TYPE_STAFFCHAT, confidential = TRUE)
SSblackbox.record_feedback("tally", "admin_verb", 1, "Staffsay") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
@@ -135,8 +134,10 @@ USER_VERB(mentor_say, R_ADMIN|R_MENTOR|R_MOD, "Msay", "Use mentorsay.", VERB_CAT
display_name = "[client.holder.fakekey]/([client.key])"
else
display_name = client.holder.fakekey
- msg = SPAN_EMOJI_ENABLED("[msg]")
- to_chat(C, "MENTOR: [display_name] ([admin_jump_link(client.mob)]): [SPAN_MESSAGE("[msg]")]", MESSAGE_TYPE_MENTORCHAT, confidential = TRUE)
+
+ var/temp_message = do_chat_ping(C, msg)
+ temp_message = SPAN_EMOJI_ENABLED("[temp_message]")
+ to_chat(C, "MENTOR: [display_name] ([admin_jump_link(client.mob)]): [SPAN_MESSAGE("[temp_message]")]", MESSAGE_TYPE_MENTORCHAT, confidential = TRUE)
SSblackbox.record_feedback("tally", "admin_verb", 1, "Msay") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!