diff --git a/src/Discord.Net.Rest/API/Common/AutocompleteInteractionDataOption.cs b/src/Discord.Net.Rest/API/Common/AutocompleteInteractionDataOption.cs index a9d5b66f0..1ea3ad54a 100644 --- a/src/Discord.Net.Rest/API/Common/AutocompleteInteractionDataOption.cs +++ b/src/Discord.Net.Rest/API/Common/AutocompleteInteractionDataOption.cs @@ -15,10 +15,13 @@ namespace Discord.API [JsonProperty("name")] public string Name { get; set; } + [JsonProperty("options")] + public Optional Options { get; set; } + [JsonProperty("value")] - public object Value { get; set; } + public Optional Value { get; set; } [JsonProperty("focused")] - public bool Focused { get; set; } + public Optional Focused { get; set; } } } diff --git a/src/Discord.Net.WebSocket/Entities/Interaction/Slash Commands/SocketAutocompleteInteractionData.cs b/src/Discord.Net.WebSocket/Entities/Interaction/Slash Commands/SocketAutocompleteInteractionData.cs index 0da0332db..3777257f1 100644 --- a/src/Discord.Net.WebSocket/Entities/Interaction/Slash Commands/SocketAutocompleteInteractionData.cs +++ b/src/Discord.Net.WebSocket/Entities/Interaction/Slash Commands/SocketAutocompleteInteractionData.cs @@ -46,12 +46,12 @@ namespace Discord.WebSocket internal SocketAutocompleteInteractionData(DataModel model) { - var options = model.Options.Select(x => new AutocompleteOption(x.Type, x.Name, x.Value, x.Focused)); + var options = model.Options.SelectMany(x => GetOptions(x)); Current = options.FirstOrDefault(x => x.Focused); Options = options.ToImmutableArray(); - if (Options?.Count == 1 && Current == null) + if (options != null && options.Count() == 1 && Current == null) Current = Options.FirstOrDefault(); CommandName = model.Name; @@ -59,5 +59,21 @@ namespace Discord.WebSocket Type = model.Type; Version = model.Version; } + + private List GetOptions(API.AutocompleteInteractionDataOption model) + { + List options = new List(); + + if (model.Options.IsSpecified) + { + options.AddRange(model.Options.Value.SelectMany(x => GetOptions(x))); + } + else if(model.Focused.IsSpecified) + { + options.Add(new AutocompleteOption(model.Type, model.Name, model.Value, model.Focused.Value)); + } + + return options; + } } }