Files
Bubberstation/code/__HELPERS/chat.dm
Lucy cc84b24f17 Various telepathic/remote messages are now labeled as "radio" chat messages (#89678)
## About The Pull Request

This explicitly specifies `type = MESSAGE_TYPE_RADIO` in `to_chat` for
various methods of communication (blood cult communion, abductor
telepathy, xeno hivemind, golem resonator, blob telepathy, changeling
hivemind, and binary chat), so that they will always be considered under
the "Radio" category by tgchat.

Also added `avoid_highlighting` to some, so they won't highlight your
own messages.

## Why It's Good For The Game

Makes going thru older messages find things that I accidentally missed
much easier.

## Changelog
🆑
qol: Messages from blood cult communion, abductor telepathy, xeno
hivemind, golem resonator, blob telepathy, changeling hivemind, and
binary chat are now considered "radio" messages by the chat, so they can
properly be sorted via chat tabs.
qol: Your own messages in blood cult communion,
abductor/xenomorph/changeling hivemind, or golem telepathy will no
longer be highlighted in chat (to prevent highlight spam whenever you
talk if you highlight your own name, mainly)
/🆑
2025-03-12 17:11:02 -04:00

100 lines
3.5 KiB
Plaintext

/*
Here's how to use the TGS chat system with configs
send2adminchat is a simple function that broadcasts to all admin channels that are designated in TGS
send2chat is a bit verbose but can be very specific
In TGS3 it will always be sent to all connected designated game chats.
In TGS4+ they use the new tagging system
The second parameter is a string, this string should be read from a config.
What this does is dictate which TGS channels can be sent to.
For example if you have the following channels in tgs4 set up
- Channel 1, Tag: asdf
- Channel 2, Tag: bombay,asdf
- Channel 3, Tag: Hello my name is asdf
- Channel 4, No Tag
- Channel 5, Tag: butts
and you make the call:
send2chat(new /datum/tgs_message_content("I sniff butts"), CONFIG_GET(string/where_to_send_sniff_butts))
and the config option is set like:
WHERE_TO_SEND_SNIFF_BUTTS asdf
It will be sent to channels 1 and 2
Alternatively if you set the config option to just:
WHERE_TO_SEND_SNIFF_BUTTS
it will be sent to all connected chats.
*/
/**
* Asynchronously sends a message to TGS chat channels.
*
* message - The [/datum/tgs_message_content] to send.
* channel_tag - Required. If "", the message with be sent to all connected (Game-type for TGS3) channels. Otherwise, it will be sent to TGS4 channels with that tag (Delimited by ','s).
* admin_only - Determines if this communication can only be sent to admin only channels.
*/
/proc/send2chat(datum/tgs_message_content/message, channel_tag, admin_only = FALSE)
set waitfor = FALSE
if(channel_tag == null || !world.TgsAvailable())
return
var/datum/tgs_version/version = world.TgsVersion()
if(channel_tag == "" || version.suite == 3)
world.TgsTargetedChatBroadcast(message, admin_only)
return
var/list/channels_to_use = list()
for(var/I in world.TgsChatChannelInfo())
var/datum/tgs_chat_channel/channel = I
var/list/applicable_tags = splittext(channel.custom_tag, ",")
if((!admin_only || channel.is_admin_channel) && (channel_tag in applicable_tags))
channels_to_use += channel
if(channels_to_use.len)
world.TgsChatBroadcast(message, channels_to_use)
/**
* Asynchronously sends a message to TGS admin chat channels.
*
* category - The category of the mssage.
* message - The message to send.
*/
/proc/send2adminchat(category, message, embed_links = FALSE)
set waitfor = FALSE
category = replacetext(replacetext(category, "\proper", ""), "\improper", "")
message = replacetext(replacetext(message, "\proper", ""), "\improper", "")
if(!embed_links)
message = GLOB.has_discord_embeddable_links.Replace(replacetext(message, "`", ""), " ```$1``` ")
world.TgsTargetedChatBroadcast(new /datum/tgs_message_content("[category] | [message]"), TRUE)
/// Handles text formatting for item use hints in examine text
#define EXAMINE_HINT(text) ("<b>" + text + "</b>")
/// Sends a message to all dead and observing players, if a source is provided a follow link will be attached.
/proc/send_to_observers(message, source, message_type = null)
var/list/all_observers = GLOB.dead_player_list + GLOB.current_observers_list
for(var/mob/observer as anything in all_observers)
if (isnull(source))
to_chat(observer, "[message]", type = message_type)
continue
var/link = FOLLOW_LINK(observer, source)
to_chat(observer, "[link] [message]", type = message_type)
/// Sends a message to everyone within the list, as well as all observers.
/proc/relay_to_list_and_observers(message, list/mob_list, source, message_type = null)
for(var/mob/creature as anything in mob_list)
to_chat(creature, message, type = message_type)
send_to_observers(message, source)