From 54adf8cf1255c90adfeb2f7e9d37d0b9fd5ad48e Mon Sep 17 00:00:00 2001 From: threeoh6000 Date: Thu, 15 Aug 2024 18:08:54 +0100 Subject: [PATCH] Escape Discord usernames in system embed. --- PluralKit.Bot/Services/EmbedService.cs | 2 +- PluralKit.Bot/Utils/DiscordUtils.cs | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/PluralKit.Bot/Services/EmbedService.cs b/PluralKit.Bot/Services/EmbedService.cs index fe4e9c0c..c3660818 100644 --- a/PluralKit.Bot/Services/EmbedService.cs +++ b/PluralKit.Bot/Services/EmbedService.cs @@ -43,7 +43,7 @@ public class EmbedService { // Fetch/render info for all accounts simultaneously var accounts = await _repo.GetSystemAccounts(system.Id); - var users = (await GetUsers(accounts)).Select(x => x.User?.NameAndMention() ?? $"(deleted account {x.Id})"); + var users = (await GetUsers(accounts)).Select(x => x.User?.NameAndMention().EscapeMarkdownExcludingMentions() ?? $"(deleted account {x.Id})"); var countctx = LookupContext.ByNonOwner; if (cctx.MatchFlag("a", "all")) diff --git a/PluralKit.Bot/Utils/DiscordUtils.cs b/PluralKit.Bot/Utils/DiscordUtils.cs index b3ea5625..7ae42c39 100644 --- a/PluralKit.Bot/Utils/DiscordUtils.cs +++ b/PluralKit.Bot/Utils/DiscordUtils.cs @@ -156,6 +156,13 @@ public static class DiscordUtils return input; } + public static string EscapeMarkdownExcludingMentions(this string input) + { + var pattern = new Regex(@"[*_~`(||)\\]", RegexOptions.Multiline); + if (input != null) return pattern.Replace(input, @"\$&"); + return input; + } + public static string EscapeBacktickPair(this string input) { if (input == null)