diff --git a/src/Discord.Net/Helpers/Reference.cs b/src/Discord.Net/Helpers/Reference.cs index f86c9d5a4..e02932e9b 100644 --- a/src/Discord.Net/Helpers/Reference.cs +++ b/src/Discord.Net/Helpers/Reference.cs @@ -32,7 +32,7 @@ namespace Discord if (v == null && _id != null) { v = _getItem(_id); - if (v != null) + if (v != null && _onCache != null) _onCache(v); _value = v; } diff --git a/src/Discord.Net/Models/Channel.cs b/src/Discord.Net/Models/Channel.cs index ae1cae7c3..61bb240b8 100644 --- a/src/Discord.Net/Models/Channel.cs +++ b/src/Discord.Net/Models/Channel.cs @@ -79,7 +79,7 @@ namespace Discord x => x.AddChannel(this), x => x.RemoveChannel(this)); _recipient = new Reference(recipientId, - x => _client.Users[x, _server.Id], + x => _client.Users.GetOrAdd(x, _server.Id), x => { Name = "@" + x.Name; diff --git a/src/Discord.Net/Models/Message.cs b/src/Discord.Net/Models/Message.cs index 24afcf9b9..e9d9da72c 100644 --- a/src/Discord.Net/Models/Message.cs +++ b/src/Discord.Net/Models/Message.cs @@ -145,8 +145,19 @@ namespace Discord internal Message(DiscordClient client, string id, string channelId, string userId) : base(client, id) { - _channel = new Reference(channelId, x => _client.Channels[x], x => x.AddMessage(this), x => x.RemoveMessage(this)); - _user = new Reference(userId, x => _client.Users[x]); + _channel = new Reference(channelId, + x => _client.Channels[x], + x => x.AddMessage(this), + x => x.RemoveMessage(this)); + _user = new Reference(userId, + x => + { + var channel = Channel; + if (!channel.IsPrivate) + return _client.Users[x, channel.Server.Id]; + else + return _client.Users[x, null]; + }); Attachments = _initialAttachments; Embeds = _initialEmbeds; }