Skip to content

Commit 936e99e

Browse files
committed
Fix and enhance escapeDisruptiveContent helper
1 parent 401b0f4 commit 936e99e

File tree

2 files changed

+22
-2
lines changed

2 files changed

+22
-2
lines changed

app/helpers/discord.test.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import { escapeDisruptiveContent } from "./discord";
2+
3+
test("escapeDisruptiveContent", () => {
4+
expect(escapeDisruptiveContent("@everyone")).toBe("@ everyone");
5+
expect(escapeDisruptiveContent("@everyone ")).toBe("@ everyone ");
6+
expect(escapeDisruptiveContent(" @everyone")).toBe(" @ everyone");
7+
expect(escapeDisruptiveContent(" @everyonebutts")).toBe(" @ everyonebutts");
8+
expect(escapeDisruptiveContent("butts@everyone")).toBe("butts@ everyone");
9+
expect(escapeDisruptiveContent("butts@everyonebutts")).toBe(
10+
"butts@ everyonebutts",
11+
);
12+
13+
expect(escapeDisruptiveContent("https://example.com")).toBe(
14+
"<https://example.com>",
15+
);
16+
});

app/helpers/discord.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,12 +55,16 @@ export const quoteMessageContent = (content: string) => {
5555
return `> ${content.replace("`", "\\`").replace(/[\n]/g, "\n> ")}`;
5656
};
5757

58+
/*
59+
* Escape content that Discord would otherwise do undesireable things with.
60+
* Sepecifically, suppresses @-mentions and link previews.
61+
*/
5862
export const escapeDisruptiveContent = (content: string) => {
5963
return (
6064
content
6165
// Silence pings
62-
.replace(/@(.*?)\s/g, "@ $1 ")
66+
.replace(/@(\S*)(\s)?/g, "@ $1$2")
6367
// Wrap links in <> so they don't make a preview
64-
.replace(/(https?:\/\/.*?)\s/g, "<$1> ")
68+
.replace(/(https?:\/\/.*)\s?/g, "<$1>")
6569
);
6670
};

0 commit comments

Comments
 (0)