From edc0bf35ae5d0f75d7c0d2ca995422b2d47b942b Mon Sep 17 00:00:00 2001 From: quin lynch Date: Thu, 27 May 2021 12:35:50 -0300 Subject: [PATCH] Add components to messages --- .../Entities/Messages/IMessage.cs | 4 ++++ src/Discord.Net.Rest/API/Common/Message.cs | 2 ++ .../Entities/Messages/RestMessage.cs | 17 +++++++++++++++-- .../Entities/Messages/SocketMessage.cs | 15 ++++++++++++++- 4 files changed, 35 insertions(+), 3 deletions(-) diff --git a/src/Discord.Net.Core/Entities/Messages/IMessage.cs b/src/Discord.Net.Core/Entities/Messages/IMessage.cs index 35458d87d..d13b6b592 100644 --- a/src/Discord.Net.Core/Entities/Messages/IMessage.cs +++ b/src/Discord.Net.Core/Entities/Messages/IMessage.cs @@ -164,6 +164,10 @@ namespace Discord /// IReadOnlyDictionary Reactions { get; } + /// + /// The 's attached to this message + /// + IReadOnlyCollection Components { get; } /// /// Adds a reaction to this message. /// diff --git a/src/Discord.Net.Rest/API/Common/Message.cs b/src/Discord.Net.Rest/API/Common/Message.cs index b781de346..c3d88eedb 100644 --- a/src/Discord.Net.Rest/API/Common/Message.cs +++ b/src/Discord.Net.Rest/API/Common/Message.cs @@ -58,5 +58,7 @@ namespace Discord.API public Optional AllowedMentions { get; set; } [JsonProperty("referenced_message")] public Optional ReferencedMessage { get; set; } + [JsonProperty("components")] + public Optional Components { get; set; } } } diff --git a/src/Discord.Net.Rest/Entities/Messages/RestMessage.cs b/src/Discord.Net.Rest/Entities/Messages/RestMessage.cs index 0169c9b8b..068ed1511 100644 --- a/src/Discord.Net.Rest/Entities/Messages/RestMessage.cs +++ b/src/Discord.Net.Rest/Entities/Messages/RestMessage.cs @@ -68,6 +68,9 @@ namespace Discord.Rest /// public MessageReference Reference { get; private set; } + /// + public IReadOnlyCollection Components { get; private set; } + internal RestMessage(BaseDiscordClient discord, ulong id, IMessageChannel channel, IUser author, MessageSource source) : base(discord, id) { @@ -113,7 +116,7 @@ namespace Discord.Rest }; } - if(model.Reference.IsSpecified) + if (model.Reference.IsSpecified) { // Creates a new Reference from the API model Reference = new MessageReference @@ -124,6 +127,15 @@ namespace Discord.Rest }; } + if (model.Components.IsSpecified) + { + Components = model.Components.Value.Select(x => + (x as Newtonsoft.Json.Linq.JToken).ToObject() + ).ToList(); + } + else + Components = new List(); + if (model.Reactions.IsSpecified) { var value = model.Reactions.Value; @@ -168,7 +180,8 @@ namespace Discord.Rest IReadOnlyCollection IMessage.Embeds => Embeds; /// IReadOnlyCollection IMessage.MentionedUserIds => MentionedUsers.Select(x => x.Id).ToImmutableArray(); - + /// + IReadOnlyCollection IMessage.Components => Components; /// public IReadOnlyDictionary Reactions => _reactions.ToDictionary(x => x.Emote, x => new ReactionMetadata { ReactionCount = x.Count, IsMe = x.Me }); diff --git a/src/Discord.Net.WebSocket/Entities/Messages/SocketMessage.cs b/src/Discord.Net.WebSocket/Entities/Messages/SocketMessage.cs index 98fd4af07..5df2d1acb 100644 --- a/src/Discord.Net.WebSocket/Entities/Messages/SocketMessage.cs +++ b/src/Discord.Net.WebSocket/Entities/Messages/SocketMessage.cs @@ -58,6 +58,9 @@ namespace Discord.WebSocket /// public MessageReference Reference { get; private set; } + /// + public IReadOnlyCollection Components { get; private set; } + /// /// Returns all attachments included in this message. /// @@ -156,6 +159,15 @@ namespace Discord.WebSocket MessageId = model.Reference.Value.MessageId }; } + + if (model.Components.IsSpecified) + { + Components = model.Components.Value.Select(x => + (x as Newtonsoft.Json.Linq.JToken).ToObject() + ).ToList(); + } + else + Components = new List(); } /// @@ -188,7 +200,8 @@ namespace Discord.WebSocket IReadOnlyCollection IMessage.MentionedRoleIds => MentionedRoles.Select(x => x.Id).ToImmutableArray(); /// IReadOnlyCollection IMessage.MentionedUserIds => MentionedUsers.Select(x => x.Id).ToImmutableArray(); - + /// + IReadOnlyCollection IMessage.Components => Components; internal void AddReaction(SocketReaction reaction) { _reactions.Add(reaction);