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;
+ }
}
///