public async Task AddPrey(string arg0, string arg1, string arg2) { // We have the following cases: // <genusName> <speciesName> <preySpeciesName> // <speciesName> <preyGenusName> <preySpeciesName> // <speciesName> <preySpecieName> <Notes> // If the user provided a prey list, it's easier to determine what they meant-- Check for that first. if (IsSpeciesList(arg1)) { // <speciesName> <preyList> <notes> await ReplyAddPreyAsync(string.Empty, arg0, SplitSpeciesList(arg1), arg2); } else if (IsSpeciesList(arg2)) { // <genusName> <speciesName> <preyList> await ReplyAddPreyAsync(arg0, arg1, SplitSpeciesList(arg2), string.Empty); } else { ISpeciesAmbiguityResolverResult resolverResult = await ReplyResolveAmbiguityAsync(arg0, arg1, arg2, options : AmbiguityResolverOptions.AllowExtra); if (resolverResult.Success) { await ReplyAddPreyAsync(resolverResult.First.First(), new ISpecies[] { resolverResult.Second.First() }, resolverResult.Extra); } } }
public async Task AddPrey(string arg0, string arg1, string arg2, string arg3) { ISpeciesAmbiguityResolverResult resolverResult = await ReplyResolveAmbiguityAsync(arg0, arg1, arg2, arg3, options : AmbiguityResolverOptions.AllowExtra); if (resolverResult.Success) { await ReplyAddPreyAsync(resolverResult.First.First(), new ISpecies[] { resolverResult.Second.First() }, resolverResult.Extra); } }
public async Task <ISpeciesAmbiguityResolverResult> ReplyResolveAmbiguityAsync(string arg0, string arg1, string arg2, string arg3 = "", AmbiguityResolverOptions options = AmbiguityResolverOptions.None) { ISpeciesAmbiguityResolver resolver = new SpeciesAmbiguityResolver(await GetDatabaseAsync()); ISpeciesAmbiguityResolverResult result = string.IsNullOrWhiteSpace(arg3) ? await resolver.Resolve2SpeciesAsync(arg0, arg1, arg2, options) : await resolver.Resolve2SpeciesAsync(arg0, arg1, arg2, arg3, options); ISpecies species1 = null; ISpecies species2 = null; if (result.First.Count() > 1) { await ReplyValidateSpeciesAsync(result.First); // show matching species } else if (!result.First.Any()) { await ReplyErrorAsync("The first species could not be determined."); } else { species1 = result.First.First(); } if (species1.IsValid()) { if (result.Second.Count() > 1) { await ReplyValidateSpeciesAsync(result.Second); // show matching species } else if (!result.Second.Any()) { if (!string.IsNullOrWhiteSpace(result.SuggestionHint)) { species2 = await GetSpeciesOrReplyAsync(result.SuggestionHint); } if (!species2.IsValid()) { await ReplyErrorAsync("The second species could not be determined."); } } else { species2 = result.Second.First(); } } if (species1.IsValid() && species2.IsValid()) { return(new SpeciesAmbiguityResolverResult(new ISpecies[] { species1 }, new ISpecies[] { species2 }, result.SuggestionHint, result.Extra)); } return(result); // not success }
public async Task RemovePrey(string arg0, string arg1, string arg2) { // We have the following possibilities: // <genusName> <speciesName> <preySpeciesName> // <speciesName> <preyGenusName> <preySpeciesName> ISpeciesAmbiguityResolverResult result = await ReplyResolveAmbiguityAsync(arg0, arg1, arg2); if (result.Success) { await ReplyRemovePreyAsync(result.First.First(), result.Second.First()); } }