Is that a PDA in your pocket or are you just happy to subtle me (#2058)

This commit is contained in:
LT3
2024-10-10 12:20:09 -06:00
committed by GitHub
parent c983d95768
commit b967157070
5 changed files with 112 additions and 21 deletions
@@ -133,13 +133,16 @@ GLOBAL_LIST_EMPTY_TYPED(pda_messengers, /datum/computer_file/program/messenger)
var/everyone
/// The station time at which this message was made.
var/timestamp
/// Whether or not the message is hidden from ghostchat
var/subtle // BUBBER EDIT ADDITION - SUBTLE MESSAGES
/datum/pda_message/New(message, outgoing, timestamp, photo_name = null, everyone = FALSE)
/datum/pda_message/New(message, outgoing, timestamp, photo_name = null, everyone = FALSE, subtle = FALSE) // BUBBER EDIT CHANGE - SUBTLE MESSAGES - Original: /datum/pda_message/New(message, outgoing, timestamp, photo_name = null, everyone = FALSE)
src.message = message
src.outgoing = outgoing
src.timestamp = timestamp
src.photo_name = photo_name
src.everyone = everyone
src.subtle = subtle // BUBBER EDIT ADDITION - SUBTLE MESSAGES
/// Returns an associative list of the message's data, used for ui_data calls.
/datum/pda_message/proc/get_ui_data(mob/user)
@@ -149,4 +152,5 @@ GLOBAL_LIST_EMPTY_TYPED(pda_messengers, /datum/computer_file/program/messenger)
data["photo_path"] = photo_name ? SSassets.transport.get_asset_url(photo_name) : null
data["everyone"] = everyone
data["timestamp"] = timestamp
data["subtle"] = subtle // BUBBER EDIT ADDITION - SUBTLE MESSAGES
return data
@@ -294,7 +294,7 @@
return disk.send_virus(computer, target_messenger.computer, usr, params["message"])
return send_message(usr, params["message"], list(target))
return send_message(usr, params["message"], list(target), subtle = params["subtle"]) // BUBBER EDIT CHANGE - SUBTLE MESSAGES - Original: return send_message(usr, params["message"], list(target))
if("PDA_clearPhoto")
selected_image = null
@@ -391,7 +391,7 @@
//////////////////////
/// Brings up the quick reply prompt to send a message.
/datum/computer_file/program/messenger/proc/quick_reply_prompt(mob/living/user, datum/pda_chat/chat)
/datum/computer_file/program/messenger/proc/quick_reply_prompt(mob/living/user, datum/pda_chat/chat, subtle = FALSE) // BUBBER EDIT CHANGE - SUBTLE MESSAGES - Original: /datum/computer_file/program/messenger/proc/quick_reply_prompt(mob/living/user, datum/pda_chat/chat)
if(!istype(chat))
return
var/datum/computer_file/program/messenger/target = chat.recipient?.resolve()
@@ -401,8 +401,8 @@
chat.can_reply = FALSE
return
var/target_name = target.computer.saved_identification
var/input_message = tgui_input_text(user, "Enter [mime_mode ? "emojis":"a message"]", "NT Messaging[target_name ? " ([target_name])" : ""]", encode = FALSE)
send_message(user, input_message, list(chat))
var/input_message = tgui_input_text(user, "Enter [mime_mode ? "emojis":"a message"]. Start with # for subtle.", "NT Messaging[target_name ? " ([target_name])" : ""]", encode = FALSE) // BUBBER EDIT CHANGE - SUBTLE MESSAGES
send_message(user, input_message, list(chat), subtle = subtle) // BUBBER EDIT CHANGE - SUBTLE MESSAGES - Original: send_message(user, input_message, list(chat))
/// Helper proc that sends a message to everyone
/datum/computer_file/program/messenger/proc/send_message_to_all(mob/living/user, message)
@@ -471,7 +471,7 @@
return emoji_parse(message)
/// Sends a message to targets via PDA. When sending to everyone, set `everyone` to true so the message is formatted accordingly
/datum/computer_file/program/messenger/proc/send_message(atom/source, message, list/targets, everyone = FALSE)
/datum/computer_file/program/messenger/proc/send_message(atom/source, message, list/targets, everyone = FALSE, subtle = FALSE) // BUBBER EDIT CHANGE - SUBTLE MESSAGES - Original: /datum/computer_file/program/messenger/proc/send_message(atom/source, message, list/targets, everyone = FALSE)
var/mob/living/sender
if(isliving(source))
sender = source
@@ -479,6 +479,14 @@
if(!message)
return FALSE
// BUBBER EDIT ADDITION BEGIN - SUBTLE MESSAGES
// If "subtle" it wont be sent to ghostchats.
// A message is "subtle" if it begins with "#", the below code also removes it from the sent message.
if(findtext(message,"#", 1) == TRUE)
subtle = TRUE
message = copytext(message, 2, 0)
// BUBBER EDIT ADDITION END - SUBTLE MESSAGES
// upgrade the image asset to a permanent key
var/photo_asset_key = selected_image
@@ -540,11 +548,11 @@
target_chats += target_chat
target_messengers += target_messenger
if(!send_message_signal(source, message, target_messengers, photo_asset_key, everyone))
if(!send_message_signal(source, message, target_messengers, photo_asset_key, everyone, FALSE, null, null, subtle)) // BUBBER EDIT CHANGE - SUBTLE MESSAGES - Original: if(!send_message_signal(source, message, target_messengers, photo_asset_key, everyone))
return FALSE
// Log it in our logs
var/datum/pda_message/message_datum = new(message, TRUE, station_time_timestamp(PDA_MESSAGE_TIMESTAMP_FORMAT), photo_asset_key, everyone)
var/datum/pda_message/message_datum = new(message, TRUE, station_time_timestamp(PDA_MESSAGE_TIMESTAMP_FORMAT), photo_asset_key, everyone, subtle = subtle) // BUBBER EDIT CHANGE - SUBTLE MESSAGES - Original: var/datum/pda_message/message_datum = new(message, TRUE, station_time_timestamp(PDA_MESSAGE_TIMESTAMP_FORMAT), photo_asset_key, everyone)
for(var/datum/pda_chat/target_chat as anything in target_chats)
target_chat.add_message(message_datum, show_in_recents = !everyone)
target_chat.unread_messages = 0
@@ -570,7 +578,7 @@
return send_message_signal(sender, message, targets, fake_photo, FALSE, TRUE, fake_name, fake_job)
/datum/computer_file/program/messenger/proc/send_message_signal(atom/source, message, list/datum/computer_file/program/messenger/targets, photo_path = null, everyone = FALSE, rigged = FALSE, fake_name = null, fake_job = null)
/datum/computer_file/program/messenger/proc/send_message_signal(atom/source, message, list/datum/computer_file/program/messenger/targets, photo_path = null, everyone = FALSE, rigged = FALSE, fake_name = null, fake_job = null, subtle = FALSE) // BUBBER EDIT CHANGE - SUBTLE MESSAGES - Original: /datum/computer_file/program/messenger/proc/send_message_signal(atom/source, message, list/datum/computer_file/program/messenger/targets, photo_path = null, everyone = FALSE, rigged = FALSE, fake_name = null, fake_job = null)
var/mob/sender
if(ismob(source))
sender = source
@@ -606,6 +614,7 @@
"everyone" = everyone,
"photo" = photo_path,
"automated" = FALSE,
"subtle" = subtle, // BUBBER EDIT ADDITION - SUBTLE MESSAGES
))
if(rigged) //Will skip the message server and go straight to the hub so it can't be cheesed by disabling the message server machine
signal.data["fakename"] = fake_name
@@ -633,17 +642,30 @@
shell_addendum = "[circuit.parent.get_creator()] "
// Log in the talk log
source.log_talk(message, LOG_PDA, tag="[shell_addendum][rigged ? "Rigged" : ""] PDA: [computer.saved_identification] to [signal.format_target()]")
source.log_talk(message, subtle ? LOG_SUBTLER : LOG_PDA, tag="[shell_addendum][rigged ? "Rigged" : ""] PDA: [computer.saved_identification] to [signal.format_target()]") // BUBBER EDIT CHANGE - SUBTLE MESSAGES - Original: source.log_talk(message, LOG_PDA, tag="[shell_addendum][rigged ? "Rigged" : ""] PDA: [computer.saved_identification] to [signal.format_target()]")
if(rigged)
log_bomber(sender, "sent a rigged PDA message (Name: [fake_name]. Job: [fake_job]) to [english_list(stringified_targets)] [!is_special_character(sender) ? "(SENT BY NON-ANTAG)" : ""]")
/** BUBBER EDIT CHANGE BEGIN - SUBTLE MESSAGES - Original:
* var/ghost_message = span_game_say("[span_name(signal.format_sender())] [rigged ? "(as [span_name(fake_name)]) Rigged " : ""]PDA Message --> [span_name("[signal.format_target()]")]: \"[signal.format_message()]\"")
* var/list/message_listeners = GLOB.dead_player_list + GLOB.current_observers_list
* for(var/mob/listener as anything in message_listeners)
* if(!(get_chat_toggles(listener) & CHAT_GHOSTPDA))
* continue
* to_chat(listener, "[FOLLOW_LINK(listener, source)] [ghost_message]")
*/
// Show it to ghosts
var/ghost_message = span_game_say("[span_name(signal.format_sender())] [rigged ? "(as [span_name(fake_name)]) Rigged " : ""]PDA Message --> [span_name("[signal.format_target()]")]: \"[signal.format_message()]\"")
var/public_message = "[span_name(signal.format_sender())] [rigged ? "(as [span_name(fake_name)]) Rigged " : ""]PDA Message --> [span_name("[signal.format_target()]")]: \"[signal.format_message()]\""
var/ghost_message = span_game_say(public_message)
var/list/message_listeners = GLOB.dead_player_list + GLOB.current_observers_list
for(var/mob/listener as anything in message_listeners)
if(!(get_chat_toggles(listener) & CHAT_GHOSTPDA))
continue
to_chat(listener, "[FOLLOW_LINK(listener, source)] [ghost_message]")
if(!subtle)
for(var/mob/listener as anything in message_listeners)
if(!(get_chat_toggles(listener) & CHAT_GHOSTPDA))
continue
to_chat(listener, "[FOLLOW_LINK(listener, source)] [ghost_message]")
// Log to public log
log_public_file(public_message)
// BUBBER EDIT CHANGE END
if(sender)
to_chat(sender, span_info("PDA message sent to [signal.format_target()]: \"[message]\""))
@@ -672,7 +694,7 @@
// don't create a new chat for rigged messages, make it a one off notif
if(!is_rigged)
var/datum/pda_message/message = new(signal.data["message"], FALSE, station_time_timestamp(PDA_MESSAGE_TIMESTAMP_FORMAT), signal.data["photo"], signal.data["everyone"])
var/datum/pda_message/message = new(signal.data["message"], FALSE, station_time_timestamp(PDA_MESSAGE_TIMESTAMP_FORMAT), signal.data["photo"], signal.data["everyone"], signal.data["subtle"]) // BUBBER EDIT CHANGE - SUBTLE MESSAGES - Original: var/datum/pda_message/message = new(signal.data["message"], FALSE, station_time_timestamp(PDA_MESSAGE_TIMESTAMP_FORMAT), signal.data["photo"], signal.data["everyone"])
chat = find_chat_by_recipient(is_fake_user ? fake_name : sender_ref, is_fake_user)
if(!istype(chat))
@@ -32,6 +32,7 @@ type ChatScreenState = {
message: string;
previewingImage?: string;
selectingPhoto: boolean;
subtleMode: boolean; // BUBBER EDIT ADDITION - SUBTLE MESSAGES
};
const READ_UNREADS_TIME_MS = 1000;
@@ -45,6 +46,7 @@ export class ChatScreen extends Component<ChatScreenProps, ChatScreenState> {
message: '',
selectingPhoto: false,
canSend: true,
subtleMode: false, // BUBBER EDIT ADDITION - SUBTLE MESSAGES
};
constructor(props: ChatScreenProps) {
@@ -59,6 +61,7 @@ export class ChatScreen extends Component<ChatScreenProps, ChatScreenState> {
this.trySetReadTimeout = this.trySetReadTimeout.bind(this);
this.tryClearReadTimeout = this.tryClearReadTimeout.bind(this);
this.clearUnreads = this.clearUnreads.bind(this);
this.handleToggleSubtle = this.handleToggleSubtle.bind(this); // BUBBER EDIT ADDITION - SUBTLE MESSAGES
}
componentDidMount() {
@@ -151,6 +154,7 @@ export class ChatScreen extends Component<ChatScreenProps, ChatScreenState> {
act('PDA_sendMessage', {
ref: ref,
message: this.state.message,
subtle: this.state.subtleMode, // BUBBER EDIT ADDITION - SUBTLE MESSAGES
});
this.setState({ message: '', canSend: false });
@@ -161,6 +165,14 @@ export class ChatScreen extends Component<ChatScreenProps, ChatScreenState> {
this.setState({ message: val });
}
// BUBBER EDIT ADDITION BEGIN - SUBTLE MESSAGES
handleToggleSubtle() {
this.setState((state) => ({
subtleMode: !state.subtleMode,
}));
}
// BUBBER EDIT ADDITION END - SUBTLE MESSAGES
render() {
const { act } = useBackend();
const {
@@ -173,7 +185,9 @@ export class ChatScreen extends Component<ChatScreenProps, ChatScreenState> {
sendingVirus,
unreads,
} = this.props;
const { message, canSend, previewingImage, selectingPhoto } = this.state;
// BUBBER EDIT CHANGE - SUBTLE MESSAGES - Original: const { message, canSend, previewingImage, selectingPhoto } = this.state;
const { message, canSend, previewingImage, selectingPhoto, subtleMode } =
this.state;
let filteredMessages: JSX.Element[] = [];
@@ -196,6 +210,7 @@ export class ChatScreen extends Component<ChatScreenProps, ChatScreenState> {
everyone={message.everyone}
photoPath={message.photo_path}
timestamp={message.timestamp}
subtle={message.subtle} // BUBBER EDIT ADDITION - SUBTLE MESSAGES
onPreviewImage={
message.photo_path
? () => this.setState({ previewingImage: message.photo_path! })
@@ -268,6 +283,16 @@ export class ChatScreen extends Component<ChatScreenProps, ChatScreenState> {
const buttons = canReply ? (
<>
<Stack.Item>{attachmentButton}</Stack.Item>
{/* BUBBER EDIT ADDITION BEGIN - SUBTLE MESSAGES */}
<Stack.Item>
<Button
tooltip="Toggle subtle mode; messages sent will be hidden from prying eyes."
icon={subtleMode ? 'fa-ear-deaf' : 'fa-ear-listen'}
backgroundColor={subtleMode ? `hsl(327, 60%, 35%)` : ''}
onClick={this.handleToggleSubtle}
/>
</Stack.Item>
{/* BUBBER EDIT ADDITION END - SUBTLE MESSAGES */}
<Stack.Item>
<Button
tooltip="Send"
@@ -395,18 +420,39 @@ type ChatMessageProps = {
timestamp: string;
photoPath?: string;
onPreviewImage?: () => void;
subtle: BooleanLike; // BUBBER EDIT ADDITION - SUBTLE MESSAGES
};
const ChatMessage = (props: ChatMessageProps) => {
const { message, everyone, outgoing, photoPath, timestamp, onPreviewImage } =
props;
// BUBBER EDIT CHANGE - SUBTLE MESSAGES - Original: const { message, everyone, outgoing, photoPath, timestamp, onPreviewImage } = props;
const {
message,
everyone,
outgoing,
photoPath,
timestamp,
onPreviewImage,
subtle,
} = props;
const messageHTML = {
__html: `${message}`,
};
return (
<Box className={`NtosChatMessage${outgoing ? '_outgoing' : ''}`}>
// BUBBER EDIT CHANGE BEGIN - SUBTLE MESSAGES - Original: <Box className={`NtosChatMessage${outgoing ? '_outgoing' : ''}`}>
<Box
className={`NtosChatMessage${
subtle
? outgoing
? '_subtle_outgoing'
: '_subtle'
: outgoing
? '_outgoing'
: ''
}`}
>
{/* BUBBER EDIT CHANGE END - SUBTLE MESSAGES */}
<Box className="NtosChatMessage__content">
<Box as="span" dangerouslySetInnerHTML={messageHTML} />
<Tooltip content={timestamp} position={outgoing ? 'left' : 'right'}>
@@ -6,6 +6,7 @@ export type NtMessage = {
photo_path?: string;
everyone: BooleanLike;
timestamp: string;
subtle: BooleanLike; // BUBBER EDIT ADDITION - SUBTLE MESSAGES
};
export type NtPicture = {
@@ -4,8 +4,12 @@
@use '../functions';
@use '../colors';
// BUBBER EDIT CHANGE BEGIN - SUBTLE MESSAGES
$msgcolor-outgoing: hsl(213, 50%, 35%);
$msgcolor-incoming: hsl(213, 0%, 20%);
$msgcolor-incoming: hsl(213, 50%, 12%);
$msgcolor-subtle-outgoing: hsl(327, 60%, 35%);
$msgcolor-subtle-incoming: hsl(327, 60%, 12%);
// BUBBER EDIT ADDITION END - SUBTLE MESSAGES
$msgpadding: 0.7rem;
@@ -50,6 +54,20 @@ $msgpadding: 0.7rem;
float: right;
}
// BUBBER EDIT ADDITION BEGIN - SUBTLE MESSAGES
&_subtle_outgoing {
@extend .NtosChatMessage;
background-color: $msgcolor-subtle-outgoing;
text-align: right;
float: right;
}
&_subtle {
@extend .NtosChatMessage;
background-color: $msgcolor-subtle-incoming;
}
// BUBBER EDIT ADDITION END - SUBTLE MESSAGES
&__timestamp {
height: 0.9rem;
margin-top: 0.2rem;