2024-06-24 13:56:01 +01:00
|
|
|
package cc.fascinated.bat.command;
|
|
|
|
|
|
|
|
import lombok.Getter;
|
|
|
|
import lombok.NonNull;
|
|
|
|
import lombok.Setter;
|
2024-06-26 00:31:16 +01:00
|
|
|
import net.dv8tion.jda.api.Permission;
|
2024-06-24 13:56:01 +01:00
|
|
|
import net.dv8tion.jda.api.interactions.commands.OptionMapping;
|
2024-06-26 00:31:16 +01:00
|
|
|
import net.dv8tion.jda.api.interactions.commands.OptionType;
|
2024-06-24 13:56:01 +01:00
|
|
|
import net.dv8tion.jda.api.interactions.commands.SlashCommandInteraction;
|
|
|
|
import net.dv8tion.jda.internal.interactions.CommandDataImpl;
|
|
|
|
|
|
|
|
import java.util.HashMap;
|
|
|
|
import java.util.List;
|
|
|
|
import java.util.Map;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @author Fascinated (fascinated7)
|
|
|
|
*/
|
|
|
|
@Getter @Setter
|
|
|
|
public abstract class BatCommand implements BatCommandExecutor {
|
|
|
|
/**
|
|
|
|
* The name of the command
|
|
|
|
*/
|
|
|
|
private final String name;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* The description of the command
|
|
|
|
*/
|
2024-06-26 00:31:16 +01:00
|
|
|
private final String description;
|
2024-06-24 13:56:01 +01:00
|
|
|
|
|
|
|
/**
|
2024-06-26 00:31:16 +01:00
|
|
|
* The command data for the slash command
|
2024-06-24 13:56:01 +01:00
|
|
|
*/
|
2024-06-26 00:31:16 +01:00
|
|
|
private final CommandDataImpl commandData;
|
2024-06-24 13:56:01 +01:00
|
|
|
|
|
|
|
/**
|
2024-06-26 00:31:16 +01:00
|
|
|
* The required permissions for the command
|
2024-06-24 13:56:01 +01:00
|
|
|
*/
|
2024-06-26 00:31:16 +01:00
|
|
|
private final List<Permission> requiredPermissions;
|
2024-06-24 13:56:01 +01:00
|
|
|
|
|
|
|
/**
|
|
|
|
* The sub commands of the command
|
|
|
|
*/
|
2024-06-26 00:31:16 +01:00
|
|
|
private final Map<String, BatSubCommand> subCommands = new HashMap<>();
|
2024-06-24 13:56:01 +01:00
|
|
|
|
2024-06-26 00:31:16 +01:00
|
|
|
public BatCommand(@NonNull String name, @NonNull String description, boolean guildOnly, Permission... permissions) {
|
2024-06-24 13:56:01 +01:00
|
|
|
this.name = name;
|
2024-06-26 00:31:16 +01:00
|
|
|
this.description = description;
|
|
|
|
this.requiredPermissions = List.of(permissions);
|
2024-06-24 13:56:01 +01:00
|
|
|
|
2024-06-26 00:31:16 +01:00
|
|
|
this.commandData = new CommandDataImpl(this.name, description)
|
|
|
|
.setGuildOnly(guildOnly);
|
|
|
|
}
|
|
|
|
|
|
|
|
public BatCommand(@NonNull String name) {
|
|
|
|
this(name, "No description provided.", false);
|
|
|
|
}
|
|
|
|
|
|
|
|
public BatCommand(@NonNull String name, @NonNull String description) {
|
|
|
|
this(name, description, false);
|
2024-06-24 13:56:01 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Adds a sub command to the command
|
|
|
|
*
|
2024-06-26 00:31:16 +01:00
|
|
|
* @param name The name of the sub command
|
2024-06-24 13:56:01 +01:00
|
|
|
* @param subCommand The sub command
|
|
|
|
*/
|
2024-06-26 00:31:16 +01:00
|
|
|
public void addSubCommand(@NonNull String name, @NonNull BatSubCommand subCommand) {
|
2024-06-24 13:56:01 +01:00
|
|
|
this.subCommands.put(name.toLowerCase(), subCommand);
|
2024-06-26 00:31:16 +01:00
|
|
|
this.commandData.addSubcommands(subCommand.getCommandData());
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Adds an option to the sub command
|
|
|
|
*
|
|
|
|
* @param optionType the type of the option
|
|
|
|
* @param name the name of the option
|
|
|
|
* @param description the description of the option
|
|
|
|
* @param required whether the option is required
|
|
|
|
*/
|
2024-06-26 02:46:27 +01:00
|
|
|
protected void addOption(OptionType optionType, String name, String description, boolean required) {
|
2024-06-26 00:31:16 +01:00
|
|
|
this.commandData.addOption(optionType, name, description, required);
|
2024-06-24 13:56:01 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Gets all the options for the command
|
|
|
|
*
|
|
|
|
* @param interaction The slash command interaction
|
|
|
|
* @return The option strings
|
|
|
|
*/
|
|
|
|
public List<String> getOptions(SlashCommandInteraction interaction) {
|
|
|
|
return interaction.getOptions().stream().map(OptionMapping::getName).toList();
|
|
|
|
}
|
|
|
|
}
|