diff --git a/locale/Messages.resx b/locale/Messages.resx index b701495..72ad974 100644 --- a/locale/Messages.resx +++ b/locale/Messages.resx @@ -168,7 +168,7 @@ <data name="CurrentSettings" xml:space="preserve"> <value>Current settings:</value> </data> - <data name="SettingsLang" xml:space="preserve"> + <data name="SettingsLanguage" xml:space="preserve"> <value>Language</value> </data> <data name="SettingsPrefix" xml:space="preserve"> @@ -561,4 +561,19 @@ <data name="SettingsRenameHoistedUsers" xml:space="preserve"> <value>Rename members who attempt to hoist themselves</value> </data> + <data name="Page" xml:space="preserve"> + <value>page</value> + </data> + <data name="PageNotFound" xml:space="preserve"> + <value>Page not found!</value> + </data> + <data name="PagesAllowed" xml:space="preserve"> + <value>There are total pages</value> + </data> + <data name="Next" xml:space="preserve"> + <value>Next</value> + </data> + <data name="Previous" xml:space="preserve"> + <value>Previous</value> + </data> </root> diff --git a/locale/Messages.ru.resx b/locale/Messages.ru.resx index 22bf3a9..1d703ed 100644 --- a/locale/Messages.ru.resx +++ b/locale/Messages.ru.resx @@ -165,7 +165,7 @@ <data name="CurrentSettings" xml:space="preserve"> <value>Текущие настройки:</value> </data> - <data name="SettingsLang" xml:space="preserve"> + <data name="SettingsLanguage" xml:space="preserve"> <value>Язык</value> </data> <data name="SettingsPrefix" xml:space="preserve"> @@ -433,8 +433,8 @@ <value>Я не смог найти этого пользователя ни в одном из серверов, в которых я есть. Проверь правильность ID и нахождение пользователя на этом сервере максимум 30 дней назад</value> </data> <data name="SettingsDefaultRole" xml:space="preserve"> - <value>Общая роль</value> - </data> + <value>Роль по умолчанию</value> + </data> <data name="CommandDescriptionRemind" xml:space="preserve"> <value>Добавляет напоминание</value> </data> @@ -561,4 +561,19 @@ <data name="SettingsRenameHoistedUsers" xml:space="preserve"> <value>Переименовывать участников, которые пытаются поднять себя</value> </data> + <data name="Page" xml:space="preserve"> + <value>страница</value> + </data> + <data name="PageNotFound" xml:space="preserve"> + <value>Страница не найдена!</value> + </data> + <data name="PagesAllowed" xml:space="preserve"> + <value>Всего страниц существует</value> + </data> + <data name="Next" xml:space="preserve"> + <value>Далее</value> + </data> + <data name="Previous" xml:space="preserve"> + <value>Назад</value> + </data> </root> diff --git a/locale/Messages.tt-ru.resx b/locale/Messages.tt-ru.resx index dca7f71..0fd4ebc 100644 --- a/locale/Messages.tt-ru.resx +++ b/locale/Messages.tt-ru.resx @@ -168,7 +168,7 @@ <data name="CurrentSettings" xml:space="preserve"> <value>настройки:</value> </data> - <data name="SettingsLang" xml:space="preserve"> + <data name="SettingsLanguage" xml:space="preserve"> <value>язык</value> </data> <data name="SettingsPrefix" xml:space="preserve"> @@ -561,4 +561,19 @@ <data name="SettingsRenameHoistedUsers" xml:space="preserve"> <value>переобувать шизоидов пытающихся поднять себя в табе</value> </data> + <data name="Page" xml:space="preserve"> + <value>это страница</value> + </data> + <data name="PageNotFound" xml:space="preserve"> + <value>если я был бы html, я бы сказал 404</value> + </data> + <data name="PagesAllowed" xml:space="preserve"> + <value>ну а если быть точнее, тут всего страниц</value> + </data> + <data name="Next" xml:space="preserve"> + <value>следующее</value> + </data> + <data name="Previous" xml:space="preserve"> + <value>предыдущее</value> + </data> </root> diff --git a/src/Commands/SettingsCommandGroup.cs b/src/Commands/SettingsCommandGroup.cs index c4ea21b..48d7b0d 100644 --- a/src/Commands/SettingsCommandGroup.cs +++ b/src/Commands/SettingsCommandGroup.cs @@ -68,7 +68,8 @@ public class SettingsCommandGroup : CommandGroup { [RequireDiscordPermission(DiscordPermission.ManageGuild)] [Description("Shows settings list for this server")] [UsedImplicitly] - public async Task<Result> ExecuteSettingsListAsync() { + public async Task<Result> 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")); @@ -80,23 +81,40 @@ public class SettingsCommandGroup : CommandGroup { var cfg = await _dataService.GetSettings(guildId, CancellationToken); Messages.Culture = GuildSettings.Language.Get(cfg); - return await SendSettingsListAsync(cfg, currentUser, CancellationToken); + return await SendSettingsListAsync(cfg, currentUser, page, CancellationToken); } - private async Task<Result> SendSettingsListAsync(JsonNode cfg, IUser currentUser, CancellationToken ct = default) { + private async Task<Result> 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)); + var footer = new StringBuilder(); + 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 */ } } + footer.Append($"{Messages.Page} {page}/{totalPages} "); + for (var i = 1; i <= totalPages; i++) footer.Append(i == page ? "●" : "○"); + var embed = new EmbedBuilder().WithSmallTitle(Messages.SettingsListTitle, currentUser) .WithDescription(builder.ToString()) .WithColour(ColorsList.Default) + .WithFooter(footer.ToString()) .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/Data/Options/BoolOption.cs b/src/Data/Options/BoolOption.cs index a8ee954..55b846e 100644 --- a/src/Data/Options/BoolOption.cs +++ b/src/Data/Options/BoolOption.cs @@ -19,12 +19,13 @@ public class BoolOption : Option<bool> { } private static bool TryParseBool(string from, out bool value) { + from = from.ToLower(); value = false; switch (from) { - case "1" or "y" or "yes" or "д" or "да": + case "true" or "1" or "y" or "yes" or "д" or "да": value = true; return true; - case "0" or "n" or "no" or "н" or "не" or "нет": + case "false" or "0" or "n" or "no" or "н" or "не" or "нет" or "нъет": value = false; return true; default: diff --git a/src/Messages.Designer.cs b/src/Messages.Designer.cs index 42a05be..1f6fbc7 100644 --- a/src/Messages.Designer.cs +++ b/src/Messages.Designer.cs @@ -947,5 +947,35 @@ 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); + } + } + + internal static string Next { + get { + return ResourceManager.GetString("Next", resourceCulture); + } + } + + internal static string Previous { + get { + return ResourceManager.GetString("Previous", resourceCulture); + } + } } }