diff --git a/locale/Messages.resx b/locale/Messages.resx
index 82392a8..a8d6eea 100644
--- a/locale/Messages.resx
+++ b/locale/Messages.resx
@@ -594,4 +594,10 @@
You don't have any reminders created!
+
+ {0} setting has been reset
+
+
+ All settings have been reset
+
diff --git a/locale/Messages.ru.resx b/locale/Messages.ru.resx
index 7b5b3d4..7f6b382 100644
--- a/locale/Messages.ru.resx
+++ b/locale/Messages.ru.resx
@@ -594,4 +594,10 @@
У вас нет созданных напоминаний!
+
+ Настройка {0} сброшена
+
+
+ Все настройки были сброшены
+
diff --git a/locale/Messages.tt-ru.resx b/locale/Messages.tt-ru.resx
index bb8c204..6b8ae5b 100644
--- a/locale/Messages.tt-ru.resx
+++ b/locale/Messages.tt-ru.resx
@@ -594,4 +594,10 @@
ты еще не крафтил напоминалки
+
+ {0} откачен к заводским
+
+
+ откатываемся к заводским...
+
diff --git a/src/Commands/SettingsCommandGroup.cs b/src/Commands/SettingsCommandGroup.cs
index dcb0a5f..c5fd6ac 100644
--- a/src/Commands/SettingsCommandGroup.cs
+++ b/src/Commands/SettingsCommandGroup.cs
@@ -229,4 +229,69 @@ public class SettingsCommandGroup : CommandGroup
return await _feedback.SendContextualEmbedResultAsync(embed, ct);
}
+
+ ///
+ /// A slash command that resets per-guild GuildSettings.
+ ///
+ /// The setting to reset.
+ /// A feedback sending result which may have succeeded.
+ [Command("resetsettings")]
+ [DiscordDefaultMemberPermissions(DiscordPermission.ManageGuild)]
+ [DiscordDefaultDMPermission(false)]
+ [RequireContext(ChannelContext.Guild)]
+ [RequireDiscordPermission(DiscordPermission.ManageGuild)]
+ [Description("Reset settings for this server")]
+ [UsedImplicitly]
+ public async Task ExecuteResetSettingsAsync(
+ [Description("Setting to reset")] AllOptionsEnum? setting = null)
+ {
+ if (!_context.TryGetContextIDs(out var guildId, out _, out _))
+ {
+ return new ArgumentInvalidError(nameof(_context), "Unable to retrieve necessary IDs from command context");
+ }
+
+ var currentUserResult = await _userApi.GetCurrentUserAsync(CancellationToken);
+ if (!currentUserResult.IsDefined(out var currentUser))
+ {
+ return Result.FromError(currentUserResult);
+ }
+
+ var cfg = await _guildData.GetSettings(guildId, CancellationToken);
+ Messages.Culture = GuildSettings.Language.Get(cfg);
+
+ if (setting is not null)
+ {
+ return await ResetSettingAsync(cfg, currentUser, AllOptions[(int)setting], CancellationToken);
+ }
+
+ return await ResetAllSettingsAsync(cfg, currentUser, CancellationToken);
+ }
+
+ private async Task ResetSettingAsync(JsonNode cfg, IUser currentUser,
+ IOption option, CancellationToken ct = default)
+ {
+ option.Reset(cfg);
+
+ var embed = new EmbedBuilder().WithSmallTitle(
+ string.Format(Messages.SettingsResetOptional, option.Name), currentUser)
+ .WithColour(ColorsList.Green)
+ .Build();
+
+ return await _feedback.SendContextualEmbedResultAsync(embed, ct);
+ }
+
+ private async Task ResetAllSettingsAsync(JsonNode cfg, IUser currentUser,
+ CancellationToken ct = default)
+ {
+ foreach (var option in AllOptions)
+ {
+ option.Reset(cfg);
+ }
+
+ var embed = new EmbedBuilder().WithSmallTitle(Messages.SettingsReset, currentUser)
+ .WithColour(ColorsList.Green)
+ .Build();
+
+ return await _feedback.SendContextualEmbedResultAsync(embed, ct);
+ }
}
diff --git a/src/Data/Options/IOption.cs b/src/Data/Options/IOption.cs
index 6f435e5..1ddf5f8 100644
--- a/src/Data/Options/IOption.cs
+++ b/src/Data/Options/IOption.cs
@@ -8,4 +8,9 @@ public interface IOption
string Name { get; }
string Display(JsonNode settings);
Result Set(JsonNode settings, string from);
+
+ public void Reset(JsonNode settings)
+ {
+ settings[Name] = null;
+ }
}
diff --git a/src/Messages.Designer.cs b/src/Messages.Designer.cs
index 0fee435..b65c668 100644
--- a/src/Messages.Designer.cs
+++ b/src/Messages.Designer.cs
@@ -1001,5 +1001,17 @@ namespace Boyfriend {
return ResourceManager.GetString("NoRemindersFound", resourceCulture);
}
}
+
+ internal static string SettingsReset {
+ get {
+ return ResourceManager.GetString("SettingsReset", resourceCulture);
+ }
+ }
+
+ internal static string SettingsResetOptional {
+ get {
+ return ResourceManager.GetString("SettingsResetOptional", resourceCulture);
+ }
+ }
}
}
diff --git a/src/Services/GuildDataService.cs b/src/Services/GuildDataService.cs
index e3c0b96..b07755d 100644
--- a/src/Services/GuildDataService.cs
+++ b/src/Services/GuildDataService.cs
@@ -44,7 +44,6 @@ public sealed class GuildDataService : IHostedService
public async Task SaveAsync(CancellationToken ct)
{
- _logger.LogInformation("Saving guild data...");
var tasks = new List();
var datas = _datas.Values.ToArray();
foreach (var data in datas)