diff --git a/src/Discord.Net/DiscordClient.Messages.cs b/src/Discord.Net/DiscordClient.Messages.cs index 191eeaf8e..984c69594 100644 --- a/src/Discord.Net/DiscordClient.Messages.cs +++ b/src/Discord.Net/DiscordClient.Messages.cs @@ -217,7 +217,7 @@ namespace Discord /// Downloads last count messages from the server, returning all messages before or after relativeMessageId, if it's provided. - public async Task DownloadMessages(Channel channel, int count, string relativeMessageId = null, RelativeDirection relativeDir = RelativeDirection.Before, bool cache = false) + public async Task DownloadMessages(Channel channel, int count, string relativeMessageId = null, RelativeDirection relativeDir = RelativeDirection.Before, bool cache = true) { if (channel == null) throw new ArgumentNullException(nameof(channel)); if (count < 0) throw new ArgumentNullException(nameof(count)); diff --git a/src/Discord.Net/Models/Channel.cs b/src/Discord.Net/Models/Channel.cs index b86538489..d9dce2a9f 100644 --- a/src/Discord.Net/Models/Channel.cs +++ b/src/Discord.Net/Models/Channel.cs @@ -140,10 +140,11 @@ namespace Discord internal void AddMessage(Message message) { + //Race conditions are okay here - it just means the queue will occasionally go higher than the requested cache size, and fixed later. var cacheLength = _client.Config.MessageCacheLength; if (cacheLength > 0) { - var oldestIds = _messages.Select(x => x.Value.Id).OrderBy(x => x).Take(_messages.Count - cacheLength); + var oldestIds = _messages.Where(x => x.Value.Timestamp < message.Timestamp).Select(x => x.Key).OrderBy(x => x).Take(_messages.Count - cacheLength); foreach (var id in oldestIds) { Message removed;