From b5f80a7a6c9611c5ed5e975330a0421a47f7c218 Mon Sep 17 00:00:00 2001 From: Flamanis Date: Tue, 7 Mar 2017 18:29:53 -0600 Subject: [PATCH 1/4] Should fix Linq ArgumentNullException --- src/Discord.Net.Commands/Readers/UserTypeReader.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/Discord.Net.Commands/Readers/UserTypeReader.cs b/src/Discord.Net.Commands/Readers/UserTypeReader.cs index a5f92a277..cfeaf3576 100644 --- a/src/Discord.Net.Commands/Readers/UserTypeReader.cs +++ b/src/Discord.Net.Commands/Readers/UserTypeReader.cs @@ -60,12 +60,14 @@ namespace Discord.Commands { foreach (var channelUser in channelUsers.Where(x => string.Equals(input, x.Username, StringComparison.OrdinalIgnoreCase))) AddResult(results, channelUser as T, channelUser.Username == input ? 0.65f : 0.55f); - + + if(context.Guild != null) foreach (var guildUser in guildUsers.Where(x => string.Equals(input, x.Username, StringComparison.OrdinalIgnoreCase))) AddResult(results, guildUser as T, guildUser.Username == input ? 0.60f : 0.50f); } //By Nickname (0.5-0.6) + if(context.Guild != null) { foreach (var channelUser in channelUsers.Where(x => string.Equals(input, (x as IGuildUser).Nickname, StringComparison.OrdinalIgnoreCase))) AddResult(results, channelUser as T, (channelUser as IGuildUser).Nickname == input ? 0.65f : 0.55f); From c643ceaa477e7158538b6c1c097e1372a4871215 Mon Sep 17 00:00:00 2001 From: Flamanis Date: Tue, 7 Mar 2017 18:41:31 -0600 Subject: [PATCH 2/4] Add space after if and before ( --- src/Discord.Net.Commands/Readers/UserTypeReader.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Discord.Net.Commands/Readers/UserTypeReader.cs b/src/Discord.Net.Commands/Readers/UserTypeReader.cs index cfeaf3576..69c77d664 100644 --- a/src/Discord.Net.Commands/Readers/UserTypeReader.cs +++ b/src/Discord.Net.Commands/Readers/UserTypeReader.cs @@ -61,13 +61,13 @@ namespace Discord.Commands foreach (var channelUser in channelUsers.Where(x => string.Equals(input, x.Username, StringComparison.OrdinalIgnoreCase))) AddResult(results, channelUser as T, channelUser.Username == input ? 0.65f : 0.55f); - if(context.Guild != null) + if (context.Guild != null) foreach (var guildUser in guildUsers.Where(x => string.Equals(input, x.Username, StringComparison.OrdinalIgnoreCase))) AddResult(results, guildUser as T, guildUser.Username == input ? 0.60f : 0.50f); } //By Nickname (0.5-0.6) - if(context.Guild != null) + if (context.Guild != null) { foreach (var channelUser in channelUsers.Where(x => string.Equals(input, (x as IGuildUser).Nickname, StringComparison.OrdinalIgnoreCase))) AddResult(results, channelUser as T, (channelUser as IGuildUser).Nickname == input ? 0.65f : 0.55f); From dc2230de869e5c46a3f2259066b18db7152e46ca Mon Sep 17 00:00:00 2001 From: Flamanis Date: Wed, 8 Mar 2017 00:48:18 -0600 Subject: [PATCH 3/4] guildUsers instantiated to empty collection, removed added nullchecks A null conditional operator was required at line 70 to avoid a nullref. --- src/Discord.Net.Commands/Readers/UserTypeReader.cs | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/Discord.Net.Commands/Readers/UserTypeReader.cs b/src/Discord.Net.Commands/Readers/UserTypeReader.cs index 69c77d664..5600ed27a 100644 --- a/src/Discord.Net.Commands/Readers/UserTypeReader.cs +++ b/src/Discord.Net.Commands/Readers/UserTypeReader.cs @@ -14,7 +14,7 @@ namespace Discord.Commands { var results = new Dictionary(); IReadOnlyCollection channelUsers = (await context.Channel.GetUsersAsync(CacheMode.CacheOnly).Flatten().ConfigureAwait(false)).ToArray(); //TODO: must be a better way? - IReadOnlyCollection guildUsers = null; + IReadOnlyCollection guildUsers = ImmutableArray.Create(); ulong id; if (context.Guild != null) @@ -61,15 +61,13 @@ namespace Discord.Commands foreach (var channelUser in channelUsers.Where(x => string.Equals(input, x.Username, StringComparison.OrdinalIgnoreCase))) AddResult(results, channelUser as T, channelUser.Username == input ? 0.65f : 0.55f); - if (context.Guild != null) foreach (var guildUser in guildUsers.Where(x => string.Equals(input, x.Username, StringComparison.OrdinalIgnoreCase))) AddResult(results, guildUser as T, guildUser.Username == input ? 0.60f : 0.50f); } //By Nickname (0.5-0.6) - if (context.Guild != null) { - foreach (var channelUser in channelUsers.Where(x => string.Equals(input, (x as IGuildUser).Nickname, StringComparison.OrdinalIgnoreCase))) + foreach (var channelUser in channelUsers.Where(x => string.Equals(input, (x as IGuildUser)?.Nickname, StringComparison.OrdinalIgnoreCase))) AddResult(results, channelUser as T, (channelUser as IGuildUser).Nickname == input ? 0.65f : 0.55f); foreach (var guildUser in guildUsers.Where(x => string.Equals(input, (x as IGuildUser).Nickname, StringComparison.OrdinalIgnoreCase))) From 94ea80b45eeeceacd070360128de3fe567e5103a Mon Sep 17 00:00:00 2001 From: Flamanis Date: Wed, 8 Mar 2017 00:51:10 -0600 Subject: [PATCH 4/4] Modified User#Discrim check to properly check guild --- src/Discord.Net.Commands/Readers/UserTypeReader.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Discord.Net.Commands/Readers/UserTypeReader.cs b/src/Discord.Net.Commands/Readers/UserTypeReader.cs index 5600ed27a..d7fc6cfdc 100644 --- a/src/Discord.Net.Commands/Readers/UserTypeReader.cs +++ b/src/Discord.Net.Commands/Readers/UserTypeReader.cs @@ -50,7 +50,7 @@ namespace Discord.Commands string.Equals(username, x.Username, StringComparison.OrdinalIgnoreCase)); AddResult(results, channelUser as T, channelUser?.Username == username ? 0.85f : 0.75f); - var guildUser = channelUsers.FirstOrDefault(x => x.DiscriminatorValue == discriminator && + var guildUser = guildUsers.FirstOrDefault(x => x.DiscriminatorValue == discriminator && string.Equals(username, x.Username, StringComparison.OrdinalIgnoreCase)); AddResult(results, guildUser as T, guildUser?.Username == username ? 0.80f : 0.70f); }