| @@ -9,48 +9,44 @@ namespace Discord.Commands | |||||
| { | { | ||||
| public override async Task<TypeReaderResult> Read(IMessage context, string input) | public override async Task<TypeReaderResult> Read(IMessage context, string input) | ||||
| { | { | ||||
| IGuildChannel guildChannel = context.Channel as IGuildChannel; | |||||
| IUser result = null; | 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) | if (result == null) | ||||