From a58e1cf75fd790b33b2f298615be061cd8bb6a63 Mon Sep 17 00:00:00 2001 From: mctaylors <95250141+mctaylors@users.noreply.github.com> Date: Sun, 23 Jul 2023 22:45:05 +0300 Subject: [PATCH] /settingslist now has pages --- locale/Messages.resx | 11 +++++++++- locale/Messages.ru.resx | 15 +++++++++++--- locale/Messages.tt-ru.resx | 11 +++++++++- src/Commands/SettingsCommandGroup.cs | 31 ++++++++++++++++++++-------- src/Messages.Designer.cs | 18 ++++++++++++++++ 5 files changed, 72 insertions(+), 14 deletions(-) diff --git a/locale/Messages.resx b/locale/Messages.resx index c2988e0..877d5a4 100644 --- a/locale/Messages.resx +++ b/locale/Messages.resx @@ -168,7 +168,7 @@ Current settings: - + Language @@ -558,4 +558,13 @@ is now + + page + + + Page not found! + + + There are total pages + diff --git a/locale/Messages.ru.resx b/locale/Messages.ru.resx index 2173cb0..add0e94 100644 --- a/locale/Messages.ru.resx +++ b/locale/Messages.ru.resx @@ -165,7 +165,7 @@ Текущие настройки: - + Язык @@ -433,8 +433,8 @@ Я не смог найти этого пользователя ни в одном из серверов, в которых я есть. Проверь правильность ID и нахождение пользователя на этом сервере максимум 30 дней назад - Общая роль - + Роль по умолчанию + Добавляет напоминание @@ -558,4 +558,13 @@ теперь имеет значение + + страница + + + Страница не найдена! + + + Всего страниц существует + diff --git a/locale/Messages.tt-ru.resx b/locale/Messages.tt-ru.resx index 6e5666c..72ea91f 100644 --- a/locale/Messages.tt-ru.resx +++ b/locale/Messages.tt-ru.resx @@ -168,7 +168,7 @@ настройки: - + язык @@ -558,4 +558,13 @@ стало + + это страница + + + если я был бы html, я бы сказал 404 + + + ну а если быть точнее, тут всего страниц + diff --git a/src/Commands/SettingsCommandGroup.cs b/src/Commands/SettingsCommandGroup.cs index 741f10e..c8cbd27 100644 --- a/src/Commands/SettingsCommandGroup.cs +++ b/src/Commands/SettingsCommandGroup.cs @@ -67,7 +67,8 @@ public class SettingsCommandGroup : CommandGroup { [RequireDiscordPermission(DiscordPermission.ManageGuild)] [Description("Shows settings list for this server")] [UsedImplicitly] - public async Task ExecuteSettingsListAsync() { + public async Task ExecuteSettingsListAsync( + [Description("Settings list page")] int page) { if (!_context.TryGetContextIDs(out var guildId, out _, out _)) return Result.FromError( new ArgumentNullError(nameof(_context), "Unable to retrieve necessary IDs from command context")); @@ -79,23 +80,35 @@ public class SettingsCommandGroup : CommandGroup { var cfg = await _dataService.GetSettings(guildId.Value, CancellationToken); Messages.Culture = GuildSettings.Language.Get(cfg); - return await SendSettingsListAsync(cfg, currentUser, CancellationToken); + return await SendSettingsListAsync(cfg, currentUser, page, CancellationToken); } - private async Task SendSettingsListAsync(JsonNode cfg, IUser currentUser, CancellationToken ct = default) { + private async Task SendSettingsListAsync(JsonNode cfg, IUser currentUser, int page, CancellationToken ct = default) { var builder = new StringBuilder(); - - foreach (var option in AllOptions) { - builder.Append(Markdown.InlineCode(option.Name)) - .Append(": "); - builder.AppendLine(option.Display(cfg)); + const int optionsPerList = 7; + var totalPages = (AllOptions.Length + optionsPerList - 1)/optionsPerList; + for (var i = optionsPerList * page - optionsPerList; i <= optionsPerList * page - 1; i++) { + try { + builder.AppendLine($"Settings{AllOptions[i].Name}".Localized()) + .Append(Markdown.InlineCode(AllOptions[i].Name)) + .Append(": ") + .AppendLine(AllOptions[i].Display(cfg)) + .AppendLine(); + } catch { /* hilariously ignored */ } } - var embed = new EmbedBuilder().WithSmallTitle(Messages.SettingsListTitle, currentUser) .WithDescription(builder.ToString()) .WithColour(ColorsList.Default) + .WithFooter($"{Messages.Page}: {page}/{totalPages}") .Build(); + if (optionsPerList * page - optionsPerList >= AllOptions.Length) { + embed = new EmbedBuilder().WithSmallTitle(Messages.PageNotFound, currentUser) + .WithDescription($"{Messages.PagesAllowed}: {Markdown.Bold(totalPages.ToString())}") + .WithColour(ColorsList.Red) + .Build(); + } + return await _feedbackService.SendContextualEmbedResultAsync(embed, ct); } diff --git a/src/Messages.Designer.cs b/src/Messages.Designer.cs index 42a05be..8d67b66 100644 --- a/src/Messages.Designer.cs +++ b/src/Messages.Designer.cs @@ -947,5 +947,23 @@ namespace Boyfriend { return ResourceManager.GetString("SettingIsNow", resourceCulture); } } + + internal static string Page { + get { + return ResourceManager.GetString("Page", resourceCulture); + } + } + + internal static string PageNotFound { + get { + return ResourceManager.GetString("PageNotFound", resourceCulture); + } + } + + internal static string PagesAllowed { + get { + return ResourceManager.GetString("PagesAllowed", resourceCulture); + } + } } }