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)