1
0
Fork 1
mirror of https://github.com/TeamOctolings/Octobot.git synced 2025-04-20 00:43:36 +03:00

Add /resetsettings

Co-authored-by: Octol1ttle <l1ttleofficial@outlook.com>
Signed-off-by: Macintosh II <mctaylxrs@outlook.com>
This commit is contained in:
Macintxsh 2023-09-22 19:10:34 +03:00
parent 81099fad4c
commit 351b76b719
Signed by: mctaylors
GPG key ID: 361D326747B61E65
7 changed files with 100 additions and 1 deletions

View file

@ -594,4 +594,10 @@
<data name="NoRemindersFound" xml:space="preserve"> <data name="NoRemindersFound" xml:space="preserve">
<value>You don't have any reminders created!</value> <value>You don't have any reminders created!</value>
</data> </data>
<data name="SettingsResetOptional" xml:space="preserve">
<value>{0} setting has been reset</value>
</data>
<data name="SettingsReset" xml:space="preserve">
<value>All settings have been reset</value>
</data>
</root> </root>

View file

@ -594,4 +594,10 @@
<data name="NoRemindersFound" xml:space="preserve"> <data name="NoRemindersFound" xml:space="preserve">
<value>У вас нет созданных напоминаний!</value> <value>У вас нет созданных напоминаний!</value>
</data> </data>
<data name="SettingsResetOptional" xml:space="preserve">
<value>Настройка {0} сброшена</value>
</data>
<data name="SettingsReset" xml:space="preserve">
<value>Все настройки были сброшены</value>
</data>
</root> </root>

View file

@ -594,4 +594,10 @@
<data name="NoRemindersFound" xml:space="preserve"> <data name="NoRemindersFound" xml:space="preserve">
<value>ты еще не крафтил напоминалки</value> <value>ты еще не крафтил напоминалки</value>
</data> </data>
<data name="SettingsResetOptional" xml:space="preserve">
<value>{0} откачен к заводским</value>
</data>
<data name="SettingsReset" xml:space="preserve">
<value>откатываемся к заводским...</value>
</data>
</root> </root>

View file

@ -229,4 +229,69 @@ public class SettingsCommandGroup : CommandGroup
return await _feedback.SendContextualEmbedResultAsync(embed, ct); return await _feedback.SendContextualEmbedResultAsync(embed, ct);
} }
/// <summary>
/// A slash command that resets per-guild GuildSettings.
/// </summary>
/// <param name="setting">The setting to reset.</param>
/// <returns>A feedback sending result which may have succeeded.</returns>
[Command("resetsettings")]
[DiscordDefaultMemberPermissions(DiscordPermission.ManageGuild)]
[DiscordDefaultDMPermission(false)]
[RequireContext(ChannelContext.Guild)]
[RequireDiscordPermission(DiscordPermission.ManageGuild)]
[Description("Reset settings for this server")]
[UsedImplicitly]
public async Task<Result> 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<Result> 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<Result> 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);
}
} }

View file

@ -8,4 +8,9 @@ public interface IOption
string Name { get; } string Name { get; }
string Display(JsonNode settings); string Display(JsonNode settings);
Result Set(JsonNode settings, string from); Result Set(JsonNode settings, string from);
public void Reset(JsonNode settings)
{
settings[Name] = null;
}
} }

View file

@ -1001,5 +1001,17 @@ namespace Boyfriend {
return ResourceManager.GetString("NoRemindersFound", resourceCulture); 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);
}
}
} }
} }

View file

@ -44,7 +44,6 @@ public sealed class GuildDataService : IHostedService
public async Task SaveAsync(CancellationToken ct) public async Task SaveAsync(CancellationToken ct)
{ {
_logger.LogInformation("Saving guild data...");
var tasks = new List<Task>(); var tasks = new List<Task>();
var datas = _datas.Values.ToArray(); var datas = _datas.Values.ToArray();
foreach (var data in datas) foreach (var data in datas)