using System.Text; using System.Text.RegularExpressions; namespace ReferenceClientProxyImplementation.Patches.Implementations.JSPatches; public partial class DisableSentryPatch : IPatch { public int GetOrder() => 0; public string GetName() => "JS: Disable sentry"; public bool Applies(string relativeName, byte[] content) => relativeName.StartsWith("assets/sentry.") && relativeName.EndsWith(".js"); public async Task Execute(string _, byte[] content) { var stringContent = Encoding.UTF8.GetString(content); stringContent = SentryInitRegex().Replace(stringContent, "window.DiscordSentry = undefined;"); stringContent = SentryConsoleHookRegex().Replace( stringContent, m => m.Value.Replace(" &&", " && false &&") ); return Encoding.UTF8.GetBytes(stringContent); } [GeneratedRegex(@"window\.DiscordSentry =", RegexOptions.Compiled)] private static partial Regex SentryInitRegex(); // hopefully specific enough? [GeneratedRegex(@"function ([a-zA-Z0-9]+)\(\) {\n\s+""console"" in ([a-zA-Z0-9]+) &&\n\s+([a-zA-Z0-9]+)\.forEach\(", RegexOptions.Compiled)] private static partial Regex SentryConsoleHookRegex(); }