From c5b7aa2ad18c8e368b8e96dee046a932910afd30 Mon Sep 17 00:00:00 2001 From: Brandon Smith Date: Wed, 23 Sep 2015 00:55:37 -0300 Subject: [PATCH] Ensure recipients have been cached before creating private channels. --- src/Discord.Net/Collections/Channels.cs | 2 +- src/Discord.Net/DiscordClient.cs | 14 ++++++++++++-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/Discord.Net/Collections/Channels.cs b/src/Discord.Net/Collections/Channels.cs index 32549e708..ae0e4060c 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 139572525..976ae2912 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); }