using Newtonsoft.Json; using System.Collections.Generic; using System.Linq; namespace Discord.API { internal class ApplicationCommandOption { [JsonProperty("type")] public ApplicationCommandOptionType Type { get; set; } [JsonProperty("name")] public string Name { get; set; } [JsonProperty("description")] public string Description { get; set; } [JsonProperty("default")] public Optional Default { get; set; } [JsonProperty("required")] public Optional Required { get; set; } [JsonProperty("choices")] public Optional Choices { get; set; } [JsonProperty("options")] public Optional Options { get; set; } [JsonProperty("autocomplete")] public Optional Autocomplete { get; set; } [JsonProperty("min_value")] public Optional MinValue { get; set; } [JsonProperty("max_value")] public Optional MaxValue { get; set; } [JsonProperty("channel_types")] public Optional ChannelTypes { get; set; } [JsonProperty("name_localizations")] public Optional> NameLocalizations { get; set; } [JsonProperty("description_localizations")] public Optional> DescriptionLocalizations { get; set; } [JsonProperty("name_localized")] public Optional NameLocalized { get; set; } [JsonProperty("description_localized")] public Optional DescriptionLocalized { get; set; } [JsonProperty("min_length")] public Optional MinLength { get; set; } [JsonProperty("max_length")] public Optional MaxLength { get; set; } public ApplicationCommandOption() { } public ApplicationCommandOption(IApplicationCommandOption cmd) { Choices = cmd.Choices.Select(x => new ApplicationCommandOptionChoice { Name = x.Name, Value = x.Value }).ToArray(); Options = cmd.Options.Select(x => new ApplicationCommandOption(x)).ToArray(); ChannelTypes = cmd.ChannelTypes.ToArray(); Required = cmd.IsRequired ?? Optional.Unspecified; Default = cmd.IsDefault ?? Optional.Unspecified; MinValue = cmd.MinValue ?? Optional.Unspecified; MaxValue = cmd.MaxValue ?? Optional.Unspecified; MinLength = cmd.MinLength ?? Optional.Unspecified; MaxLength = cmd.MaxLength ?? Optional.Unspecified; Autocomplete = cmd.IsAutocomplete ?? Optional.Unspecified; Name = cmd.Name; Type = cmd.Type; Description = cmd.Description; NameLocalizations = cmd.NameLocalizations?.ToDictionary() ?? Optional>.Unspecified; DescriptionLocalizations = cmd.DescriptionLocalizations?.ToDictionary() ?? Optional>.Unspecified; NameLocalized = cmd.NameLocalized; DescriptionLocalized = cmd.DescriptionLocalized; } public ApplicationCommandOption(ApplicationCommandOptionProperties option) { Choices = option.Choices?.Select(x => new ApplicationCommandOptionChoice { Name = x.Name, Value = x.Value, NameLocalizations = x.NameLocalizations?.ToDictionary() ?? Optional>.Unspecified, }).ToArray() ?? Optional.Unspecified; Options = option.Options?.Select(x => new ApplicationCommandOption(x)).ToArray() ?? Optional.Unspecified; Required = option.IsRequired ?? Optional.Unspecified; Default = option.IsDefault ?? Optional.Unspecified; MinValue = option.MinValue ?? Optional.Unspecified; MaxValue = option.MaxValue ?? Optional.Unspecified; MinLength = option.MinLength ?? Optional.Unspecified; MaxLength = option.MaxLength ?? Optional.Unspecified; ChannelTypes = option.ChannelTypes?.ToArray() ?? Optional.Unspecified; Name = option.Name; Type = option.Type; Description = option.Description; Autocomplete = option.IsAutocomplete; NameLocalizations = option.NameLocalizations?.ToDictionary() ?? Optional>.Unspecified; DescriptionLocalizations = option.DescriptionLocalizations?.ToDictionary() ?? Optional>.Unspecified; } } }