From 0998285f8365b33929b06af24c36157d103fa546 Mon Sep 17 00:00:00 2001 From: Misha133 <61027276+Misha-133@users.noreply.github.com> Date: Mon, 6 Feb 2023 20:35:09 +0300 Subject: [PATCH] [Feature] Rework `Thread` property of a message (#2579) * move `Thread` property to `IUserMessage` & add one to `SocketUserMessage` * get channel from cache instead of creating new object * move the property back to IMessage --- .../Entities/Messages/IMessage.cs | 8 +++++++ .../Entities/Messages/RestMessage.cs | 23 +++++++++---------- .../Entities/Messages/SocketMessage.cs | 12 ++++++++++ 3 files changed, 31 insertions(+), 12 deletions(-) diff --git a/src/Discord.Net.Core/Entities/Messages/IMessage.cs b/src/Discord.Net.Core/Entities/Messages/IMessage.cs index 0437cd7d1..8d5b24c52 100644 --- a/src/Discord.Net.Core/Entities/Messages/IMessage.cs +++ b/src/Discord.Net.Core/Entities/Messages/IMessage.cs @@ -89,6 +89,14 @@ namespace Discord /// IUser Author { get; } + /// + /// Gets the thread that was started from this message. + /// + /// + /// An object if this message has thread attached; otherwise . + /// + IThreadChannel Thread { get; } + /// /// Gets all attachments included in this message. /// diff --git a/src/Discord.Net.Rest/Entities/Messages/RestMessage.cs b/src/Discord.Net.Rest/Entities/Messages/RestMessage.cs index a497289d1..f928e362e 100644 --- a/src/Discord.Net.Rest/Entities/Messages/RestMessage.cs +++ b/src/Discord.Net.Rest/Entities/Messages/RestMessage.cs @@ -1,9 +1,13 @@ +using Discord.API; + using Newtonsoft.Json.Linq; + using System; using System.Collections.Generic; using System.Collections.Immutable; using System.Linq; using System.Threading.Tasks; + using Model = Discord.API.Message; namespace Discord.Rest @@ -45,6 +49,12 @@ namespace Discord.Rest /// public virtual bool MentionedEveryone => false; + /// + public RestThreadChannel Thread { get; private set; } + + /// + IThreadChannel IMessage.Thread => Thread; + /// /// Gets a collection of the 's on the message. /// @@ -80,15 +90,6 @@ namespace Discord.Rest /// public MessageType Type { get; private set; } - - /// - /// Gets the thread that was started from this message. - /// - /// - /// A object if this message has thread attached; otherwise . - /// - public RestThreadChannel Thread { get; private set; } - /// public MessageRoleSubscriptionData RoleSubscriptionData { get; private set; } @@ -266,9 +267,7 @@ namespace Discord.Rest } if (model.Thread.IsSpecified) - { Thread = RestThreadChannel.Create(Discord, new RestGuild(Discord, model.Thread.Value.GuildId.Value), model.Thread.Value); - } } /// public async Task UpdateAsync(RequestOptions options = null) @@ -310,7 +309,7 @@ namespace Discord.Rest /// IReadOnlyCollection IMessage.Stickers => Stickers; - + #endregion /// diff --git a/src/Discord.Net.WebSocket/Entities/Messages/SocketMessage.cs b/src/Discord.Net.WebSocket/Entities/Messages/SocketMessage.cs index df7d91bd0..197d476f5 100644 --- a/src/Discord.Net.WebSocket/Entities/Messages/SocketMessage.cs +++ b/src/Discord.Net.WebSocket/Entities/Messages/SocketMessage.cs @@ -81,6 +81,12 @@ namespace Discord.WebSocket /// public MessageRoleSubscriptionData RoleSubscriptionData { get; private set; } + /// + public SocketThreadChannel Thread { get; private set; } + + /// + IThreadChannel IMessage.Thread => Thread; + /// /// Returns all attachments included in this message. /// @@ -283,6 +289,12 @@ namespace Discord.WebSocket model.RoleSubscriptionData.Value.MonthsSubscribed, model.RoleSubscriptionData.Value.IsRenewal); } + + if (model.Thread.IsSpecified) + { + SocketGuild guild = (Channel as SocketGuildChannel)?.Guild; + Thread = guild?.AddOrUpdateChannel(state, model.Thread.Value) as SocketThreadChannel; + } } ///