Skip to content

Commit 25922db

Browse files
committed
Escape special characters in system messages so they don't show up as formatted in discord
1 parent 7ec5979 commit 25922db

File tree

1 file changed

+24
-6
lines changed

1 file changed

+24
-6
lines changed

src/pterodactyl/smp_commands.rs

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ async fn handle_chat_message(
134134
ptero_server_id,
135135
Some(sender),
136136
false,
137-
message,
137+
message.to_owned(),
138138
)
139139
.await?;
140140

@@ -165,7 +165,7 @@ async fn handle_log_message(
165165
ptero_server_id,
166166
Some(&sanitized_username),
167167
true,
168-
&message,
168+
message,
169169
)
170170
.await?;
171171
}
@@ -241,7 +241,7 @@ async fn broadcast_message(
241241
ptero_server_id: &str,
242242
username: Option<&str>,
243243
system_message: bool,
244-
message: &str,
244+
message: String,
245245
) -> Result<(), crate::Error> {
246246
let config = config::get();
247247
let Some(from_server) = config
@@ -255,14 +255,16 @@ async fn broadcast_message(
255255
let Some(chat_bridge) = config.chat_bridge_by_ptero_server_name(&from_server.name) else {
256256
return Ok(());
257257
};
258+
259+
// send to other pterodactyl servers
258260
let mut pterodactyl_message = format!("[{}] ", from_server.display_name);
259261
if system_message {
260262
pterodactyl_message += "[System] ";
261263
}
262264
if let Some(username) = username {
263265
pterodactyl_message += &format!("[{username}] ");
264266
}
265-
pterodactyl_message += message;
267+
pterodactyl_message += &message;
266268
try_join_all(
267269
chat_bridge
268270
.ptero_servers
@@ -283,6 +285,8 @@ async fn broadcast_message(
283285
}),
284286
)
285287
.await?;
288+
289+
// send to discord
286290
let mut discord_sender = format!("[{}]", from_server.display_name);
287291
if system_message {
288292
discord_sender += " [System]";
@@ -298,14 +302,28 @@ async fn broadcast_message(
298302
discord_sender.truncate(new_len);
299303
discord_sender += "...";
300304
}
305+
// escape special chars in discord message for system messages
306+
let discord_message = if system_message {
307+
message
308+
.chars()
309+
.fold(String::with_capacity(message.len()), |mut s, c| {
310+
if !c.is_alphanumeric() {
311+
s.push('\\');
312+
}
313+
s.push(c);
314+
s
315+
})
316+
} else {
317+
message
318+
};
301319
try_join_all(chat_bridge.discord_channels.iter().map(|channel| {
302320
broadcast_to_discord(
303321
discord_handle,
304322
webhook_cache,
305323
&channel.webhook,
306324
&discord_sender,
307325
username,
308-
message,
326+
&discord_message,
309327
)
310328
}))
311329
.await?;
@@ -446,7 +464,7 @@ impl<H: PteroWebSocketHandle> PteroWebSocketListener<H> for WebsocketListener<'_
446464
&ptero_server_id,
447465
None,
448466
true,
449-
message,
467+
message.to_owned(),
450468
)
451469
.await
452470
{

0 commit comments

Comments
 (0)