From 4b1f875f43a97fc1417390db1b70ce0462c603bc Mon Sep 17 00:00:00 2001 From: quin lynch Date: Thu, 30 Sep 2021 17:32:31 -0300 Subject: [PATCH] Fix sub commands being interpreted as a parameter for autocomplete --- .../AutocompleteInteractionDataOption.cs | 7 +++++-- .../SocketAutocompleteInteractionData.cs | 20 +++++++++++++++++-- 2 files changed, 23 insertions(+), 4 deletions(-) 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; + } } }