示例#1
0
        public async Task Dictionary(CommandContext ctx, [RemainingText] string query)
        {
            if (string.IsNullOrWhiteSpace(query))
            {
                await BotServices.SendErrorEmbedAsync(ctx, ":warning: A word or phrase is required!");
            }
            else
            {
                var data = await DefinitionService.GetDefinitionForTermAsync(query);

                if (data.Results.Count == 0)
                {
                    await BotServices.SendErrorEmbedAsync(ctx, ":mag: No results found!");
                }
                else
                {
                    for (var index = 0; index < data.Results.Count; index++)
                    {
                        foreach (var value in data.Results[index].Senses)
                        {
                            if (value.Definition != null)
                            {
                                await ctx.TriggerTypingAsync();

                                var definition = value.Definition.ToString();
                                if (!(value.Definition is string))
                                {
                                    definition = ((JArray)JToken.Parse(value.Definition.ToString())).First.ToString();
                                }
                                var output = new DiscordEmbedBuilder()
                                             .WithTitle($"Dictionary definition for **{query}**")
                                             .WithDescription(definition.Length < 500 ? definition : definition.Take(500) + "...")
                                             .WithFooter("Type go for the next definition")
                                             .WithColor(DiscordColor.Blurple);
                                if (value.Examples != null)
                                {
                                    output.AddField("Example", value.Examples.First().text);
                                }
                                await ctx.RespondAsync(embed : output.Build());

                                var interactivity = await ctx.Client.GetInteractivity()
                                                    .WaitForMessageAsync(m => m.Channel.Id == ctx.Channel.Id && m.Content.ToLower() == "go", TimeSpan.FromSeconds(10));

                                if (interactivity != null)
                                {
                                    continue;
                                }
                                index = data.Results.Count;
                                break;
                            }
                        }
                    }
                }
            }
        }