From ba66469248dad3d9ca4f06a8ebeda8aef2297082 Mon Sep 17 00:00:00 2001 From: RogueException Date: Fri, 15 Jul 2016 22:12:14 -0300 Subject: [PATCH] Fixed User nullref errors --- src/Discord.Net/API/Common/User.cs | 14 +++++++------- src/Discord.Net/Data/DataStore.cs | 13 +++++++++++++ src/Discord.Net/DiscordSocketClient.cs | 1 - src/Discord.Net/Entities/Users/SelfUser.cs | 9 ++++++--- src/Discord.Net/Entities/Users/User.cs | 12 ++++++++---- 5 files changed, 34 insertions(+), 15 deletions(-) diff --git a/src/Discord.Net/API/Common/User.cs b/src/Discord.Net/API/Common/User.cs index 9c4ff6911..8c379ac55 100644 --- a/src/Discord.Net/API/Common/User.cs +++ b/src/Discord.Net/API/Common/User.cs @@ -7,20 +7,20 @@ namespace Discord.API [JsonProperty("id")] public ulong Id { get; set; } [JsonProperty("username")] - public string Username { get; set; } + public Optional Username { get; set; } [JsonProperty("discriminator")] - public string Discriminator { get; set; } + public Optional Discriminator { get; set; } [JsonProperty("bot")] - public bool Bot { get; set; } + public Optional Bot { get; set; } [JsonProperty("avatar")] - public string Avatar { get; set; } + public Optional Avatar { get; set; } //CurrentUser [JsonProperty("verified")] - public bool Verified { get; set; } + public Optional Verified { get; set; } [JsonProperty("email")] - public string Email { get; set; } + public Optional Email { get; set; } [JsonProperty("mfa_enabled")] - public bool MfaEnabled { get; set; } + public Optional MfaEnabled { get; set; } } } diff --git a/src/Discord.Net/Data/DataStore.cs b/src/Discord.Net/Data/DataStore.cs index c767904b3..882fc7677 100644 --- a/src/Discord.Net/Data/DataStore.cs +++ b/src/Discord.Net/Data/DataStore.cs @@ -58,9 +58,16 @@ namespace Discord internal void AddChannel(ICachedChannel channel) { _channels[channel.Id] = channel; + var dmChannel = channel as CachedDMChannel; if (dmChannel != null) _dmChannels[dmChannel.Recipient.Id] = dmChannel; + else + { + var groupChannel = channel as CachedGroupChannel; + if (groupChannel != null) + _groupChannels.TryAdd(groupChannel.Id); + } } internal ICachedChannel RemoveChannel(ulong id) { @@ -73,6 +80,12 @@ namespace Discord CachedDMChannel ignored; _dmChannels.TryRemove(dmChannel.Recipient.Id, out ignored); } + else + { + var groupChannel = channel as CachedGroupChannel; + if (groupChannel != null) + _groupChannels.TryRemove(id); + } return channel; } return null; diff --git a/src/Discord.Net/DiscordSocketClient.cs b/src/Discord.Net/DiscordSocketClient.cs index 256fd9391..093b1fcc1 100644 --- a/src/Discord.Net/DiscordSocketClient.cs +++ b/src/Discord.Net/DiscordSocketClient.cs @@ -528,7 +528,6 @@ namespace Discord var currentUser = new CachedSelfUser(this, data.User); int unavailableGuilds = 0; - //dataStore.GetOrAddUser(data.User.Id, _ => currentUser); for (int i = 0; i < data.Guilds.Length; i++) { var model = data.Guilds[i]; diff --git a/src/Discord.Net/Entities/Users/SelfUser.cs b/src/Discord.Net/Entities/Users/SelfUser.cs index 91cd08b92..e4f67b5d6 100644 --- a/src/Discord.Net/Entities/Users/SelfUser.cs +++ b/src/Discord.Net/Entities/Users/SelfUser.cs @@ -31,9 +31,12 @@ namespace Discord base.Update(model, source); - Email = model.Email; - IsVerified = model.Verified; - IsMfaEnabled = model.MfaEnabled; + if (model.Email.IsSpecified) + Email = model.Email.Value; + if (model.Verified.IsSpecified) + IsVerified = model.Verified.Value; + if (model.MfaEnabled.IsSpecified) + IsMfaEnabled = model.MfaEnabled.Value; } public async Task UpdateAsync() diff --git a/src/Discord.Net/Entities/Users/User.cs b/src/Discord.Net/Entities/Users/User.cs index f1f14607c..501bfb354 100644 --- a/src/Discord.Net/Entities/Users/User.cs +++ b/src/Discord.Net/Entities/Users/User.cs @@ -31,10 +31,14 @@ namespace Discord { if (source == UpdateSource.Rest && IsAttached) return; - _avatarId = model.Avatar; - DiscriminatorValue = ushort.Parse(model.Discriminator); - IsBot = model.Bot; - Username = model.Username; + if (model.Avatar.IsSpecified) + _avatarId = model.Avatar.Value; + if (model.Discriminator.IsSpecified) + DiscriminatorValue = ushort.Parse(model.Discriminator.Value); + if (model.Bot.IsSpecified) + IsBot = model.Bot.Value; + if (model.Username.IsSpecified) + Username = model.Username.Value; } public override string ToString() => $"{Username}#{Discriminator}";