public async Task <RuntimeResult> ListWarningsAsync(IGuildUser user)
        {
            var warnings = await _warnings.GetWarningsAsync(user);

            var appearance = PaginatedAppearanceOptions.Default;

            appearance.Title = "Warnings";
            appearance.Color = Color.Orange;

            var paginatedEmbed = await PaginatedEmbedFactory.PagesFromCollectionAsync
                                 (
                _feedback,
                _interactivity,
                this.Context.User,
                warnings,
                async (eb, warning) =>
            {
                eb.WithTitle($"Warning #{warning.ID} for {user.Username}:{user.Discriminator}");

                var author = await this.Context.Guild.GetUserAsync((ulong)warning.Author.DiscordID);
                eb.WithAuthor(author);

                eb.WithDescription(warning.Reason);

                eb.AddField("Created", warning.CreatedAt);

                if (warning.CreatedAt != warning.UpdatedAt)
                {
                    eb.AddField("Last Updated", warning.UpdatedAt);
                }

                if (warning.IsTemporary)
                {
                    eb.AddField("Expires On", warning.ExpiresOn);
                }

                if (!(warning.MessageID is null))
                {
                    // TODO
                }
            },
                appearance : appearance
                                 );

            await _interactivity.SendInteractiveMessageAndDeleteAsync
            (
                this.Context.Channel,
                paginatedEmbed,
                TimeSpan.FromMinutes(5)
            );

            return(RuntimeCommandResult.FromSuccess());
        }
    public async Task <IResult> ListWarningsAsync(IUser user)
    {
        var warnings = await _warnings.GetWarningsAsync(_context.GuildID.Value, user.ID);

        var createPages = await PaginatedEmbedFactory.PagesFromCollectionAsync
                          (
            warnings,
            async warning =>
        {
            var getAuthor = await _userAPI.GetUserAsync(warning.Author.DiscordID);
            if (!getAuthor.IsSuccess)
            {
                return(Result <Embed> .FromError(getAuthor));
            }

            var author = getAuthor.Entity;

            var getAuthorAvatar = CDN.GetUserAvatarUrl(author);

            var embedFields = new List <EmbedField>();
            var eb          = new Embed
            {
                Title  = $"Warning #{warning.ID} for {user.Username}:{user.Discriminator}",
                Colour = Color.Orange,
                Author = new EmbedAuthor(author.Username)
                {
                    IconUrl = getAuthorAvatar.IsSuccess
                            ? getAuthorAvatar.Entity.ToString()
                            : default(Optional <string>)
                },
                Description = warning.Reason,
                Fields      = embedFields
            };

            embedFields.Add(new EmbedField("Created", warning.CreatedAt.Humanize()));

            if (warning.CreatedAt != warning.UpdatedAt)
            {
                embedFields.Add(new EmbedField("Last Updated", warning.UpdatedAt.Humanize()));
            }

            if (warning.ExpiresOn.HasValue)
            {
                embedFields.Add(new EmbedField("Expires On", warning.ExpiresOn.Humanize()));
            }

            return(eb);
        }
                          );

        if (createPages.Any(p => !p.IsSuccess))
        {
            return(createPages.First(p => !p.IsSuccess));
        }

        var pages = createPages.Select(p => p.Entity).ToList();

        return((Result)await _feedback.SendContextualPaginatedMessageAsync
               (
                   _context.User.ID,
                   pages,
                   ct : this.CancellationToken
               ));
    }