diff --git a/src/Discord.Net.WebSocket/ClientState.cs b/src/Discord.Net.WebSocket/ClientState.cs index 8bc745211..f07976a0a 100644 --- a/src/Discord.Net.WebSocket/ClientState.cs +++ b/src/Discord.Net.WebSocket/ClientState.cs @@ -55,26 +55,28 @@ namespace Discord.WebSocket { _channels[channel.Id] = channel; - if (channel is SocketDMChannel dmChannel) - _dmChannels[dmChannel.Recipient.Id] = dmChannel; - else + switch (channel) { - if (channel is SocketGroupChannel groupChannel) + case SocketDMChannel dmChannel: + _dmChannels[dmChannel.Recipient.Id] = dmChannel; + break; + case SocketGroupChannel groupChannel: _groupChannels.TryAdd(groupChannel.Id); + break; } } internal SocketChannel RemoveChannel(ulong id) { if (_channels.TryRemove(id, out SocketChannel channel)) { - if (channel is SocketDMChannel dmChannel) + switch (channel) { - _dmChannels.TryRemove(dmChannel.Recipient.Id, out SocketDMChannel ignored); - } - else - { - if (channel is SocketGroupChannel groupChannel) + case SocketDMChannel dmChannel: + _dmChannels.TryRemove(dmChannel.Recipient.Id, out var ignored); + break; + case SocketGroupChannel groupChannel: _groupChannels.TryRemove(id); + break; } return channel; } diff --git a/src/Discord.Net.WebSocket/Entities/Channels/SocketDMChannel.cs b/src/Discord.Net.WebSocket/Entities/Channels/SocketDMChannel.cs index 4d79d1ab4..8e9272ff0 100644 --- a/src/Discord.Net.WebSocket/Entities/Channels/SocketDMChannel.cs +++ b/src/Discord.Net.WebSocket/Entities/Channels/SocketDMChannel.cs @@ -24,6 +24,7 @@ namespace Discord.WebSocket : base(discord, id) { Recipient = recipient; + recipient.GlobalUser.AddRef(); if (Discord.MessageCacheSize > 0) _messages = new MessageCache(Discord, this); } diff --git a/src/Discord.Net.WebSocket/Entities/Channels/SocketGroupChannel.cs b/src/Discord.Net.WebSocket/Entities/Channels/SocketGroupChannel.cs index bdf9dbc2b..d7d80214f 100644 --- a/src/Discord.Net.WebSocket/Entities/Channels/SocketGroupChannel.cs +++ b/src/Discord.Net.WebSocket/Entities/Channels/SocketGroupChannel.cs @@ -131,6 +131,7 @@ namespace Discord.WebSocket else { var privateUser = SocketGroupUser.Create(this, Discord.State, model); + privateUser.GlobalUser.AddRef(); _users[privateUser.Id] = privateUser; return privateUser; }