From ac997a9d8c0d168fe3a7a6e12e6f8892744d0115 Mon Sep 17 00:00:00 2001 From: Misha133 Date: Thu, 3 Nov 2022 16:23:20 +0300 Subject: [PATCH] maybe working rest part? --- .../MessageComponents/RestMessageComponent.cs | 2 +- .../RestMessageComponentData.cs | 31 ++++++++++++++++--- .../Entities/Interactions/Modals/RestModal.cs | 2 +- .../Interactions/Modals/RestModalData.cs | 4 +-- 4 files changed, 30 insertions(+), 9 deletions(-) diff --git a/src/Discord.Net.Rest/Entities/Interactions/MessageComponents/RestMessageComponent.cs b/src/Discord.Net.Rest/Entities/Interactions/MessageComponents/RestMessageComponent.cs index 9d4827cd9..b400852d6 100644 --- a/src/Discord.Net.Rest/Entities/Interactions/MessageComponents/RestMessageComponent.cs +++ b/src/Discord.Net.Rest/Entities/Interactions/MessageComponents/RestMessageComponent.cs @@ -34,7 +34,7 @@ namespace Discord.Rest ? (DataModel)model.Data.Value : null; - Data = new RestMessageComponentData(dataModel, client); + Data = new RestMessageComponentData(dataModel, client, Guild); } internal new static async Task CreateAsync(DiscordRestClient client, Model model, bool doApiCall) diff --git a/src/Discord.Net.Rest/Entities/Interactions/MessageComponents/RestMessageComponentData.cs b/src/Discord.Net.Rest/Entities/Interactions/MessageComponents/RestMessageComponentData.cs index aba3277fd..b484e80ab 100644 --- a/src/Discord.Net.Rest/Entities/Interactions/MessageComponents/RestMessageComponentData.cs +++ b/src/Discord.Net.Rest/Entities/Interactions/MessageComponents/RestMessageComponentData.cs @@ -50,7 +50,7 @@ namespace Discord.Rest /// public string Value { get; } - internal RestMessageComponentData(Model model, BaseDiscordClient discord) + internal RestMessageComponentData(Model model, BaseDiscordClient discord, IGuild guild) { CustomId = model.CustomId; Type = model.ComponentType; @@ -60,14 +60,23 @@ namespace Discord.Rest if (model.Resolved.IsSpecified) { Users = model.Resolved.Value.Users.IsSpecified - ? model.Resolved.Value.Users.Value.Select(user => RestUser.Create(discord, user.Value)).ToImmutableArray() + ? model.Resolved.Value.Users.Value.Select(user => RestUser.Create(discord, user.Value)) + .Concat(model.Resolved.Value.Members.IsSpecified + ? model.Resolved.Value.Members.Value.Select(member => RestGuildUser.Create(discord, guild, member.Value)) + : Array.Empty()).ToImmutableArray() : null; - } + Channels = model.Resolved.Value.Channels.IsSpecified + ? model.Resolved.Value.Channels.Value.Select(channel => RestChannel.Create(discord, channel.Value)).ToImmutableArray() + : null; + Roles = model.Resolved.Value.Roles.IsSpecified + ? model.Resolved.Value.Roles.Value.Select(role => RestRole.Create(discord, guild, role.Value)).ToImmutableArray() + : null; + } } - internal RestMessageComponentData(IMessageComponent component, BaseDiscordClient discord) + internal RestMessageComponentData(IMessageComponent component, BaseDiscordClient discord, IGuild guild) { CustomId = component.CustomId; Type = component.Type; @@ -78,10 +87,22 @@ namespace Discord.Rest if (component is API.SelectMenuComponent select) { Values = select.Values.GetValueOrDefault(null); + if (select.Resolved.IsSpecified) { Users = select.Resolved.Value.Users.IsSpecified - ? select.Resolved.Value.Users.Value.Select(user => RestUser.Create(discord, user.Value)).ToImmutableArray() + ? select.Resolved.Value.Users.Value.Select(user => RestUser.Create(discord, user.Value)) + .Concat(select.Resolved.Value.Members.IsSpecified + ? select.Resolved.Value.Members.Value.Select(member => RestGuildUser.Create(discord, guild, member.Value)) + : Array.Empty()).ToImmutableArray() + : null; + + Channels = select.Resolved.Value.Channels.IsSpecified + ? select.Resolved.Value.Channels.Value.Select(channel => RestChannel.Create(discord, channel.Value)).ToImmutableArray() + : null; + + Roles = select.Resolved.Value.Roles.IsSpecified + ? select.Resolved.Value.Roles.Value.Select(role => RestRole.Create(discord, guild, role.Value)).ToImmutableArray() : null; } } diff --git a/src/Discord.Net.Rest/Entities/Interactions/Modals/RestModal.cs b/src/Discord.Net.Rest/Entities/Interactions/Modals/RestModal.cs index e5453e9c4..ef16d7b25 100644 --- a/src/Discord.Net.Rest/Entities/Interactions/Modals/RestModal.cs +++ b/src/Discord.Net.Rest/Entities/Interactions/Modals/RestModal.cs @@ -23,7 +23,7 @@ namespace Discord.Rest ? (DataModel)model.Data.Value : null; - Data = new RestModalData(dataModel, client); + Data = new RestModalData(dataModel, client, Guild); } internal new static async Task CreateAsync(DiscordRestClient client, ModelBase model, bool doApiCall) diff --git a/src/Discord.Net.Rest/Entities/Interactions/Modals/RestModalData.cs b/src/Discord.Net.Rest/Entities/Interactions/Modals/RestModalData.cs index d21bd11e0..7ecf804a1 100644 --- a/src/Discord.Net.Rest/Entities/Interactions/Modals/RestModalData.cs +++ b/src/Discord.Net.Rest/Entities/Interactions/Modals/RestModalData.cs @@ -22,12 +22,12 @@ namespace Discord.Rest IReadOnlyCollection IModalInteractionData.Components => Components; - internal RestModalData(Model model, BaseDiscordClient discord) + internal RestModalData(Model model, BaseDiscordClient discord, IGuild guild) { CustomId = model.CustomId; Components = model.Components .SelectMany(x => x.Components) - .Select(x => new RestMessageComponentData(x, discord)) + .Select(x => new RestMessageComponentData(x, discord, guild)) .ToArray(); } }