From 5c5a9c8d6f4a184dad964415eb227aff40c56214 Mon Sep 17 00:00:00 2001 From: RogueException Date: Wed, 29 Jun 2016 05:27:18 -0300 Subject: [PATCH] Fixed User TypeReader not resolving in DMs --- .../Readers/UserTypeReader.cs | 64 +++++++++---------- 1 file changed, 30 insertions(+), 34 deletions(-) diff --git a/src/Discord.Net.Commands/Readers/UserTypeReader.cs b/src/Discord.Net.Commands/Readers/UserTypeReader.cs index c80ac2816..e4bd9ffd1 100644 --- a/src/Discord.Net.Commands/Readers/UserTypeReader.cs +++ b/src/Discord.Net.Commands/Readers/UserTypeReader.cs @@ -9,48 +9,44 @@ namespace Discord.Commands { public override async Task Read(IMessage context, string input) { - IGuildChannel guildChannel = context.Channel as IGuildChannel; IUser result = null; - - if (guildChannel != null) + + //By Id + ulong id; + if (MentionUtils.TryParseUser(input, out id) || ulong.TryParse(input, out id)) { - //By Id - ulong id; - if (MentionUtils.TryParseUser(input, out id) || ulong.TryParse(input, out id)) - { - var user = await guildChannel.Guild.GetUserAsync(id).ConfigureAwait(false); - if (user != null) - result = user; - } + var user = await context.Channel.GetUserAsync(id).ConfigureAwait(false); + if (user != null) + result = user; + } - //By Username + Discriminator - if (result == null) + //By Username + Discriminator + if (result == null) + { + int index = input.LastIndexOf('#'); + if (index >= 0) { - int index = input.LastIndexOf('#'); - if (index >= 0) + string username = input.Substring(0, index); + ushort discriminator; + if (ushort.TryParse(input.Substring(index + 1), out discriminator)) { - string username = input.Substring(0, index); - ushort discriminator; - if (ushort.TryParse(input.Substring(index + 1), out discriminator)) - { - var users = await guildChannel.Guild.GetUsersAsync().ConfigureAwait(false); - result = users.Where(x => - x.DiscriminatorValue == discriminator && - string.Equals(username, x.Username, StringComparison.OrdinalIgnoreCase)).FirstOrDefault(); - } + var users = await context.Channel.GetUsersAsync().ConfigureAwait(false); + result = users.Where(x => + x.DiscriminatorValue == discriminator && + string.Equals(username, x.Username, StringComparison.OrdinalIgnoreCase)).FirstOrDefault(); } } + } - //By Username - if (result == null) - { - var users = await guildChannel.Guild.GetUsersAsync().ConfigureAwait(false); - var filteredUsers = users.Where(x => string.Equals(input, x.Username, StringComparison.OrdinalIgnoreCase)).ToArray(); - if (filteredUsers.Length > 1) - return TypeReaderResult.FromError(CommandError.MultipleMatches, "Multiple users found."); - else if (filteredUsers.Length == 1) - result = filteredUsers[0]; - } + //By Username + if (result == null) + { + var users = await context.Channel.GetUsersAsync().ConfigureAwait(false); + var filteredUsers = users.Where(x => string.Equals(input, x.Username, StringComparison.OrdinalIgnoreCase)).ToArray(); + if (filteredUsers.Length > 1) + return TypeReaderResult.FromError(CommandError.MultipleMatches, "Multiple users found."); + else if (filteredUsers.Length == 1) + result = filteredUsers[0]; } if (result == null)