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);
+ }
+ }
}
}