Exemplo n.º 1
0
        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);
                }
            }
        }
Exemplo n.º 2
0
        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);
            }
        }
Exemplo n.º 3
0
        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
        }
Exemplo n.º 4
0
        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());
            }
        }