| @@ -9,48 +9,44 @@ namespace Discord.Commands | |||
| { | |||
| public override async Task<TypeReaderResult> 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) | |||