using System.Text.RegularExpressions; using Content.Server.Speech.Components; using Content.Shared.Speech; namespace Content.Server.Speech.EntitySystems; public sealed partial class SlowAccentSystem : EntitySystem { /// /// Matches whitespace characters or commas (with or without a space after them). /// private static readonly Regex WordEndings = new("\\s|, |,"); /// /// Matches the end of the string only if the last character is a "word" character. /// private static readonly Regex NoFinalPunctuation = new("\\w\\z"); public override void Initialize() { base.Initialize(); SubscribeLocalEvent(OnAccentGet); } private void OnAccentGet(Entity ent, ref AccentGetEvent args) { args.Message = Accentuate(ent, args.Message); } public string Accentuate(Entity ent, string message) { // Add... some... delay... between... each... word message = WordEndings.Replace(message, "... "); // Add "..." to the end, if the last character is part of a word... if (NoFinalPunctuation.IsMatch(message)) message += "..."; return message; } }