using System.Text.Json.Nodes; using System.Text.RegularExpressions; using Remora.Discord.Extensions.Formatting; using Remora.Rest.Core; using Remora.Results; namespace Boyfriend.Data.Options; public partial class SnowflakeOption : Option { public SnowflakeOption(string name) : base(name, 0UL.ToSnowflake()) { } public override string Display(JsonNode settings) { return Name.EndsWith("Channel") ? Mention.Channel(Get(settings)) : Mention.Role(Get(settings)); } public override Snowflake Get(JsonNode settings) { var property = settings[Name]; return property != null ? property.GetValue().ToSnowflake() : DefaultValue; } public override Result Set(JsonNode settings, string from) { if (!ulong.TryParse(NonNumbers().Replace(from, ""), out var parsed)) return Result.FromError(new ArgumentInvalidError(nameof(from), Messages.InvalidSettingValue)); settings[Name] = parsed; return Result.FromSuccess(); } [GeneratedRegex("[^0-9]")] private static partial Regex NonNumbers(); }