Search in sources :

Example 1 with Checks

use of net.dv8tion.jda.internal.utils.Checks in project JDA by DV8FromTheWorld.

the class OptionData method fromData.

/**
 * Parses the provided serialization back into an OptionData instance.
 * <br>This is the reverse function for {@link #toData()}.
 *
 * @param  json
 *         The serialized {@link DataObject} representing the option
 *
 * @throws net.dv8tion.jda.api.exceptions.ParsingException
 *         If the serialized object is missing required fields
 * @throws IllegalArgumentException
 *         If any of the values are failing the respective checks such as length
 *
 * @return The parsed OptionData instance, which can be further configured through setters
 */
@Nonnull
public static OptionData fromData(@Nonnull DataObject json) {
    String name = json.getString("name");
    String description = json.getString("description");
    OptionType type = OptionType.fromKey(json.getInt("type"));
    OptionData option = new OptionData(type, name, description);
    option.setRequired(json.getBoolean("required"));
    option.setAutoComplete(json.getBoolean("autocomplete"));
    if (type == OptionType.INTEGER || type == OptionType.NUMBER) {
        if (!json.isNull("min_value")) {
            if (json.isType("min_value", DataType.INT))
                option.setMinValue(json.getLong("min_value"));
            else if (json.isType("min_value", DataType.FLOAT))
                option.setMinValue(json.getDouble("min_value"));
        }
        if (!json.isNull("max_value")) {
            if (json.isType("max_value", DataType.INT))
                option.setMaxValue(json.getLong("max_value"));
            else if (json.isType("max_value", DataType.FLOAT))
                option.setMaxValue(json.getDouble("max_value"));
        }
    }
    if (type == OptionType.CHANNEL) {
        option.setChannelTypes(json.optArray("channel_types").map(it -> it.stream(DataArray::getInt).map(ChannelType::fromId).collect(Collectors.toSet())).orElse(Collections.emptySet()));
    }
    json.optArray("choices").ifPresent(choices1 -> choices1.stream(DataArray::getObject).forEach(o -> {
        if (o.isType("value", DataType.FLOAT))
            option.addChoice(o.getString("name"), o.getDouble("value"));
        else if (o.isType("value", DataType.INT))
            option.addChoice(o.getString("name"), o.getLong("value"));
        else
            option.addChoice(o.getString("name"), o.get("value").toString());
    }));
    return option;
}
Also used : OptionType(net.dv8tion.jda.api.interactions.commands.OptionType) DataArray(net.dv8tion.jda.api.utils.data.DataArray) Checks(net.dv8tion.jda.internal.utils.Checks) java.util(java.util) SerializableData(net.dv8tion.jda.api.utils.data.SerializableData) CommandAutoCompleteInteractionEvent(net.dv8tion.jda.api.events.interaction.command.CommandAutoCompleteInteractionEvent) DataType(net.dv8tion.jda.api.utils.data.DataType) Command(net.dv8tion.jda.api.interactions.commands.Command) Collectors(java.util.stream.Collectors) ChannelType(net.dv8tion.jda.api.entities.ChannelType) DataObject(net.dv8tion.jda.api.utils.data.DataObject) Nonnull(javax.annotation.Nonnull) Nullable(javax.annotation.Nullable) ChannelType(net.dv8tion.jda.api.entities.ChannelType) OptionType(net.dv8tion.jda.api.interactions.commands.OptionType) DataArray(net.dv8tion.jda.api.utils.data.DataArray) Nonnull(javax.annotation.Nonnull)

Aggregations

java.util (java.util)1 Collectors (java.util.stream.Collectors)1 Nonnull (javax.annotation.Nonnull)1 Nullable (javax.annotation.Nullable)1 ChannelType (net.dv8tion.jda.api.entities.ChannelType)1 CommandAutoCompleteInteractionEvent (net.dv8tion.jda.api.events.interaction.command.CommandAutoCompleteInteractionEvent)1 Command (net.dv8tion.jda.api.interactions.commands.Command)1 OptionType (net.dv8tion.jda.api.interactions.commands.OptionType)1 DataArray (net.dv8tion.jda.api.utils.data.DataArray)1 DataObject (net.dv8tion.jda.api.utils.data.DataObject)1 DataType (net.dv8tion.jda.api.utils.data.DataType)1 SerializableData (net.dv8tion.jda.api.utils.data.SerializableData)1 Checks (net.dv8tion.jda.internal.utils.Checks)1