diff --git a/src/Discord.Net.Core/Entities/Interactions/ApplicationCommandOptionChoice.cs b/src/Discord.Net.Core/Entities/Interactions/ApplicationCommandOptionChoice.cs index 63b6f6df8..f7979f20d 100644 --- a/src/Discord.Net.Core/Entities/Interactions/ApplicationCommandOptionChoice.cs +++ b/src/Discord.Net.Core/Entities/Interactions/ApplicationCommandOptionChoice.cs @@ -40,11 +40,6 @@ namespace Discord get => _value; set { - if(value != null) - { - if(!(value is int) && !(value is string)) - throw new ArgumentException("The value of a choice must be a string or int!"); - } _value = value; } } diff --git a/src/Discord.Net.Core/Entities/Interactions/Slash Commands/SlashCommandBuilder.cs b/src/Discord.Net.Core/Entities/Interactions/Slash Commands/SlashCommandBuilder.cs index d98fa3091..7c337892f 100644 --- a/src/Discord.Net.Core/Entities/Interactions/Slash Commands/SlashCommandBuilder.cs +++ b/src/Discord.Net.Core/Entities/Interactions/Slash Commands/SlashCommandBuilder.cs @@ -8,7 +8,7 @@ using System.Threading.Tasks; namespace Discord { /// - /// A class used to build slash commands. + /// Represents a class used to build slash commands. /// public class SlashCommandBuilder { @@ -26,7 +26,7 @@ namespace Discord public const int MaxOptionsCount = 25; /// - /// The name of this slash command. + /// Gets or sets the name of this slash command. /// public string Name { @@ -50,7 +50,7 @@ namespace Discord } /// - /// A 1-100 length description of this slash command + /// Gets or sets a 1-100 length description of this slash command /// public string Description { @@ -84,9 +84,9 @@ namespace Discord } /// - /// Whether the command is enabled by default when the app is added to a guild + /// Gets or sets whether the command is enabled by default when the app is added to a guild /// - public bool DefaultPermission { get; set; } = true; + public bool IsDefaultPermission { get; set; } = true; private string _name { get; set; } private string _description { get; set; } @@ -95,14 +95,14 @@ namespace Discord /// /// Build the current builder into a class. /// - /// A that can be used to create slash commands over rest. + /// A that can be used to create slash commands. public SlashCommandProperties Build() { SlashCommandProperties props = new SlashCommandProperties() { Name = Name, Description = Description, - IsDefaultPermission = DefaultPermission, + IsDefaultPermission = IsDefaultPermission, }; if (Options != null && Options.Any()) @@ -115,7 +115,6 @@ namespace Discord } return props; - } /// @@ -149,7 +148,7 @@ namespace Discord /// The current builder. public SlashCommandBuilder WithDefaultPermission(bool value) { - DefaultPermission = value; + IsDefaultPermission = value; return this; } @@ -159,14 +158,14 @@ namespace Discord /// The name of the option to add. /// The type of this option. /// The description of this option. - /// If this option is required for this command. + /// If this option is required for this command. /// If this option is the default option. /// If this option is set to autocompleate. /// The options of the option to add. /// The choices of this option. /// The current builder. public SlashCommandBuilder AddOption(string name, ApplicationCommandOptionType type, - string description, bool? required = null, bool? isDefault = null, bool isAutocomplete = false, List options = null, params ApplicationCommandOptionChoiceProperties[] choices) + string description, bool? isRequired = null, bool? isDefault = null, bool isAutocomplete = false, List options = null, params ApplicationCommandOptionChoiceProperties[] choices) { // Make sure the name matches the requirements from discord Preconditions.NotNullOrEmpty(name, nameof(name)); @@ -187,7 +186,7 @@ namespace Discord if (isDefault.HasValue && isDefault.Value) { if (Options != null) - if (Options.Any(x => x.Default.HasValue && x.Default.Value)) + if (Options.Any(x => x.IsDefault.HasValue && x.IsDefault.Value)) throw new ArgumentException("There can only be one command option with default set to true!", nameof(isDefault)); } @@ -195,41 +194,17 @@ namespace Discord { Name = name, Description = description, - Required = required, - Default = isDefault, + IsRequired = isRequired, + IsDefault = isDefault, Options = options, Type = type, - Autocomplete = isAutocomplete, + IsAutocomplete = isAutocomplete, Choices = choices != null ? new List(choices) : null }; return AddOption(option); } - ///// - ///// Adds an option to the current slash command. - ///// - ///// The name of the option to add. - ///// The type of this option. - ///// The description of this option. - ///// If this option is required for this command. - ///// If this option is the default option. - ///// The choices of this option. - ///// The current builder. - //public SlashCommandBuilder AddOption(string name, ApplicationCommandOptionType type, - // string description, bool required = true, bool isDefault = false, params ApplicationCommandOptionChoiceProperties[] choices) - // => AddOption(name, type, description, required, isDefault, null, choices); - - /// - /// Adds an option to the current slash command. - /// - /// The name of the option to add. - /// The type of this option. - /// The sescription of this option. - /// The current builder. - public SlashCommandBuilder AddOption(string name, ApplicationCommandOptionType type, string description) - => AddOption(name, type, description, options: null, choices: null); - /// /// Adds an option to this slash command. /// @@ -337,17 +312,17 @@ namespace Discord /// /// Gets or sets whether or not this options is the first required option for the user to complete. only one option can be default. /// - public bool? Default { get; set; } + public bool? IsDefault { get; set; } /// /// Gets or sets if the option is required. /// - public bool? Required { get; set; } = null; + public bool? IsRequired { get; set; } = null; /// /// Gets or sets whether or not this option supports autocomplete. /// - public bool Autocomplete { get; set; } + public bool IsAutocomplete { get; set; } /// /// Gets or sets the choices for string and int types for the user to pick from. @@ -377,12 +352,12 @@ namespace Discord { Name = Name, Description = Description, - IsDefault = Default, - IsRequired = Required, + IsDefault = IsDefault, + IsRequired = IsRequired, Type = Type, Options = Options?.Count > 0 ? new List(Options.Select(x => x.Build())) : null, Choices = Choices, - IsAutocomplete = Autocomplete + IsAutocomplete = IsAutocomplete }; } @@ -392,13 +367,13 @@ namespace Discord /// The name of the option to add. /// The type of this option. /// The description of this option. - /// If this option is required for this command. + /// If this option is required for this command. /// If this option is the default option. /// The options of the option to add. /// The choices of this option. /// The current builder. public SlashCommandOptionBuilder AddOption(string name, ApplicationCommandOptionType type, - string description, bool? required = null, bool isDefault = false, List options = null, params ApplicationCommandOptionChoiceProperties[] choices) + string description, bool? isRequired = null, bool isDefault = false, bool isAutocomplete = false, List options = null, params ApplicationCommandOptionChoiceProperties[] choices) { // Make sure the name matches the requirements from discord Preconditions.NotNullOrEmpty(name, nameof(name)); @@ -419,7 +394,7 @@ namespace Discord if (isDefault) { if (Options != null) - if (Options.Any(x => x.Default.HasValue && x.Default.Value)) + if (Options.Any(x => x.IsDefault.HasValue && x.IsDefault.Value)) throw new ArgumentException("There can only be one command option with default set to true!", nameof(isDefault)); } @@ -427,8 +402,9 @@ namespace Discord { Name = name, Description = description, - Required = required, - Default = isDefault, + IsRequired = isRequired, + IsAutocomplete = isAutocomplete, + IsDefault = isDefault, Options = options, Type = type, Choices = choices != null ? new List(choices) : null @@ -464,25 +440,40 @@ namespace Discord /// The current builder. public SlashCommandOptionBuilder AddChoice(string name, int value) { - if (Choices == null) - Choices = new List(); - - if (Choices.Count >= MaxChoiceCount) - throw new ArgumentOutOfRangeException(nameof(Choices), $"Cannot add more than {MaxChoiceCount} choices!"); - - if (name == null) - throw new ArgumentNullException($"{nameof(name)} cannot be null!"); + return AddChoiceInternal(name, value); + } - Preconditions.AtLeast(name.Length, 1, nameof(name)); - Preconditions.AtMost(name.Length, 100, nameof(name)); + /// + /// Adds a choice to the current option. + /// + /// The name of the choice. + /// The value of the choice. + /// The current builder. + public SlashCommandOptionBuilder AddChoice(string name, string value) + { + return AddChoiceInternal(name, value); + } - Choices.Add(new ApplicationCommandOptionChoiceProperties() - { - Name = name, - Value = value - }); + /// + /// Adds a choice to the current option. + /// + /// The name of the choice. + /// The value of the choice. + /// The current builder. + public SlashCommandOptionBuilder AddChoice(string name, double value) + { + return AddChoiceInternal(name, value); + } - return this; + /// + /// Adds a choice to the current option. + /// + /// The name of the choice. + /// The value of the choice. + /// The current builder. + public SlashCommandOptionBuilder AddChoice(string name, float value) + { + return AddChoiceInternal(name, value); } /// @@ -491,7 +482,12 @@ namespace Discord /// The name of the choice. /// The value of the choice. /// The current builder. - public SlashCommandOptionBuilder AddChoice(string name, string value) + public SlashCommandOptionBuilder AddChoice(string name, long value) + { + return AddChoiceInternal(name, value); + } + + private SlashCommandOptionBuilder AddChoiceInternal(string name, object value) { if (Choices == null) Choices = new List(); @@ -508,8 +504,11 @@ namespace Discord Preconditions.AtLeast(name.Length, 1, nameof(name)); Preconditions.AtMost(name.Length, 100, nameof(name)); - Preconditions.AtLeast(value.Length, 1, nameof(value)); - Preconditions.AtMost(value.Length, 100, nameof(value)); + if(value is string str) + { + Preconditions.AtLeast(str.Length, 1, nameof(value)); + Preconditions.AtMost(str.Length, 100, nameof(value)); + } Choices.Add(new ApplicationCommandOptionChoiceProperties() { @@ -550,7 +549,7 @@ namespace Discord /// The current builder. public SlashCommandOptionBuilder WithRequired(bool value) { - Required = value; + IsRequired = value; return this; } @@ -561,7 +560,7 @@ namespace Discord /// The current builder. public SlashCommandOptionBuilder WithDefault(bool value) { - Default = value; + IsDefault = value; return this; }