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