diff --git a/src/Discord.Net.Core/Entities/Channels/IMessageChannel.cs b/src/Discord.Net.Core/Entities/Channels/IMessageChannel.cs
index 41bc79511..e756941cd 100644
--- a/src/Discord.Net.Core/Entities/Channels/IMessageChannel.cs
+++ b/src/Discord.Net.Core/Entities/Channels/IMessageChannel.cs
@@ -14,6 +14,7 @@ namespace Discord
/// Sends a file to this text channel, with an optional caption.
Task SendFileAsync(Stream stream, string filename, string text = null, bool isTTS = false, RequestOptions options = null);
+ ulong? LastMessageId { get; }
/// Gets a message from this message channel with the given id, or null if not found.
Task GetMessageAsync(ulong id, CacheMode mode = CacheMode.AllowDownload, RequestOptions options = null);
/// Gets the last N messages from this message channel.
diff --git a/src/Discord.Net.Rest/Entities/Channels/RestDMChannel.cs b/src/Discord.Net.Rest/Entities/Channels/RestDMChannel.cs
index 573cfef72..a558c8797 100644
--- a/src/Discord.Net.Rest/Entities/Channels/RestDMChannel.cs
+++ b/src/Discord.Net.Rest/Entities/Channels/RestDMChannel.cs
@@ -14,6 +14,7 @@ namespace Discord.Rest
{
public RestUser CurrentUser { get; private set; }
public RestUser Recipient { get; private set; }
+ public ulong? LastMessageId { get; private set; }
public IReadOnlyCollection Users => ImmutableArray.Create(CurrentUser, Recipient);
@@ -32,6 +33,7 @@ namespace Discord.Rest
internal override void Update(Model model)
{
Recipient.Update(model.Recipients.Value[0]);
+ LastMessageId = model.LastMessageId;
}
public override async Task UpdateAsync(RequestOptions options = null)
diff --git a/src/Discord.Net.Rest/Entities/Channels/RestGroupChannel.cs b/src/Discord.Net.Rest/Entities/Channels/RestGroupChannel.cs
index e2a015c75..e19deceef 100644
--- a/src/Discord.Net.Rest/Entities/Channels/RestGroupChannel.cs
+++ b/src/Discord.Net.Rest/Entities/Channels/RestGroupChannel.cs
@@ -16,6 +16,7 @@ namespace Discord.Rest
private ImmutableDictionary _users;
public string Name { get; private set; }
+ public ulong? LastMessageId { get; private set; }
public IReadOnlyCollection Users => _users.ToReadOnlyCollection();
public IReadOnlyCollection Recipients
@@ -40,6 +41,8 @@ namespace Discord.Rest
if (model.Recipients.IsSpecified)
UpdateUsers(model.Recipients.Value);
+
+ LastMessageId = model.LastMessageId;
}
internal void UpdateUsers(API.User[] models)
{
diff --git a/src/Discord.Net.Rest/Entities/Channels/RestTextChannel.cs b/src/Discord.Net.Rest/Entities/Channels/RestTextChannel.cs
index 991b30283..3f41077c8 100644
--- a/src/Discord.Net.Rest/Entities/Channels/RestTextChannel.cs
+++ b/src/Discord.Net.Rest/Entities/Channels/RestTextChannel.cs
@@ -13,6 +13,7 @@ namespace Discord.Rest
public class RestTextChannel : RestGuildChannel, IRestMessageChannel, ITextChannel
{
public string Topic { get; private set; }
+ public ulong? LastMessageId { get; private set; }
public string Mention => MentionUtils.MentionChannel(Id);
@@ -31,6 +32,7 @@ namespace Discord.Rest
base.Update(model);
Topic = model.Topic.Value;
+ LastMessageId = model.LastMessageId;
}
public async Task ModifyAsync(Action func, RequestOptions options = null)
diff --git a/src/Discord.Net.Rest/Entities/Channels/RestVirtualMessageChannel.cs b/src/Discord.Net.Rest/Entities/Channels/RestVirtualMessageChannel.cs
index 6127eaf65..f656cbac4 100644
--- a/src/Discord.Net.Rest/Entities/Channels/RestVirtualMessageChannel.cs
+++ b/src/Discord.Net.Rest/Entities/Channels/RestVirtualMessageChannel.cs
@@ -12,6 +12,7 @@ namespace Discord.Rest
{
public DateTimeOffset CreatedAt => DateTimeUtils.FromSnowflake(Id);
public string Mention => MentionUtils.MentionChannel(Id);
+ public ulong? LastMessageId { get; private set; }
internal RestVirtualMessageChannel(BaseDiscordClient discord, ulong id)
: base(discord, id)
diff --git a/src/Discord.Net.Rpc/Entities/Channels/RpcDMChannel.cs b/src/Discord.Net.Rpc/Entities/Channels/RpcDMChannel.cs
index af0102574..a76ee99a5 100644
--- a/src/Discord.Net.Rpc/Entities/Channels/RpcDMChannel.cs
+++ b/src/Discord.Net.Rpc/Entities/Channels/RpcDMChannel.cs
@@ -12,6 +12,7 @@ namespace Discord.Rpc
public class RpcDMChannel : RpcChannel, IRpcMessageChannel, IRpcPrivateChannel, IDMChannel
{
public IReadOnlyCollection CachedMessages { get; private set; }
+ public ulong? LastMessageId { get { throw new NotSupportedException(); } }
internal RpcDMChannel(DiscordRpcClient discord, ulong id)
: base(discord, id)
diff --git a/src/Discord.Net.Rpc/Entities/Channels/RpcGroupChannel.cs b/src/Discord.Net.Rpc/Entities/Channels/RpcGroupChannel.cs
index c88621d8f..6216a4a13 100644
--- a/src/Discord.Net.Rpc/Entities/Channels/RpcGroupChannel.cs
+++ b/src/Discord.Net.Rpc/Entities/Channels/RpcGroupChannel.cs
@@ -13,6 +13,7 @@ namespace Discord.Rpc
{
public IReadOnlyCollection CachedMessages { get; private set; }
public IReadOnlyCollection VoiceStates { get; private set; }
+ public ulong? LastMessageId { get { throw new NotSupportedException(); } }
internal RpcGroupChannel(DiscordRpcClient discord, ulong id)
: base(discord, id)
diff --git a/src/Discord.Net.Rpc/Entities/Channels/RpcTextChannel.cs b/src/Discord.Net.Rpc/Entities/Channels/RpcTextChannel.cs
index a5779bdbb..d3a25c9bf 100644
--- a/src/Discord.Net.Rpc/Entities/Channels/RpcTextChannel.cs
+++ b/src/Discord.Net.Rpc/Entities/Channels/RpcTextChannel.cs
@@ -15,6 +15,7 @@ namespace Discord.Rpc
public class RpcTextChannel : RpcGuildChannel, IRpcMessageChannel, ITextChannel
{
public IReadOnlyCollection CachedMessages { get; private set; }
+ public ulong? LastMessageId { get { throw new NotSupportedException(); } }
public string Mention => MentionUtils.MentionChannel(Id);
diff --git a/src/Discord.Net.WebSocket/Entities/Channels/SocketDMChannel.cs b/src/Discord.Net.WebSocket/Entities/Channels/SocketDMChannel.cs
index 48f87764b..8b9bf845f 100644
--- a/src/Discord.Net.WebSocket/Entities/Channels/SocketDMChannel.cs
+++ b/src/Discord.Net.WebSocket/Entities/Channels/SocketDMChannel.cs
@@ -16,6 +16,7 @@ namespace Discord.WebSocket
private readonly MessageCache _messages;
public SocketUser Recipient { get; private set; }
+ public ulong? LastMessageId { get; private set; }
public IReadOnlyCollection CachedMessages => _messages?.Messages ?? ImmutableArray.Create();
public new IReadOnlyCollection Users => ImmutableArray.Create(Discord.CurrentUser, Recipient);
@@ -36,6 +37,7 @@ namespace Discord.WebSocket
internal override void Update(ClientState state, Model model)
{
Recipient.Update(state, model.Recipients.Value[0]);
+ LastMessageId = model.LastMessageId;
}
public Task CloseAsync(RequestOptions options = null)
diff --git a/src/Discord.Net.WebSocket/Entities/Channels/SocketGroupChannel.cs b/src/Discord.Net.WebSocket/Entities/Channels/SocketGroupChannel.cs
index 93407e22e..eaf1173af 100644
--- a/src/Discord.Net.WebSocket/Entities/Channels/SocketGroupChannel.cs
+++ b/src/Discord.Net.WebSocket/Entities/Channels/SocketGroupChannel.cs
@@ -23,6 +23,7 @@ namespace Discord.WebSocket
private ConcurrentDictionary _voiceStates;
public string Name { get; private set; }
+ public ulong? LastMessageId { get; private set; }
public IReadOnlyCollection CachedMessages => _messages?.Messages ?? ImmutableArray.Create();
public new IReadOnlyCollection Users => _users.ToReadOnlyCollection();
@@ -52,6 +53,8 @@ namespace Discord.WebSocket
if (model.Recipients.IsSpecified)
UpdateUsers(state, model.Recipients.Value);
+
+ LastMessageId = model.LastMessageId;
}
private void UpdateUsers(ClientState state, UserModel[] models)
{
diff --git a/src/Discord.Net.WebSocket/Entities/Channels/SocketTextChannel.cs b/src/Discord.Net.WebSocket/Entities/Channels/SocketTextChannel.cs
index 9b687c9fb..79ff18dc6 100644
--- a/src/Discord.Net.WebSocket/Entities/Channels/SocketTextChannel.cs
+++ b/src/Discord.Net.WebSocket/Entities/Channels/SocketTextChannel.cs
@@ -17,6 +17,7 @@ namespace Discord.WebSocket
private readonly MessageCache _messages;
public string Topic { get; private set; }
+ public ulong? LastMessageId { get; private set; }
public string Mention => MentionUtils.MentionChannel(Id);
public IReadOnlyCollection CachedMessages => _messages?.Messages ?? ImmutableArray.Create();
@@ -42,6 +43,7 @@ namespace Discord.WebSocket
base.Update(state, model);
Topic = model.Topic.Value;
+ LastMessageId = model.LastMessageId;
}
public Task ModifyAsync(Action func, RequestOptions options = null)