diff --git a/src/Commands/SettingsCommandGroup.cs b/src/Commands/SettingsCommandGroup.cs
index fab90c4..dcb0a5f 100644
--- a/src/Commands/SettingsCommandGroup.cs
+++ b/src/Commands/SettingsCommandGroup.cs
@@ -26,6 +26,13 @@ namespace Boyfriend.Commands;
[UsedImplicitly]
public class SettingsCommandGroup : CommandGroup
{
+ ///
+ /// Represents all options as an array of objects implementing .
+ ///
+ ///
+ /// WARNING: If you update this array in any way, you must also update and make sure
+ /// that the orders match.
+ ///
private static readonly IOption[] AllOptions =
{
GuildSettings.Language,
@@ -158,7 +165,7 @@ public class SettingsCommandGroup : CommandGroup
[UsedImplicitly]
public async Task ExecuteEditSettingsAsync(
[Description("The setting whose value you want to change")]
- string setting,
+ AllOptionsEnum setting,
[Description("Setting value")] string value)
{
if (!_context.TryGetContextIDs(out var guildId, out var channelId, out var userId))
@@ -181,16 +188,14 @@ public class SettingsCommandGroup : CommandGroup
var data = await _guildData.GetData(guildId, CancellationToken);
Messages.Culture = GuildSettings.Language.Get(data.Settings);
- return await EditSettingAsync(setting, value, data, channelId, user, currentUser, CancellationToken);
+ return await EditSettingAsync(AllOptions[(int)setting], value, data, channelId, user, currentUser,
+ CancellationToken);
}
private async Task EditSettingAsync(
- string setting, string value, GuildData data, Snowflake channelId, IUser user, IUser currentUser,
+ IOption option, string value, GuildData data, Snowflake channelId, IUser user, IUser currentUser,
CancellationToken ct = default)
{
- var option = AllOptions.Single(
- o => string.Equals(setting, o.Name, StringComparison.InvariantCultureIgnoreCase));
-
var setResult = option.Set(data.Settings, value);
if (!setResult.IsSuccess)
{
diff --git a/src/Data/Options/AllOptionsEnum.cs b/src/Data/Options/AllOptionsEnum.cs
new file mode 100644
index 0000000..d0b1ae7
--- /dev/null
+++ b/src/Data/Options/AllOptionsEnum.cs
@@ -0,0 +1,29 @@
+using Boyfriend.Commands;
+using JetBrains.Annotations;
+
+namespace Boyfriend.Data.Options;
+
+///
+/// Represents all options as enums.
+///
+///
+/// WARNING: This enum is order-dependent! It's values are used as indexes for
+/// .
+///
+public enum AllOptionsEnum
+{
+ [UsedImplicitly] Language,
+ [UsedImplicitly] WelcomeMessage,
+ [UsedImplicitly] ReceiveStartupMessages,
+ [UsedImplicitly] RemoveRolesOnMute,
+ [UsedImplicitly] ReturnRolesOnRejoin,
+ [UsedImplicitly] AutoStartEvents,
+ [UsedImplicitly] RenameHoistedUsers,
+ [UsedImplicitly] PublicFeedbackChannel,
+ [UsedImplicitly] PrivateFeedbackChannel,
+ [UsedImplicitly] EventNotificationChannel,
+ [UsedImplicitly] DefaultRole,
+ [UsedImplicitly] MuteRole,
+ [UsedImplicitly] EventNotificationRole,
+ [UsedImplicitly] EventEarlyNotificationOffset
+}