diff --git a/src/Discord.Net.WebSocket/DiscordSocketClient.cs b/src/Discord.Net.WebSocket/DiscordSocketClient.cs index b43db5d98..521a29275 100644 --- a/src/Discord.Net.WebSocket/DiscordSocketClient.cs +++ b/src/Discord.Net.WebSocket/DiscordSocketClient.cs @@ -66,6 +66,7 @@ namespace Discord.WebSocket //From DiscordSocketConfig internal int TotalShards { get; private set; } internal int MessageCacheSize { get; private set; } + internal IMessageCache MessageCache { get; private set; } internal int LargeThreshold { get; private set; } internal ClientState State { get; private set; } internal UdpSocketProvider UdpSocketProvider { get; private set; } @@ -131,6 +132,7 @@ namespace Discord.WebSocket ShardId = config.ShardId ?? 0; TotalShards = config.TotalShards ?? 1; MessageCacheSize = config.MessageCacheSize; + MessageCache = config.MessageCache; LargeThreshold = config.LargeThreshold; UdpSocketProvider = config.UdpSocketProvider; WebSocketProvider = config.WebSocketProvider; diff --git a/src/Discord.Net.WebSocket/DiscordSocketConfig.cs b/src/Discord.Net.WebSocket/DiscordSocketConfig.cs index a45d4f5be..10fc1065d 100644 --- a/src/Discord.Net.WebSocket/DiscordSocketConfig.cs +++ b/src/Discord.Net.WebSocket/DiscordSocketConfig.cs @@ -57,6 +57,8 @@ namespace Discord.WebSocket /// public int MessageCacheSize { get; set; } = 0; + public IMessageCache MessageCache { get; set; } = null; + /// /// Gets or sets the max number of users a guild may have for offline users to be included in the READY /// packet. The maximum value allowed is 250. diff --git a/src/Discord.Net.WebSocket/Entities/Channels/SocketDMChannel.cs b/src/Discord.Net.WebSocket/Entities/Channels/SocketDMChannel.cs index 0fa6568c5..aaeee182b 100644 --- a/src/Discord.Net.WebSocket/Entities/Channels/SocketDMChannel.cs +++ b/src/Discord.Net.WebSocket/Entities/Channels/SocketDMChannel.cs @@ -36,8 +36,7 @@ namespace Discord.WebSocket { Recipient = recipient; recipient.GlobalUser.AddRef(); - if (Discord.MessageCacheSize > 0) - _messages = new MessageCache(Discord); + _messages = discord.MessageCache.CreateMessageCache(discord); } internal static SocketDMChannel Create(DiscordSocketClient discord, ClientState state, Model model) { diff --git a/src/Discord.Net.WebSocket/Entities/Channels/SocketTextChannel.cs b/src/Discord.Net.WebSocket/Entities/Channels/SocketTextChannel.cs index 861b90a68..7fd3713dc 100644 --- a/src/Discord.Net.WebSocket/Entities/Channels/SocketTextChannel.cs +++ b/src/Discord.Net.WebSocket/Entities/Channels/SocketTextChannel.cs @@ -54,7 +54,7 @@ namespace Discord.WebSocket : base(discord, id, guild) { if (Discord.MessageCacheSize > 0) - _messages = new MessageCache(Discord); + _messages = discord.MessageCache.CreateMessageCache(discord); } internal new static SocketTextChannel Create(SocketGuild guild, ClientState state, Model model) { diff --git a/src/Discord.Net.WebSocket/Entities/Messages/IMessageCache.cs b/src/Discord.Net.WebSocket/Entities/Messages/IMessageCache.cs index a74cc97a7..8b061e85b 100644 --- a/src/Discord.Net.WebSocket/Entities/Messages/IMessageCache.cs +++ b/src/Discord.Net.WebSocket/Entities/Messages/IMessageCache.cs @@ -3,8 +3,10 @@ using Discord.WebSocket; namespace Discord { - internal interface IMessageCache + public interface IMessageCache { + public IMessageCache CreateMessageCache(DiscordSocketClient discord); + public IReadOnlyCollection Messages { get; } public void Add(SocketMessage message); diff --git a/src/Discord.Net.WebSocket/Entities/Messages/MessageCache.cs b/src/Discord.Net.WebSocket/Entities/Messages/MessageCache.cs index ab11a3936..0de157770 100644 --- a/src/Discord.Net.WebSocket/Entities/Messages/MessageCache.cs +++ b/src/Discord.Net.WebSocket/Entities/Messages/MessageCache.cs @@ -6,7 +6,7 @@ using System.Linq; namespace Discord.WebSocket { - internal class MessageCache : IMessageCache + public class MessageCache : IMessageCache { private readonly ConcurrentDictionary _messages; private readonly ConcurrentQueue _orderedMessages; @@ -14,6 +14,11 @@ namespace Discord.WebSocket public IReadOnlyCollection Messages => _messages.ToReadOnlyCollection(); + public IMessageCache CreateMessageCache(DiscordSocketClient discord) + { + return new MessageCache(discord); + } + public MessageCache(DiscordSocketClient discord) { _size = discord.MessageCacheSize;