Exemplo n.º 1
0
        private bool CheckAndParseReaction(SocketReaction reaction, out Emoji emoji, out PaginatedEmbed embed)
        {
            emoji = null;
            embed = null;

            // Message check
            if (!reaction.Message.IsSpecified || reaction.Message.Value.Author.IsUser() || reaction.Message.Value.Author.Id != DiscordClient.CurrentUser.Id)
            {
                return(false);
            }

            // Reaction check
            if (reaction.Emote is not Emoji _emoji)
            {
                return(false);
            }

            // Embed check
            if (reaction.Message.Value.Embeds.Count == 0 || !Embeds.TryGetValue(reaction.MessageId, out embed) || embed.ResponseFor.Id != reaction.UserId)
            {
                return(false);
            }

            emoji = _emoji;
            return(true);
        }
Exemplo n.º 2
0
        public async Task <RuntimeResult> ShowKinkOverlap(IUser otherUser)
        {
            var getUserKinksResult = await _kinks.GetUserKinksAsync(this.Context.User);

            if (!getUserKinksResult.IsSuccess)
            {
                return(getUserKinksResult.ToRuntimeResult());
            }

            var userKinks = getUserKinksResult.Entity;

            var getOtherUserKinksResult = await _kinks.GetUserKinksAsync(otherUser);

            if (!getOtherUserKinksResult.IsSuccess)
            {
                return(getOtherUserKinksResult.ToRuntimeResult());
            }

            var otherUserKinks = getOtherUserKinksResult.Entity;

            var overlap = userKinks.Intersect(otherUserKinks, new UserKinkOverlapEqualityComparer()).ToList();

            if (!overlap.Any())
            {
                return(RuntimeCommandResult.FromSuccess("You don't overlap anywhere."));
            }

            var kinkOverlapPages = _kinks.BuildKinkOverlapEmbeds(this.Context.User, otherUser, overlap);
            var paginatedMessage = new PaginatedEmbed(_feedback, _interactivity, this.Context.User)
                                   .WithPages(kinkOverlapPages);

            await _interactivity.SendPrivateInteractiveMessageAsync(this.Context, _feedback, paginatedMessage);

            return(RuntimeCommandResult.FromSuccess());
        }
Exemplo n.º 3
0
        public async Task GetCompleteEmoteInfoListAsync()
        {
            var fields = EmoteStats.GetAllValues(true, Context.Guild.Id, true)
                         .Where(o => Context.Guild.Emotes.Any(x => x.ToString() == o.EmoteID))
                         .Select(o => new EmbedFieldBuilder().WithName(o.GetRealId()).WithValue(o.GetFormatedInfo()))
                         .ToList();

            var pages = new List <PaginatedEmbedPage>();

            const int maxFieldsCount = EmbedBuilder.MaxFieldCount - 1;
            var       pagesCount     = Math.Ceiling((float)fields.Count / maxFieldsCount);

            for (int i = 0; i < pagesCount; i++)
            {
                var page = new PaginatedEmbedPage(null);
                page.AddFields(fields.Skip(i * maxFieldsCount).Take(maxFieldsCount));

                pages.Add(page);
            }

            var embed = new PaginatedEmbed()
            {
                Title       = "Kompletní statistika emotů",
                Pages       = pages,
                ResponseFor = Context.User
            };

            await SendPaginatedEmbedAsync(embed);
        }
Exemplo n.º 4
0
        public async Task ShowKinksByPreferenceAsync
        (
            IUser otherUser,
            [OverrideTypeReader(typeof(HumanizerEnumTypeReader <KinkPreference>))]
            KinkPreference preference
        )
        {
            var getUserKinksResult = await _kinks.GetUserKinksAsync(otherUser);

            if (!getUserKinksResult.IsSuccess)
            {
                await _feedback.SendErrorAsync(this.Context, getUserKinksResult.ErrorReason);

                return;
            }

            var userKinks = getUserKinksResult.Entity;

            var withPreference = userKinks.Where(k => k.Preference == preference).ToList();

            if (!withPreference.Any())
            {
                await _feedback.SendErrorAsync(this.Context, "The user doesn't have any kinks with that preference.");

                return;
            }

            var paginatedKinkPages = _kinks.BuildPaginatedUserKinkEmbeds(withPreference);
            var paginatedMessage   = new PaginatedEmbed(_feedback, _interactivity, this.Context.User)
                                     .WithPages(paginatedKinkPages);

            await _interactivity.SendPrivateInteractiveMessageAsync(this.Context, _feedback, paginatedMessage);
        }
Exemplo n.º 5
0
        private async Task <PaginatedEmbed> CreatePaginatedEmbedAsync(List <Reminder> reminders, bool full = false)
        {
            var embed = new PaginatedEmbed()
            {
                Pages       = new List <PaginatedEmbedPage>(),
                ResponseFor = Context.User,
                Title       = full ? "Upozornění" : "Moje upozornění"
            };

            var chunks = reminders.SplitInParts(EmbedBuilder.MaxFieldCount);

            foreach (var chunk in chunks)
            {
                var page = new PaginatedEmbedPage(null);

                foreach (var reminder in chunk)
                {
                    var title = await CreateFieldTitleAsync(reminder, full);

                    if (string.IsNullOrEmpty(title))
                    {
                        continue;
                    }

                    page.AddField(title, $"ID: {reminder.RemindID}\nZpráva: {reminder.Message}\nZa: {(reminder.At - DateTime.Now).ToFullCzechTimeString()}");
                }

                if (page.AnyField())
                {
                    embed.Pages.Add(page);
                }
            }

            return(embed);
        }
Exemplo n.º 6
0
        public async Task GetTodayBirthdayAsync()
        {
            using var service = GetService <BirthdayService>();
            var birthdayUsers = await service.Service.GetUsersWithTodayBirthdayAsync(Context.Guild);

            if (birthdayUsers.Count == 0)
            {
                await ReplyAsync("Dnes nemá nikdo narozeniny.");

                return;
            }

            var pages = new List <PaginatedEmbedPage>();

            foreach (var user in birthdayUsers)
            {
                var page = new PaginatedEmbedPage($"**{user.User.GetFullName()}**", thumbnail: user.User.GetUserAvatarUrl());

                if (user.Birthday.Value.Year > 1)
                {
                    page.AddField(new EmbedFieldBuilder().WithName("Věk").WithValue(user.Birthday.Value.ComputeDateAge()));
                }

                pages.Add(page);
            }

            var embed = new PaginatedEmbed()
            {
                Pages       = pages,
                ResponseFor = Context.User,
                Title       = "Dnes má narozeniny"
            };

            await SendPaginatedEmbedAsync(embed);
        }
Exemplo n.º 7
0
        protected async Task SendPaginatedEmbedAsync(PaginatedEmbed embed)
        {
            if (PaginationService == null)
            {
                throw new InvalidOperationException("Paginated embed requires PaginationService");
            }

            await PaginationService.SendPaginatedMessage(embed, async embed => await ReplyAsync(embed: embed));
        }
Exemplo n.º 8
0
        public async Task ShowAvailablePronounFamiliesAsync()
        {
            EmbedFieldBuilder CreatePronounField(IPronounProvider pronounProvider)
            {
                var ef = new EmbedFieldBuilder();

                ef.WithName(pronounProvider.Family);

                var value = $"{pronounProvider.GetSubjectForm()} ate {pronounProvider.GetPossessiveAdjectiveForm()} " +
                            $"pie that {pronounProvider.GetSubjectForm()} brought with " +
                            $"{pronounProvider.GetReflexiveForm()}.";

                value = value.Transform(To.SentenceCase);

                ef.WithValue($"*{value}*");

                return(ef);
            }

            var pronounProviders = _pronouns.GetAvailablePronounProviders().ToList();

            if (!pronounProviders.Any())
            {
                await _feedback.SendErrorAsync(this.Context, "There doesn't seem to be any pronouns available.");

                return;
            }

            var fields      = pronounProviders.Select(CreatePronounField);
            var description = "Each field below represents a pronoun that can be used with a character. The title of " +
                              "each field is the pronoun family that you use when selecting the pronoun, and below it" +
                              "is a short example of how it might be used.";

            var paginatedEmbedPages = PageFactory.FromFields
                                      (
                fields,
                description: description
                                      );

            var paginatedEmbed = new PaginatedEmbed(_feedback, _interactivity, this.Context.User).WithPages
                                 (
                paginatedEmbedPages.Select
                (
                    p => p.WithColor(Color.DarkPurple).WithTitle("Available pronouns")
                )
                                 );

            await _interactivity.SendInteractiveMessageAndDeleteAsync
            (
                this.Context.Channel,
                paginatedEmbed,
                TimeSpan.FromMinutes(5.0)
            );
        }
Exemplo n.º 9
0
        public async Task ShowServersStatsAsync()
        {
            var guilds = await this.Context.Client.GetGuildsAsync();

            var pages = guilds.Select(CreateGuildInfoEmbed);

            var paginatedMessage = new PaginatedEmbed(_feedback, _interactivity, this.Context.User).WithPages(pages);

            await _interactivity.SendPrivateInteractiveMessageAndDeleteAsync
            (
                this.Context,
                _feedback,
                paginatedMessage
            );
        }
Exemplo n.º 10
0
        public async Task SessionsListAsync()
        {
            var boosterSessions = Calculator.Sessions.Where(o => o.ForBooster);
            var otherSessions = Calculator.Sessions.Where(o => !o.ForBooster);

            var embed = new PaginatedEmbed()
            {
                Pages = new List<PaginatedEmbedPage>()
                {
                    RenderPage(boosterSessions, true),
                    RenderPage(otherSessions, false)
                },
                ResponseFor = Context.User,
                Title = "Výpočetní sessions"
            };

            await SendPaginatedEmbedAsync(embed);
        }
Exemplo n.º 11
0
        public async Task GetModulesAsync()
        {
            var moduleIdAttribute = typeof(ModuleIDAttribute);
            var unloadedModules   = GetUnloadedModules();
            var modulesChunk      = CommandService.Modules
                                    .SplitInParts(EmbedBuilder.MaxFieldCount);

            var pages = new List <PaginatedEmbedPage>();

            foreach (var chunk in modulesChunk)
            {
                var page = new PaginatedEmbedPage(null);

                foreach (var item in chunk)
                {
                    var attribute = item.Attributes.FirstOrDefault(o => o.GetType() == moduleIdAttribute) as ModuleIDAttribute;

                    var info = item.Name + (string.IsNullOrEmpty(item.Group) ? "" : $" ({item.Group})");
                    page.AddField(attribute.ID, info + (unloadedModules.Contains(attribute.ID) ? " - **Deaktivován**" : ""), false);
                }

                if (page.AnyField())
                {
                    pages.Add(page);
                }
            }

            if (pages.Count == 0)
            {
                await ReplyAsync("Nebyl nalezen žádný modul.");

                return;
            }

            var embed = new PaginatedEmbed()
            {
                Title       = "Seznam modulů",
                Pages       = pages,
                ResponseFor = Context.User,
                Thumbnail   = Context.Client.CurrentUser.GetUserAvatarUrl()
            };

            await SendPaginatedEmbedAsync(embed);
        }
Exemplo n.º 12
0
        public async Task TeamSearchInfoAsync()
        {
            var searches = await TeamSearchService.GetItemsAsync(Context.Channel.Id.ToString());

            if (searches.Count == 0)
            {
                await ReplyAsync("Zatím nikdo nic nehledá.");

                return;
            }

            var pages       = new List <PaginatedEmbedPage>();
            var currentPage = new List <EmbedFieldBuilder>();

            foreach (var search in searches)
            {
                var builder = new EmbedFieldBuilder()
                              .WithName($"**{search.ID}**  - **{search.ShortUsername}** v **{search.ChannelName}**")
                              .WithValue($"\"{search.Message}\" [Jump]({search.MessageLink})");

                currentPage.Add(builder);

                if (currentPage.Count == EmbedBuilder.MaxFieldCount)
                {
                    pages.Add(new PaginatedEmbedPage(null, new List <EmbedFieldBuilder>(currentPage)));
                    currentPage.Clear();
                }
            }

            if (currentPage.Count != 0)
            {
                pages.Add(new PaginatedEmbedPage(null, new List <EmbedFieldBuilder>(currentPage)));
            }

            var embed = new PaginatedEmbed()
            {
                Pages       = pages,
                ResponseFor = Context.User,
                Title       = $"Hledání v {Context.Channel.Name}"
            };

            await SendPaginatedEmbedAsync(embed);
        }
Exemplo n.º 13
0
        public async Task <RuntimeResult> ShowAutoroleAsync(AutoroleConfiguration autorole)
        {
            var paginatedEmbed = new PaginatedEmbed(_feedback, _interactivity, this.Context.User)
            {
                Appearance = PaginatedAppearanceOptions.Default
            };

            var baseEmbed = paginatedEmbed.Appearance.CreateEmbedBase()
                            .WithTitle("Autorole Configuration")
                            .WithDescription(MentionUtils.MentionRole((ulong)autorole.DiscordRoleID))
                            .AddField("Requires confirmation", autorole.RequiresConfirmation, true)
                            .AddField("Is enabled", autorole.IsEnabled, true);

            if (!autorole.Conditions.Any())
            {
                baseEmbed.AddField("Conditions", "No conditions");
                baseEmbed.Footer = null;

                await _feedback.SendEmbedAsync(this.Context.Channel, baseEmbed.Build());

                return(RuntimeCommandResult.FromSuccess());
            }

            var conditionFields = autorole.Conditions.Select
                                  (
                c => new EmbedFieldBuilder()
                .WithName($"Condition #{autorole.Conditions.IndexOf(c)} (ID {c.ID})")
                .WithValue(c.GetDescriptiveUIText())
                                  );

            var pages = PageFactory.FromFields(conditionFields, pageBase: baseEmbed);

            paginatedEmbed.WithPages(pages);

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

            return(RuntimeCommandResult.FromSuccess());
        }
Exemplo n.º 14
0
        private async Task PrintSearchesAsync(List <TeamSearchItem> searches, bool allChannels = false)
        {
            if (searches.Count == 0)
            {
                await ReplyAsync("Zatím nikdo nic nehledá.");

                return;
            }

            var pages       = new List <PaginatedEmbedPage>();
            var currentPage = new List <EmbedFieldBuilder>();

            foreach (var search in searches)
            {
                var builder = new EmbedFieldBuilder()
                              .WithName($"**{search.ID}**  - **{search.ShortUsername}**{(allChannels ? $" v **{search.ChannelName}**" : "")}")
                              .WithValue($"\"{search.Message}\" [Jump]({search.MessageLink})");

                currentPage.Add(builder);

                if (currentPage.Count == 10)
                {
                    pages.Add(new PaginatedEmbedPage(null, new List <EmbedFieldBuilder>(currentPage)));
                    currentPage.Clear();
                }
            }

            if (currentPage.Count != 0)
            {
                pages.Add(new PaginatedEmbedPage(null, new List <EmbedFieldBuilder>(currentPage)));
            }

            var embed = new PaginatedEmbed()
            {
                Pages       = pages,
                ResponseFor = Context.User,
                Title       = allChannels ? "Hledání" : $"Hledání v {Context.Channel.Name}"
            };

            await SendPaginatedEmbedAsync(embed);
        }
Exemplo n.º 15
0
        public async Task ListItemsAsync()
        {
            using var service = GetService <AutoReplyService>();
            var data = service.Service.GetList(Context.Guild);

            if (data.Count == 0)
            {
                await ReplyAsync("Ještě nejsou uloženy žádné odpovědi.");

                return;
            }

            var pages = new List <PaginatedEmbedPage>();

            foreach (var item in data)
            {
                var page = new PaginatedEmbedPage($"**{item.ID} - {item.MustContains}**");

                var builder = new EmbedFieldBuilder()
                              .WithName($"Odpověď: {item.Reply}")
                              .WithValue(string.Join("\n", new[] {
                    $"Status: {(item.IsActive ? "Aktivní" : "Neaktivní")}",
                    $"Metoda: {item.CompareType}",
                    $"Počet použití: {item.CallsCount.FormatWithSpaces()}",
                    $"Case sensitive: {(item.CaseSensitive ? "Ano" : "Ne")}",
                    $"Kanál: {item.Channel}"
                }));

                page.AddField(builder);
                pages.Add(page);
            }

            var embed = new PaginatedEmbed()
            {
                Title       = "Automatické odpovědi",
                ResponseFor = Context.User,
                Pages       = pages
            };

            await SendPaginatedEmbedAsync(embed);
        }
Exemplo n.º 16
0
        public async Task GetCompleteRoleListAsync()
        {
            var chunks = Context.Guild.Roles
                         .Where(o => !o.IsEveryone)
                         .OrderByDescending(o => o.Position)
                         .Select(o => new EmbedFieldBuilder().WithName(o.Name).WithValue(CreateRoleInfo(o, false)))
                         .SplitInParts(EmbedBuilder.MaxEmbedLength)
                         .ToList();

            var highestRoleWithColor = Context.Guild.Roles.FindHighestRoleWithColor();

            var paginatedEmbed = new PaginatedEmbed()
            {
                Color       = highestRoleWithColor?.Color ?? Color.Blue,
                Pages       = chunks.ConvertAll(ch => new PaginatedEmbedPage(null, ch.ToList())),
                Thumbnail   = Context.Guild.IconUrl,
                Title       = "Informace o rolích",
                ResponseFor = Context.User
            };

            await SendPaginatedEmbedAsync(paginatedEmbed);
        }
Exemplo n.º 17
0
        public async Task GetAccessListAsync(IUser user)
        {
            var guildUser = user as SocketGuildUser;
            await Context.Guild.SyncGuildAsync();

            var textChannels = Context.Guild.TextChannels
                               .OrderBy(o => o.Position)
                               .Where(o => o.HaveAccess(guildUser))
                               .GroupBy(o => o.Category?.Name ?? "Neznámá kategorie")
                               .Select(o => new { Category = o.Key, Channels = o.SplitInParts(30).Select(x => x.Select(t => $"<#{t.Id}>")) });

            var voiceChannels = Context.Guild.VoiceChannels
                                .OrderBy(o => o.Position)
                                .Where(o => o.HaveAccess(guildUser))
                                .GroupBy(o => o.Category?.Name ?? "Neznámá kategorie")
                                .Select(o => new { Category = o.Key, Channels = o.SplitInParts(30).Select(x => x.Select(t => $"<#{t.Id}>")) });

            var finalList = textChannels.ToList();

            finalList.AddRange(voiceChannels);

            var pages = finalList.SplitInParts(10).Select(o =>
            {
                var fields = o.SelectMany(x => x.Channels.Select(t => new EmbedFieldBuilder().WithName(x.Category).WithValue(string.Join(", ", t)))).ToList();
                return(new PaginatedEmbedPage(null, fields));
            });

            var embed = new PaginatedEmbed()
            {
                Color       = guildUser.Roles.FindHighestRoleWithColor()?.Color,
                Pages       = pages.ToList(),
                ResponseFor = Context.User,
                Thumbnail   = user.GetUserAvatarUrl(),
                Title       = $"Seznam přístupů uživatele {user.GetFullName()}"
            };

            await SendPaginatedEmbedAsync(embed);
        }
Exemplo n.º 18
0
        public async Task ShowKinkOverlap([NotNull] IUser otherUser)
        {
            var getUserKinksResult = await _kinks.GetUserKinksAsync(this.Context.User);

            if (!getUserKinksResult.IsSuccess)
            {
                await _feedback.SendErrorAsync(this.Context, getUserKinksResult.ErrorReason);

                return;
            }

            var userKinks = getUserKinksResult.Entity;

            var getOtherUserKinksResult = await _kinks.GetUserKinksAsync(otherUser);

            if (!getOtherUserKinksResult.IsSuccess)
            {
                await _feedback.SendErrorAsync(this.Context, getOtherUserKinksResult.ErrorReason);

                return;
            }

            var otherUserKinks = getOtherUserKinksResult.Entity;

            var overlap = userKinks.Intersect(otherUserKinks, new UserKinkOverlapEqualityComparer()).ToList();

            if (!overlap.Any())
            {
                await _feedback.SendErrorAsync(this.Context, "You don't overlap anywhere.");

                return;
            }

            var kinkOverlapPages = _kinks.BuildKinkOverlapEmbeds(this.Context.User, otherUser, overlap);
            var paginatedMessage = new PaginatedEmbed(_feedback, this.Context.User).WithPages(kinkOverlapPages);

            await _interactivity.SendPrivateInteractiveMessageAsync(this.Context, _feedback, paginatedMessage);
        }
Exemplo n.º 19
0
        public async Task ListMethodsAsync()
        {
            var embed = new PaginatedEmbed()
            {
                Pages       = new List <PaginatedEmbedPage>(),
                ResponseFor = Context.User,
                Thumbnail   = Context.Client.CurrentUser.GetUserAvatarUrl(),
                Title       = "Konfigurace metod"
            };

            using var service = GetService <IGrillBotRepository>();
            var methods = await service.Service.ConfigRepository.GetAllMethods(Context.Guild.Id, true).ToListAsync();

            foreach (var group in methods.GroupBy(o => o.Group))
            {
                var page = new PaginatedEmbedPage(null);

                foreach (var method in group)
                {
                    var value = string.Join("\n", new[]
                    {
                        $"ID: **{method.ID}**",
                        $"Počet oprávnění: **{method.Permissions.Count.FormatWithSpaces()}**",
                        $"Počet použití: **{method.UsedCount.FormatWithSpaces()}**"
                    });

                    page.AddField($"{method.Group}/{method.Command}", value);
                }

                if (page.AnyField())
                {
                    embed.Pages.Add(page);
                }
            }

            await SendPaginatedEmbedAsync(embed);
        }
Exemplo n.º 20
0
        public async Task SendPaginatedMessage(PaginatedEmbed embed, Func <Embed, Task <IUserMessage> > replyAsync)
        {
            var embedData = embed.RenderEmbed();
            var message   = await replyAsync(embedData);

            if (embed.Pages.Count > 1)
            {
                if (embed.Pages.Count > 2)
                {
                    await message.AddReactionAsync(FirstPageEmoji);
                }

                await message.AddReactionAsync(PrevPageEmoji);

                await message.AddReactionAsync(NextPageEmoji);

                if (embed.Pages.Count > 2)
                {
                    await message.AddReactionAsync(LastPageEmoji);
                }

                AddEmbed(message, embed);
            }
        }
Exemplo n.º 21
0
        public async Task ListUnverifyAsync()
        {
            var users = await UnverifyService.ListPersonsAsync(Context.Guild);

            if (users.Count == 0)
            {
                await ReplyAsync("Nikdo zatím nemá odebraný přístup.");

                return;
            }

            var pages = new List <PaginatedEmbedPage>();

            foreach (var user in users)
            {
                var page = new PaginatedEmbedPage($"**{user.Username}**");

                page.AddField(new EmbedFieldBuilder().WithName("ID").WithValue(user.ID));
                page.AddField(new EmbedFieldBuilder().WithName("Do kdy").WithValue(user.EndDateTime.ToLocaleDatetime()));
                page.AddField(new EmbedFieldBuilder().WithName("Role").WithValue(string.Join(", ", user.Roles)));
                page.AddField(new EmbedFieldBuilder().WithName("Extra kanály").WithValue(user.ChannelOverrideList));
                page.AddField(new EmbedFieldBuilder().WithName("Důvod").WithValue(user.Reason));

                pages.Add(page);
            }

            var embed = new PaginatedEmbed()
            {
                Title       = "Seznam osob s odebraným přístupem",
                Pages       = pages,
                ResponseFor = Context.User,
                Thumbnail   = Context.Client.CurrentUser.GetUserAvatarUrl()
            };

            await SendPaginatedEmbedAsync(embed);
        }
Exemplo n.º 22
0
        public async Task SendPaginatedMessage(PaginatedEmbed embed, Func <Embed, Task <IUserMessage> > replyAsync)
        {
            var embedData = embed.RenderEmbed();
            var message   = await replyAsync(embedData);

            if (embed.Pages.Count > 1)
            {
                if (embed.Pages.Count > 2)
                {
                    await message.AddReactionAsync(EmojiHelper.TrackPrevious);
                }

                await message.AddReactionAsync(EmojiHelper.ArrowBackward);

                await message.AddReactionAsync(EmojiHelper.ArrowForward);

                if (embed.Pages.Count > 2)
                {
                    await message.AddReactionAsync(EmojiHelper.TrackNext);
                }

                AddEmbed(message, embed);
            }
        }
Exemplo n.º 23
0
 public void AddEmbed(IMessage message, PaginatedEmbed embed)
 {
     Embeds.Add(message.Id, embed);
 }
Exemplo n.º 24
0
        public async Task ListUnverifyAsync()
        {
            using var service = GetService <UnverifyService>();
            var profiles = await service.Service.GetCurrentUnverifies(Context.Guild);

            if (profiles.Count == 0)
            {
                await ReplyAsync("Nikdo zatím nemá odebraný přístup.");

                return;
            }

            var pages = new List <PaginatedEmbedPage>();

            foreach (var profile in profiles.Select(o => o.Profile))
            {
                var page = new PaginatedEmbedPage($"**{profile.DestinationUser.GetFullName()}**", thumbnail: profile.DestinationUser.GetUserAvatarUrl());

                page.AddField("ID", profile.DestinationUser.Id.ToString());
                page.AddField("Začátek", profile.StartDateTime.ToLocaleDatetime(), true);
                page.AddField("Konec", profile.EndDateTime.ToLocaleDatetime(), true);
                page.AddField("Končí za", (profile.EndDateTime - DateTime.Now).ToFullCzechTimeString(), true);

                if (profile.RolesToKeep.Count > 0)
                {
                    foreach (var chunk in profile.RolesToKeep.Select(o => o.Mention).SplitInParts(40))
                    {
                        page.AddField("Ponechané role", string.Join(", ", chunk));
                    }
                }

                if (profile.RolesToRemove.Count > 0)
                {
                    foreach (var chunk in profile.RolesToRemove.Select(o => o.Mention).SplitInParts(40))
                    {
                        page.AddField("Odebrané role", string.Join(", ", chunk));
                    }
                }

                if (profile.ChannelsToKeep.Count > 0)
                {
                    foreach (var chunk in profile.ChannelsToKeep.Select(o => $"<#{o.Channel.Id}>").SplitInParts(40))
                    {
                        page.AddField("Ponechané kanály", string.Join(", ", chunk));
                    }
                }

                if (profile.ChannelsToRemove.Count > 0)
                {
                    foreach (var chunk in profile.ChannelsToRemove.Select(o => $"<#{o.Channel.Id}>").SplitInParts(40))
                    {
                        page.AddField("Odebrané kanály", string.Join(", ", chunk));
                    }
                }

                page.AddField("Důvod", profile.Reason);
                pages.Add(page);
            }

            var embed = new PaginatedEmbed()
            {
                Title       = "Seznam osob s odebraným přístupem",
                Pages       = pages,
                ResponseFor = Context.User,
                Thumbnail   = Context.Client.CurrentUser.GetUserAvatarUrl()
            };

            await SendPaginatedEmbedAsync(embed);
        }