using System.Text.Json.Serialization; using System.Text.RegularExpressions; using HermesSocketLibrary.Requests.Messages; using HermesSocketLibrary.Socket.Data; using TwitchChatTTS.Twitch.Socket.Handlers; namespace TwitchChatTTS { public class User { // Hermes user id public string HermesUserId { get; set; } public string HermesUsername { get; set; } public long TwitchUserId { get; set; } public string TwitchUsername { get; set; } public string SevenEmoteSetId { get; set; } public long? OwnerId { get; set; } public Connection? TwitchConnection { get; set; } public Connection? NightbotConnection { get; set; } public string DefaultTTSVoice { get; set; } // voice id -> voice name public IDictionary VoicesAvailable { get => _voicesAvailable; set { _voicesAvailable = value; VoiceNameRegex = GenerateEnabledVoicesRegex(); } } // chatter/twitch id -> voice id public IDictionary VoicesSelected { get; set; } // voice names public HashSet VoicesEnabled { get => _voicesEnabled; set { _voicesEnabled = value; VoiceNameRegex = GenerateEnabledVoicesRegex(); } } public IDictionary Raids { get; set; } = new Dictionary(); public HashSet Chatters { get; set; } public TTSWordFilter[] RegexFilters { get; set; } [JsonIgnore] public Regex? VoiceNameRegex { get; set; } private IDictionary _voicesAvailable; private HashSet _voicesEnabled; private Regex? GenerateEnabledVoicesRegex() { if (VoicesAvailable == null || VoicesAvailable.Count() <= 0) return null; var enabledVoicesString = string.Join("|", VoicesAvailable.Where(v => VoicesEnabled == null || !VoicesEnabled.Any() || VoicesEnabled.Contains(v.Value)).Select(v => v.Value)); return new Regex($@"(?:\A|\s)(?{enabledVoicesString}):(?.*?)(?=\Z|\s(?:{enabledVoicesString})\:)", RegexOptions.IgnoreCase | RegexOptions.Compiled); } } }