diff --git a/src/Discord.Net/Collections/Channels.cs b/src/Discord.Net/Collections/Channels.cs index 32549e70..ae0e4060 100644 --- a/src/Discord.Net/Collections/Channels.cs +++ b/src/Discord.Net/Collections/Channels.cs @@ -22,7 +22,7 @@ namespace Discord.Collections if (user.PrivateChannelId != null) throw new Exception("User already has a private channel."); user.PrivateChannelId = item.Id; - item.Recipient.AddRef(); + user.AddRef(); } } protected override void OnRemoved(Channel item) diff --git a/src/Discord.Net/DiscordClient.cs b/src/Discord.Net/DiscordClient.cs index 13957252..976ae291 100644 --- a/src/Discord.Net/DiscordClient.cs +++ b/src/Discord.Net/DiscordClient.cs @@ -283,7 +283,9 @@ namespace Discord } foreach (var model in data.PrivateChannels) { - var channel = _channels.GetOrAdd(model.Id, null, model.Recipient?.Id); + var user = _users.GetOrAdd(model.Recipient.Id); + user.Update(data.Recipient); + var channel = _channels.GetOrAdd(model.Id, null, user.Id); channel.Update(model); } } @@ -324,7 +326,15 @@ namespace Discord case "CHANNEL_CREATE": { var data = e.Payload.ToObject(_serializer); - var channel = _channels.GetOrAdd(data.Id, data.GuildId, data.Recipient?.Id); + Channel channel; + if (data.IsPrivate) + { + var user = _users.GetOrAdd(data.Recipient.Id); + user.Update(data.Recipient); + channel = _channels.GetOrAdd(data.Id, null, user.Id); + } + else + channel = _channels.GetOrAdd(data.Id, data.GuildId, null); channel.Update(data); RaiseChannelCreated(channel); }