diff --git a/src/Discord.Net.Core/Entities/Messages/IMessage.cs b/src/Discord.Net.Core/Entities/Messages/IMessage.cs
index 1eba1e076..05f505269 100644
--- a/src/Discord.Net.Core/Entities/Messages/IMessage.cs
+++ b/src/Discord.Net.Core/Entities/Messages/IMessage.cs
@@ -140,6 +140,18 @@ namespace Discord
///
MessageApplication Application { get; }
+ ///
+ /// Gets the reference to the original message if it was crossposted.
+ ///
+ ///
+ /// Sent with Cross-posted messages, meaning they were published from news channels
+ /// and received by subscriber channels.
+ ///
+ ///
+ /// A message's reference, if any is associated.
+ ///
+ MessageReference Reference { get; }
+
///
/// Gets all reactions included in this message.
///
diff --git a/src/Discord.Net.Core/Entities/Messages/MessageReference.cs b/src/Discord.Net.Core/Entities/Messages/MessageReference.cs
new file mode 100644
index 000000000..57a508a7c
--- /dev/null
+++ b/src/Discord.Net.Core/Entities/Messages/MessageReference.cs
@@ -0,0 +1,33 @@
+using System.Diagnostics;
+
+namespace Discord
+{
+ ///
+ /// Contains the IDs sent from a crossposted message.
+ ///
+ [DebuggerDisplay(@"{DebuggerDisplay,nq}")]
+ public class MessageReference
+ {
+ ///
+ /// Gets the Message ID of the original message.
+ ///
+ public Optional MessageId { get; internal set; }
+
+ ///
+ /// Gets the Channel ID of the original message.
+ ///
+ public ulong ChannelId { get; internal set; }
+
+ ///
+ /// Gets the Guild ID of the original message.
+ ///
+ public Optional GuildId { get; internal set; }
+
+ private string DebuggerDisplay
+ => $"Channel ID: ({ChannelId}){(GuildId.IsSpecified ? $", Guild ID: ({GuildId.Value})" : "")}" +
+ $"{(MessageId.IsSpecified ? $", Message ID: ({MessageId.Value})" : "")}";
+
+ public override string ToString()
+ => DebuggerDisplay;
+ }
+}
diff --git a/src/Discord.Net.Rest/API/Common/Message.cs b/src/Discord.Net.Rest/API/Common/Message.cs
index a5016f923..f20035685 100644
--- a/src/Discord.Net.Rest/API/Common/Message.cs
+++ b/src/Discord.Net.Rest/API/Common/Message.cs
@@ -50,6 +50,8 @@ namespace Discord.API
// sent with Rich Presence-related chat embeds
[JsonProperty("application")]
public Optional Application { get; set; }
+ [JsonProperty("message_reference")]
+ public Optional Reference { get; set; }
[JsonProperty("flags")]
public Optional Flags { get; set; }
}
diff --git a/src/Discord.Net.Rest/API/Common/MessageReference.cs b/src/Discord.Net.Rest/API/Common/MessageReference.cs
new file mode 100644
index 000000000..8c0f8fe14
--- /dev/null
+++ b/src/Discord.Net.Rest/API/Common/MessageReference.cs
@@ -0,0 +1,16 @@
+using Newtonsoft.Json;
+
+namespace Discord.API
+{
+ internal class MessageReference
+ {
+ [JsonProperty("message_id")]
+ public Optional MessageId { get; set; }
+
+ [JsonProperty("channel_id")]
+ public ulong ChannelId { get; set; }
+
+ [JsonProperty("guild_id")]
+ public Optional GuildId { get; set; }
+ }
+}
diff --git a/src/Discord.Net.Rest/Entities/Messages/RestMessage.cs b/src/Discord.Net.Rest/Entities/Messages/RestMessage.cs
index 29a9c9bd2..f457f4f7a 100644
--- a/src/Discord.Net.Rest/Entities/Messages/RestMessage.cs
+++ b/src/Discord.Net.Rest/Entities/Messages/RestMessage.cs
@@ -62,6 +62,8 @@ namespace Discord.Rest
public MessageActivity Activity { get; private set; }
///
public MessageApplication Application { get; private set; }
+ ///
+ public MessageReference Reference { get; private set; }
internal RestMessage(BaseDiscordClient discord, ulong id, IMessageChannel channel, IUser author, MessageSource source)
: base(discord, id)
@@ -108,6 +110,17 @@ namespace Discord.Rest
};
}
+ if(model.Reference.IsSpecified)
+ {
+ // Creates a new Reference from the API model
+ Reference = new MessageReference
+ {
+ GuildId = model.Reference.Value.GuildId,
+ ChannelId = model.Reference.Value.ChannelId,
+ MessageId = model.Reference.Value.MessageId
+ };
+ }
+
if (model.Reactions.IsSpecified)
{
var value = model.Reactions.Value;
diff --git a/src/Discord.Net.WebSocket/Entities/Messages/SocketMessage.cs b/src/Discord.Net.WebSocket/Entities/Messages/SocketMessage.cs
index ae42d9d61..7900b7ee7 100644
--- a/src/Discord.Net.WebSocket/Entities/Messages/SocketMessage.cs
+++ b/src/Discord.Net.WebSocket/Entities/Messages/SocketMessage.cs
@@ -53,6 +53,9 @@ namespace Discord.WebSocket
///
public MessageApplication Application { get; private set; }
+ ///
+ public MessageReference Reference { get; private set; }
+
///
/// Returns all attachments included in this message.
///
@@ -140,6 +143,17 @@ namespace Discord.WebSocket
PartyId = model.Activity.Value.PartyId.Value
};
}
+
+ if (model.Reference.IsSpecified)
+ {
+ // Creates a new Reference from the API model
+ Reference = new MessageReference
+ {
+ GuildId = model.Reference.Value.GuildId,
+ ChannelId = model.Reference.Value.ChannelId,
+ MessageId = model.Reference.Value.MessageId
+ };
+ }
}
///