feature: Remove DM cache and fix references (#1851)
* Remove DM cache and fix references * Move line back to where it was
This commit is contained in:
@@ -16,15 +16,13 @@ namespace Discord.WebSocket
|
||||
[DebuggerDisplay(@"{DebuggerDisplay,nq}")]
|
||||
public class SocketDMChannel : SocketChannel, IDMChannel, ISocketPrivateChannel, ISocketMessageChannel
|
||||
{
|
||||
private readonly MessageCache _messages;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the recipient of the channel.
|
||||
/// </summary>
|
||||
public SocketUser Recipient { get; }
|
||||
|
||||
/// <inheritdoc />
|
||||
public IReadOnlyCollection<SocketMessage> CachedMessages => _messages?.Messages ?? ImmutableArray.Create<SocketMessage>();
|
||||
public IReadOnlyCollection<SocketMessage> CachedMessages => ImmutableArray.Create<SocketMessage>();
|
||||
|
||||
/// <summary>
|
||||
/// Gets a collection that is the current logged-in user and the recipient.
|
||||
@@ -35,13 +33,10 @@ namespace Discord.WebSocket
|
||||
: base(discord, id)
|
||||
{
|
||||
Recipient = recipient;
|
||||
recipient.GlobalUser.AddRef();
|
||||
if (Discord.MessageCacheSize > 0)
|
||||
_messages = new MessageCache(Discord);
|
||||
}
|
||||
internal static SocketDMChannel Create(DiscordSocketClient discord, ClientState state, Model model)
|
||||
{
|
||||
var entity = new SocketDMChannel(discord, model.Id, discord.GetOrCreateUser(state, model.Recipients.Value[0]));
|
||||
var entity = new SocketDMChannel(discord, model.Id, discord.GetOrCreateUser(state, model.Recipients.Value[0], false));
|
||||
entity.Update(state, model);
|
||||
return entity;
|
||||
}
|
||||
@@ -51,7 +46,7 @@ namespace Discord.WebSocket
|
||||
}
|
||||
internal static SocketDMChannel Create(DiscordSocketClient discord, ClientState state, ulong channelId, API.User recipient)
|
||||
{
|
||||
var entity = new SocketDMChannel(discord, channelId, discord.GetOrCreateUser(state, recipient));
|
||||
var entity = new SocketDMChannel(discord, channelId, discord.GetOrCreateUser(state, recipient, false));
|
||||
entity.Update(state, recipient);
|
||||
return entity;
|
||||
}
|
||||
@@ -67,7 +62,7 @@ namespace Discord.WebSocket
|
||||
//Messages
|
||||
/// <inheritdoc />
|
||||
public SocketMessage GetCachedMessage(ulong id)
|
||||
=> _messages?.Get(id);
|
||||
=> null;
|
||||
/// <summary>
|
||||
/// Gets the message associated with the given <paramref name="id"/>.
|
||||
/// </summary>
|
||||
@@ -78,10 +73,7 @@ namespace Discord.WebSocket
|
||||
/// </returns>
|
||||
public async Task<IMessage> GetMessageAsync(ulong id, RequestOptions options = null)
|
||||
{
|
||||
IMessage msg = _messages?.Get(id);
|
||||
if (msg == null)
|
||||
msg = await ChannelHelper.GetMessageAsync(this, Discord, id, options).ConfigureAwait(false);
|
||||
return msg;
|
||||
return await ChannelHelper.GetMessageAsync(this, Discord, id, options).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -97,7 +89,7 @@ namespace Discord.WebSocket
|
||||
/// Paged collection of messages.
|
||||
/// </returns>
|
||||
public IAsyncEnumerable<IReadOnlyCollection<IMessage>> GetMessagesAsync(int limit = DiscordConfig.MaxMessagesPerBatch, RequestOptions options = null)
|
||||
=> SocketChannelHelper.GetMessagesAsync(this, Discord, _messages, null, Direction.Before, limit, CacheMode.AllowDownload, options);
|
||||
=> ChannelHelper.GetMessagesAsync(this, Discord, null, Direction.Before, limit, options);
|
||||
/// <summary>
|
||||
/// Gets a collection of messages in this channel.
|
||||
/// </summary>
|
||||
@@ -113,7 +105,7 @@ namespace Discord.WebSocket
|
||||
/// Paged collection of messages.
|
||||
/// </returns>
|
||||
public IAsyncEnumerable<IReadOnlyCollection<IMessage>> GetMessagesAsync(ulong fromMessageId, Direction dir, int limit = DiscordConfig.MaxMessagesPerBatch, RequestOptions options = null)
|
||||
=> SocketChannelHelper.GetMessagesAsync(this, Discord, _messages, fromMessageId, dir, limit, CacheMode.AllowDownload, options);
|
||||
=> ChannelHelper.GetMessagesAsync(this, Discord, fromMessageId, dir, limit, options);
|
||||
/// <summary>
|
||||
/// Gets a collection of messages in this channel.
|
||||
/// </summary>
|
||||
@@ -129,16 +121,16 @@ namespace Discord.WebSocket
|
||||
/// Paged collection of messages.
|
||||
/// </returns>
|
||||
public IAsyncEnumerable<IReadOnlyCollection<IMessage>> GetMessagesAsync(IMessage fromMessage, Direction dir, int limit = DiscordConfig.MaxMessagesPerBatch, RequestOptions options = null)
|
||||
=> SocketChannelHelper.GetMessagesAsync(this, Discord, _messages, fromMessage.Id, dir, limit, CacheMode.AllowDownload, options);
|
||||
=> ChannelHelper.GetMessagesAsync(this, Discord, fromMessage.Id, dir, limit, options);
|
||||
/// <inheritdoc />
|
||||
public IReadOnlyCollection<SocketMessage> GetCachedMessages(int limit = DiscordConfig.MaxMessagesPerBatch)
|
||||
=> SocketChannelHelper.GetCachedMessages(this, Discord, _messages, null, Direction.Before, limit);
|
||||
=> ImmutableArray.Create<SocketMessage>();
|
||||
/// <inheritdoc />
|
||||
public IReadOnlyCollection<SocketMessage> GetCachedMessages(ulong fromMessageId, Direction dir, int limit = DiscordConfig.MaxMessagesPerBatch)
|
||||
=> SocketChannelHelper.GetCachedMessages(this, Discord, _messages, fromMessageId, dir, limit);
|
||||
=> ImmutableArray.Create<SocketMessage>();
|
||||
/// <inheritdoc />
|
||||
public IReadOnlyCollection<SocketMessage> GetCachedMessages(IMessage fromMessage, Direction dir, int limit = DiscordConfig.MaxMessagesPerBatch)
|
||||
=> SocketChannelHelper.GetCachedMessages(this, Discord, _messages, fromMessage.Id, dir, limit);
|
||||
=> ImmutableArray.Create<SocketMessage>();
|
||||
/// <inheritdoc />
|
||||
public Task<IReadOnlyCollection<RestMessage>> GetPinnedMessagesAsync(RequestOptions options = null)
|
||||
=> ChannelHelper.GetPinnedMessagesAsync(this, Discord, options);
|
||||
@@ -174,9 +166,12 @@ namespace Discord.WebSocket
|
||||
=> ChannelHelper.EnterTypingState(this, Discord, options);
|
||||
|
||||
internal void AddMessage(SocketMessage msg)
|
||||
=> _messages?.Add(msg);
|
||||
{
|
||||
}
|
||||
internal SocketMessage RemoveMessage(ulong id)
|
||||
=> _messages?.Remove(id);
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
//Users
|
||||
/// <summary>
|
||||
@@ -232,13 +227,13 @@ namespace Discord.WebSocket
|
||||
}
|
||||
/// <inheritdoc />
|
||||
IAsyncEnumerable<IReadOnlyCollection<IMessage>> IMessageChannel.GetMessagesAsync(int limit, CacheMode mode, RequestOptions options)
|
||||
=> SocketChannelHelper.GetMessagesAsync(this, Discord, _messages, null, Direction.Before, limit, mode, options);
|
||||
=> mode == CacheMode.CacheOnly ? null : GetMessagesAsync(limit, options);
|
||||
/// <inheritdoc />
|
||||
IAsyncEnumerable<IReadOnlyCollection<IMessage>> IMessageChannel.GetMessagesAsync(ulong fromMessageId, Direction dir, int limit, CacheMode mode, RequestOptions options)
|
||||
=> SocketChannelHelper.GetMessagesAsync(this, Discord, _messages, fromMessageId, dir, limit, mode, options);
|
||||
=> mode == CacheMode.CacheOnly ? null : GetMessagesAsync(fromMessageId, dir, limit, options);
|
||||
/// <inheritdoc />
|
||||
IAsyncEnumerable<IReadOnlyCollection<IMessage>> IMessageChannel.GetMessagesAsync(IMessage fromMessage, Direction dir, int limit, CacheMode mode, RequestOptions options)
|
||||
=> SocketChannelHelper.GetMessagesAsync(this, Discord, _messages, fromMessage.Id, dir, limit, mode, options);
|
||||
=> mode == CacheMode.CacheOnly ? null : GetMessagesAsync(fromMessage.Id, dir, limit, options);
|
||||
/// <inheritdoc />
|
||||
async Task<IReadOnlyCollection<IMessage>> IMessageChannel.GetPinnedMessagesAsync(RequestOptions options)
|
||||
=> await GetPinnedMessagesAsync(options).ConfigureAwait(false);
|
||||
|
||||
@@ -12,7 +12,6 @@ namespace Discord.WebSocket
|
||||
public override string Username { get; internal set; }
|
||||
public override ushort DiscriminatorValue { get; internal set; }
|
||||
public override string AvatarId { get; internal set; }
|
||||
public SocketDMChannel DMChannel { get; internal set; }
|
||||
internal override SocketPresence Presence { get; set; }
|
||||
|
||||
public override bool IsWebhook => false;
|
||||
@@ -52,7 +51,6 @@ namespace Discord.WebSocket
|
||||
internal void Update(ClientState state, PresenceModel model)
|
||||
{
|
||||
Presence = SocketPresence.Create(model);
|
||||
DMChannel = state.DMChannels.FirstOrDefault(x => x.Recipient.Id == Id);
|
||||
}
|
||||
|
||||
private string DebuggerDisplay => $"{Username}#{Discriminator} ({Id}{(IsBot ? ", Bot" : "")}, Global)";
|
||||
|
||||
@@ -38,7 +38,7 @@ namespace Discord.WebSocket
|
||||
}
|
||||
internal static SocketGroupUser Create(SocketGroupChannel channel, ClientState state, Model model)
|
||||
{
|
||||
var entity = new SocketGroupUser(channel, channel.Discord.GetOrCreateUser(state, model));
|
||||
var entity = new SocketGroupUser(channel, channel.Discord.GetOrCreateUser(state, model, true));
|
||||
entity.Update(state, model);
|
||||
return entity;
|
||||
}
|
||||
|
||||
@@ -116,20 +116,20 @@ namespace Discord.WebSocket
|
||||
}
|
||||
internal static SocketGuildUser Create(SocketGuild guild, ClientState state, UserModel model)
|
||||
{
|
||||
var entity = new SocketGuildUser(guild, guild.Discord.GetOrCreateUser(state, model));
|
||||
var entity = new SocketGuildUser(guild, guild.Discord.GetOrCreateUser(state, model, true));
|
||||
entity.Update(state, model);
|
||||
entity.UpdateRoles(new ulong[0]);
|
||||
return entity;
|
||||
}
|
||||
internal static SocketGuildUser Create(SocketGuild guild, ClientState state, MemberModel model)
|
||||
{
|
||||
var entity = new SocketGuildUser(guild, guild.Discord.GetOrCreateUser(state, model.User));
|
||||
var entity = new SocketGuildUser(guild, guild.Discord.GetOrCreateUser(state, model.User, true));
|
||||
entity.Update(state, model);
|
||||
return entity;
|
||||
}
|
||||
internal static SocketGuildUser Create(SocketGuild guild, ClientState state, PresenceModel model)
|
||||
{
|
||||
var entity = new SocketGuildUser(guild, guild.Discord.GetOrCreateUser(state, model.User));
|
||||
var entity = new SocketGuildUser(guild, guild.Discord.GetOrCreateUser(state, model.User, true));
|
||||
entity.Update(state, model, false);
|
||||
return entity;
|
||||
}
|
||||
|
||||
@@ -92,8 +92,8 @@ namespace Discord.WebSocket
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public async Task<IDMChannel> GetOrCreateDMChannelAsync(RequestOptions options = null)
|
||||
=> GlobalUser.DMChannel ?? await UserHelper.CreateDMChannelAsync(this, Discord, options).ConfigureAwait(false) as IDMChannel;
|
||||
public async Task<IDMChannel> CreateDMChannelAsync(RequestOptions options = null)
|
||||
=> await UserHelper.CreateDMChannelAsync(this, Discord, options).ConfigureAwait(false);
|
||||
|
||||
/// <inheritdoc />
|
||||
public string GetAvatarUrl(ImageFormat format = ImageFormat.Auto, ushort size = 128)
|
||||
|
||||
Reference in New Issue
Block a user