Class SubcommandData

java.lang.Object
net.dv8tion.jda.api.interactions.commands.build.SubcommandData
All Implemented Interfaces:
SerializableData

public class SubcommandData extends Object implements SerializableData
Builder for a Slash-Command subcommand.
  • Constructor Details

    • SubcommandData

      public SubcommandData(@Nonnull String name, @Nonnull String description)
      Create a subcommand builder.
      Parameters:
      name - The subcommand name, 1-32 lowercase alphanumeric characters
      description - The subcommand description, 1-100 characters
      Throws:
      IllegalArgumentException - If any of the following requirements are not met
      • The name must be lowercase alphanumeric (with dash), 1-32 characters long
      • The description must be 1-100 characters long
  • Method Details

    • setName

      @Nonnull public SubcommandData setName(@Nonnull String name)
      Configure the name
      Parameters:
      name - The lowercase alphanumeric (with dash) name, 1-32 characters
      Returns:
      The SubcommandData instance, for chaining
      Throws:
      IllegalArgumentException - If the name is null, not alphanumeric, or not between 1-32 characters
    • setNameLocalization

      @Nonnull public SubcommandData setNameLocalization(@Nonnull DiscordLocale locale, @Nonnull String name)
      Sets a language-specific localization of this subcommand's name.
      Parameters:
      locale - The locale to associate the translated name with
      name - The translated name to put
      Returns:
      This builder instance, for chaining
      Throws:
      IllegalArgumentException -
    • setNameLocalizations

      @Nonnull public SubcommandData setNameLocalizations(@Nonnull Map<DiscordLocale, String> map)
      Sets multiple language-specific localizations of this subcommand's name.
      Parameters:
      map - The map from which to transfer the translated names
      Returns:
      This builder instance, for chaining
      Throws:
      IllegalArgumentException -
    • setDescription

      @Nonnull public SubcommandData setDescription(@Nonnull String description)
      Configure the description
      Parameters:
      description - The description, 1-100 characters
      Returns:
      The SubcommandData instance, for chaining
      Throws:
      IllegalArgumentException - If the name is null or not between 1-100 characters
    • setDescriptionLocalization

      @Nonnull public SubcommandData setDescriptionLocalization(@Nonnull DiscordLocale locale, @Nonnull String description)
      Sets a language-specific localization of this subcommand's description.
      Parameters:
      locale - The locale to associate the translated description with
      description - The translated description to put
      Returns:
      This builder instance, for chaining
      Throws:
      IllegalArgumentException -
    • setDescriptionLocalizations

      @Nonnull public SubcommandData setDescriptionLocalizations(@Nonnull Map<DiscordLocale, String> map)
      Sets multiple language-specific localizations of this subcommand's description.
      Parameters:
      map - The map from which to transfer the translated descriptions
      Returns:
      This builder instance, for chaining
      Throws:
      IllegalArgumentException -
    • removeOptions

      public boolean removeOptions(@Nonnull Predicate<? super OptionData> condition)
      Removes all options that evaluate to true under the provided condition.

      Example: Remove all options

      command.removeOptions(option -> true);
      

      Example: Remove all options that are required

      command.removeOptions(option -> option.isRequired());
      
      Parameters:
      condition - The removal condition (must not throw)
      Returns:
      True, if any options were removed
      Throws:
      IllegalArgumentException - If the condition is null
    • removeOptionByName

      public boolean removeOptionByName(@Nonnull String name)
      Removes options by the provided name.
      Parameters:
      name - The case-sensitive option name
      Returns:
      True, if any options were removed
    • addOptions

      @Nonnull public SubcommandData addOptions(@Nonnull OptionData... options)
      Adds up to 25 options to this subcommand.

      Required options must be added before non-required options!

      Parameters:
      options - The options to add
      Returns:
      The SubcommandData instance, for chaining
      Throws:
      IllegalArgumentException -
      • If this option is required and you already added a non-required option.
      • If more than 25 options are provided.
      • If the option name is not unique
      • If null is provided
    • addOptions

      @Nonnull public SubcommandData addOptions(@Nonnull Collection<? extends OptionData> options)
      Adds up to 25 options to this subcommand.

      Required options must be added before non-required options!

      Parameters:
      options - The options to add
      Returns:
      The SubcommandData instance, for chaining
      Throws:
      IllegalArgumentException -
      • If this option is required and you already added a non-required option.
      • If more than 25 options are provided.
      • If the option name is not unique
      • If null is provided
    • addOption

      @Nonnull public SubcommandData addOption(@Nonnull OptionType type, @Nonnull String name, @Nonnull String description, boolean required, boolean autoComplete)
      Adds an option to this subcommand.

      Required options must be added before non-required options!

      Parameters:
      type - The OptionType
      name - The lowercase option name, 1-32 characters
      description - The option description, 1-100 characters
      required - Whether this option is required (See OptionData.setRequired(boolean))
      autoComplete - Whether this option supports auto-complete via CommandAutoCompleteInteractionEvent, only supported for option types which support choices
      Returns:
      The SubcommandData instance, for chaining
      Throws:
      IllegalArgumentException -
      • If this option is required and you already added a non-required option.
      • If the provided option type does not support auto-complete
      • If more than 25 options are provided.
      • If the option name is not unique
      • If null is provided
    • addOption

      @Nonnull public SubcommandData addOption(@Nonnull OptionType type, @Nonnull String name, @Nonnull String description, boolean required)
      Adds an option to this subcommand.

      Required options must be added before non-required options!

      Parameters:
      type - The OptionType
      name - The lowercase option name, 1-32 characters
      description - The option description, 1-100 characters
      required - Whether this option is required (See OptionData.setRequired(boolean))
      Returns:
      The SubcommandData instance, for chaining
      Throws:
      IllegalArgumentException -
      • If this option is required and you already added a non-required option.
      • If more than 25 options are provided.
      • If the option name is not unique
      • If null is provided
    • addOption

      @Nonnull public SubcommandData addOption(@Nonnull OptionType type, @Nonnull String name, @Nonnull String description)
      Adds an option to this subcommand.
      The option is set to be non-required! You can use addOption(OptionType, String, String, boolean) to add a required option instead.

      Required options must be added before non-required options!

      Parameters:
      type - The OptionType
      name - The lowercase option name, 1-32 characters
      description - The option description, 1-100 characters
      Returns:
      The SubcommandData instance, for chaining
      Throws:
      IllegalArgumentException -
      • If this option is required and you already added a non-required option.
      • If more than 25 options are provided.
      • If the option name is not unique
      • If null is provided
    • getOptions

      @Nonnull public @Unmodifiable List<OptionData> getOptions()
      The options for this command.
      Returns:
      Immutable list of OptionData
    • getName

      @Nonnull public String getName()
      The configured name
      Returns:
      The name
    • getNameLocalizations

      @Nonnull public LocalizationMap getNameLocalizations()
      The localizations of this subcommand's name for various languages.
      Returns:
      The LocalizationMap containing the mapping from DiscordLocale to the localized name
    • getDescription

      @Nonnull public String getDescription()
      The configured description
      Returns:
      The description
    • getDescriptionLocalizations

      @Nonnull public LocalizationMap getDescriptionLocalizations()
      The localizations of this subcommand's description for various languages.
      Returns:
      The LocalizationMap containing the mapping from DiscordLocale to the localized description
    • toData

      @Nonnull public DataObject toData()
      Description copied from interface: SerializableData
      Serialized DataObject for this object.
      Specified by:
      toData in interface SerializableData
      Returns:
      DataObject
    • fromData

      @Nonnull public static SubcommandData fromData(@Nonnull DataObject json)
      Parses the provided serialization back into an SubcommandData instance.
      This is the reverse function for toData().
      Parameters:
      json - The serialized DataObject representing the subcommand
      Returns:
      The parsed SubcommandData instance, which can be further configured through setters
      Throws:
      ParsingException - If the serialized object is missing required fields
      IllegalArgumentException - If any of the values are failing the respective checks such as length
    • fromSubcommand

      @Nonnull public static SubcommandData fromSubcommand(@Nonnull Command.Subcommand subcommand)
      Converts the provided Command.Subcommand into a SubCommandData instance.
      Parameters:
      subcommand - The subcommand to convert
      Returns:
      An instance of SubCommandData
      Throws:
      IllegalArgumentException - If null is provided or the subcommand has illegal configuration