forked from Fascinated/Bat
cleanup commands
This commit is contained in:
@ -3,7 +3,6 @@ package cc.fascinated.bat.command;
|
||||
import lombok.Getter;
|
||||
import lombok.NonNull;
|
||||
import lombok.Setter;
|
||||
import net.dv8tion.jda.api.Permission;
|
||||
import net.dv8tion.jda.api.interactions.commands.OptionMapping;
|
||||
import net.dv8tion.jda.api.interactions.commands.OptionType;
|
||||
import net.dv8tion.jda.api.interactions.commands.SlashCommandInteraction;
|
||||
@ -19,78 +18,45 @@ import java.util.Map;
|
||||
@Getter @Setter
|
||||
public abstract class BatCommand implements BatCommandExecutor {
|
||||
/**
|
||||
* The category of the command
|
||||
* The information about the command
|
||||
*/
|
||||
private Category category;
|
||||
|
||||
/**
|
||||
* The name of the command
|
||||
*/
|
||||
private final String name;
|
||||
|
||||
/**
|
||||
* The description of the command
|
||||
*/
|
||||
private final String description;
|
||||
private final CommandInfo commandInfo;
|
||||
|
||||
/**
|
||||
* The command data for the slash command
|
||||
*/
|
||||
private final CommandDataImpl commandData;
|
||||
|
||||
/**
|
||||
* The required permissions for the command
|
||||
*/
|
||||
private final List<Permission> requiredPermissions;
|
||||
|
||||
/**
|
||||
* The sub commands of the command
|
||||
*/
|
||||
private final Map<String, BatSubCommand> subCommands = new HashMap<>();
|
||||
|
||||
/**
|
||||
* The commands snowflake from Discord
|
||||
* The category of the command
|
||||
*/
|
||||
private Category category;
|
||||
|
||||
/**
|
||||
* The command snowflake from Discord
|
||||
*/
|
||||
private long commandSnowflake;
|
||||
|
||||
public BatCommand(@NonNull Category category, @NonNull String name, @NonNull String description, boolean guildOnly, Permission... permissions) {
|
||||
this.category = category;
|
||||
this.name = name;
|
||||
this.description = description;
|
||||
this.requiredPermissions = List.of(permissions);
|
||||
public BatCommand() {
|
||||
this.commandInfo = getClass().getAnnotation(CommandInfo.class);
|
||||
this.category = this.commandInfo.category();
|
||||
|
||||
this.commandData = new CommandDataImpl(this.name, description)
|
||||
.setGuildOnly(guildOnly);
|
||||
}
|
||||
|
||||
public BatCommand(@NonNull Category category, @NonNull String name) {
|
||||
this(category, name, "No description provided.", false);
|
||||
}
|
||||
|
||||
public BatCommand(@NonNull Category category, @NonNull String name, @NonNull String description) {
|
||||
this(category, name, description, false);
|
||||
}
|
||||
|
||||
public BatCommand(@NonNull String name, @NonNull String description, boolean guildOnly, Permission... permissions) {
|
||||
this(Category.GENERAL, name, description, guildOnly, permissions);
|
||||
}
|
||||
|
||||
public BatCommand(@NonNull String name) {
|
||||
this(Category.GENERAL, name, "No description provided.", false);
|
||||
}
|
||||
|
||||
public BatCommand(@NonNull String name, @NonNull String description) {
|
||||
this(Category.GENERAL, name, description, false);
|
||||
this.commandData = new CommandDataImpl(this.commandInfo.name(), this.commandInfo.description())
|
||||
.setGuildOnly(this.commandInfo.guildOnly());
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a sub command to the command
|
||||
*
|
||||
* @param name The name of the sub command
|
||||
* @param subCommand The sub command
|
||||
*/
|
||||
public void addSubCommand(@NonNull String name, @NonNull BatSubCommand subCommand) {
|
||||
this.subCommands.put(name.toLowerCase(), subCommand);
|
||||
public void addSubCommand(@NonNull BatSubCommand subCommand) {
|
||||
this.subCommands.put(subCommand.getCommandInfo().name().toLowerCase(), subCommand);
|
||||
this.commandData.addSubcommands(subCommand.getCommandData());
|
||||
}
|
||||
|
||||
|
@ -2,35 +2,32 @@ package cc.fascinated.bat.command;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import net.dv8tion.jda.api.Permission;
|
||||
import net.dv8tion.jda.api.interactions.commands.OptionType;
|
||||
import net.dv8tion.jda.api.interactions.commands.build.SubcommandData;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author Fascinated (fascinated7)
|
||||
*/
|
||||
@Getter @Setter
|
||||
public class BatSubCommand implements BatCommandExecutor {
|
||||
/**
|
||||
* The information about the sub command
|
||||
*/
|
||||
private final CommandInfo commandInfo;
|
||||
|
||||
/**
|
||||
* The command data for the slash command
|
||||
*/
|
||||
private final SubcommandData commandData;
|
||||
|
||||
/**
|
||||
* The required permissions for the command
|
||||
*/
|
||||
private final List<Permission> requiredPermissions;
|
||||
|
||||
/**
|
||||
* The commands snowflake from Discord
|
||||
*/
|
||||
private long commandSnowflake;
|
||||
|
||||
public BatSubCommand(String name, String description, Permission... permissions) {
|
||||
this.commandData = new SubcommandData(name, description);
|
||||
this.requiredPermissions = List.of(permissions);
|
||||
public BatSubCommand() {
|
||||
this.commandInfo = getClass().getAnnotation(CommandInfo.class);
|
||||
this.commandData = new SubcommandData(this.commandInfo.name(), this.commandInfo.description());
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1,15 +1,11 @@
|
||||
package cc.fascinated.bat.command;
|
||||
|
||||
/**
|
||||
* @author Fascinated (fascinated7)
|
||||
*/
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
import net.dv8tion.jda.api.entities.emoji.Emoji;
|
||||
|
||||
/**
|
||||
* The category of the command
|
||||
* @author Fascinated (fascinated7)
|
||||
*/
|
||||
@AllArgsConstructor @Getter
|
||||
public enum Category {
|
||||
|
50
src/main/java/cc/fascinated/bat/command/CommandInfo.java
Normal file
50
src/main/java/cc/fascinated/bat/command/CommandInfo.java
Normal file
@ -0,0 +1,50 @@
|
||||
package cc.fascinated.bat.command;
|
||||
|
||||
import net.dv8tion.jda.api.Permission;
|
||||
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
/**
|
||||
* @author Fascinated (fascinated7)
|
||||
*/
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Target(ElementType.TYPE)
|
||||
public @interface CommandInfo {
|
||||
/**
|
||||
* The name of the command
|
||||
*
|
||||
* @return the name of the command
|
||||
*/
|
||||
String name();
|
||||
|
||||
/**
|
||||
* The description of the command
|
||||
*
|
||||
* @return the description of the command
|
||||
*/
|
||||
String description() default "No description provided.";
|
||||
|
||||
/**
|
||||
* If the command is guild only
|
||||
*
|
||||
* @return if the command is guild only
|
||||
*/
|
||||
boolean guildOnly() default true;
|
||||
|
||||
/**
|
||||
* The required permissions for the command
|
||||
*
|
||||
* @return the required permissions for the command
|
||||
*/
|
||||
Permission[] requiredPermissions() default {};
|
||||
|
||||
/**
|
||||
* The category of the command
|
||||
*
|
||||
* @return the category of the command
|
||||
*/
|
||||
Category category() default Category.GENERAL;
|
||||
}
|
@ -1,6 +1,7 @@
|
||||
package cc.fascinated.bat.command.impl;
|
||||
|
||||
import cc.fascinated.bat.command.BatCommand;
|
||||
import cc.fascinated.bat.command.CommandInfo;
|
||||
import cc.fascinated.bat.common.EmbedUtils;
|
||||
import cc.fascinated.bat.model.BatGuild;
|
||||
import cc.fascinated.bat.model.BatUser;
|
||||
@ -17,9 +18,9 @@ import org.springframework.stereotype.Component;
|
||||
* @author Fascinated (fascinated7)
|
||||
*/
|
||||
@Component
|
||||
@CommandInfo(name = "avatar", description = "Get the avatar of a user")
|
||||
public class AvatarCommand extends BatCommand {
|
||||
public AvatarCommand() {
|
||||
super("avatar", "Gets the avatar of a user");
|
||||
super.addOption(OptionType.USER, "user", "The user to get the avatar of", true);
|
||||
}
|
||||
|
||||
|
@ -1,6 +1,7 @@
|
||||
package cc.fascinated.bat.command.impl;
|
||||
|
||||
import cc.fascinated.bat.command.BatCommand;
|
||||
import cc.fascinated.bat.command.CommandInfo;
|
||||
import cc.fascinated.bat.common.EmbedUtils;
|
||||
import cc.fascinated.bat.common.TimeUtils;
|
||||
import cc.fascinated.bat.model.BatGuild;
|
||||
@ -23,6 +24,7 @@ import java.lang.management.RuntimeMXBean;
|
||||
* @author Fascinated (fascinated7)
|
||||
*/
|
||||
@Component
|
||||
@CommandInfo(name = "botstats", description = "Shows the bot statistics")
|
||||
public class BotStatsCommand extends BatCommand {
|
||||
RuntimeMXBean bean = ManagementFactory.getRuntimeMXBean();
|
||||
private final GuildService guildService;
|
||||
@ -30,7 +32,6 @@ public class BotStatsCommand extends BatCommand {
|
||||
|
||||
@Autowired
|
||||
public BotStatsCommand(@NonNull GuildService guildService, @NonNull UserService userService) {
|
||||
super("botstats", "Shows the bot statistics");
|
||||
this.guildService = guildService;
|
||||
this.userService = userService;
|
||||
}
|
||||
|
@ -4,6 +4,7 @@ import cc.fascinated.bat.Consts;
|
||||
import cc.fascinated.bat.command.BatCommand;
|
||||
import cc.fascinated.bat.command.BatSubCommand;
|
||||
import cc.fascinated.bat.command.Category;
|
||||
import cc.fascinated.bat.command.CommandInfo;
|
||||
import cc.fascinated.bat.common.EmbedUtils;
|
||||
import cc.fascinated.bat.event.EventListener;
|
||||
import cc.fascinated.bat.model.BatGuild;
|
||||
@ -35,12 +36,12 @@ import java.util.Map;
|
||||
* @author Fascinated (fascinated7)
|
||||
*/
|
||||
@Component
|
||||
@CommandInfo(name = "help", description = "View the bots command categories.")
|
||||
public class HelpCommand extends BatCommand implements EventListener {
|
||||
private final CommandService commandService;
|
||||
|
||||
@Autowired
|
||||
public HelpCommand(@NonNull CommandService commandService) {
|
||||
super("help", "View the bots command categories.");
|
||||
this.commandService = commandService;
|
||||
}
|
||||
|
||||
@ -74,7 +75,7 @@ public class HelpCommand extends BatCommand implements EventListener {
|
||||
BatSubCommand subCommand = entry.getValue();
|
||||
SubcommandData commandData = subCommand.getCommandData();
|
||||
commands += "</%s %s:%s> - %s\n".formatted(
|
||||
command.getName(),
|
||||
command.getCommandInfo().name(),
|
||||
commandData.getName(),
|
||||
subCommand.getCommandSnowflake(),
|
||||
commandData.getDescription()
|
||||
@ -83,9 +84,9 @@ public class HelpCommand extends BatCommand implements EventListener {
|
||||
continue;
|
||||
}
|
||||
commands += "</%s:%s> - %s\n".formatted(
|
||||
command.getName(),
|
||||
command.getCommandInfo().name(),
|
||||
command.getCommandSnowflake(),
|
||||
command.getDescription()
|
||||
command.getCommandInfo().description()
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -2,6 +2,7 @@ package cc.fascinated.bat.command.impl;
|
||||
|
||||
import cc.fascinated.bat.Consts;
|
||||
import cc.fascinated.bat.command.BatCommand;
|
||||
import cc.fascinated.bat.command.CommandInfo;
|
||||
import cc.fascinated.bat.common.EmbedUtils;
|
||||
import cc.fascinated.bat.model.BatGuild;
|
||||
import cc.fascinated.bat.model.BatUser;
|
||||
@ -15,11 +16,8 @@ import org.springframework.stereotype.Component;
|
||||
* @author Fascinated (fascinated7)
|
||||
*/
|
||||
@Component
|
||||
@CommandInfo(name = "invite", description = "Invite the bot to your server!")
|
||||
public class InviteCommand extends BatCommand {
|
||||
public InviteCommand() {
|
||||
super("invite", "Invite the bot to your server!");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, @NonNull SlashCommandInteraction interaction) {
|
||||
interaction.replyEmbeds(EmbedUtils.genericEmbed()
|
||||
|
@ -1,6 +1,7 @@
|
||||
package cc.fascinated.bat.command.impl;
|
||||
|
||||
import cc.fascinated.bat.command.BatCommand;
|
||||
import cc.fascinated.bat.command.CommandInfo;
|
||||
import cc.fascinated.bat.model.BatGuild;
|
||||
import cc.fascinated.bat.model.BatUser;
|
||||
import cc.fascinated.bat.service.DiscordService;
|
||||
@ -14,11 +15,8 @@ import org.springframework.stereotype.Component;
|
||||
* @author Fascinated (fascinated7)
|
||||
*/
|
||||
@Component
|
||||
@CommandInfo(name = "ping", description = "Gets the ping of the bot")
|
||||
public class PingCommand extends BatCommand {
|
||||
public PingCommand() {
|
||||
super("ping", "Gets the ping of the bot");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, @NonNull SlashCommandInteraction interaction) {
|
||||
long time = System.currentTimeMillis();
|
||||
|
@ -2,6 +2,7 @@ package cc.fascinated.bat.command.impl.fun;
|
||||
|
||||
import cc.fascinated.bat.command.BatCommand;
|
||||
import cc.fascinated.bat.command.Category;
|
||||
import cc.fascinated.bat.command.CommandInfo;
|
||||
import cc.fascinated.bat.common.EmbedUtils;
|
||||
import cc.fascinated.bat.common.WebRequest;
|
||||
import cc.fascinated.bat.model.BatGuild;
|
||||
@ -17,11 +18,8 @@ import org.springframework.stereotype.Component;
|
||||
* @author Fascinated (fascinated7)
|
||||
*/
|
||||
@Component
|
||||
@CommandInfo(name = "cat", description = "Get a random cat image", category = Category.FUN)
|
||||
public class CatCommand extends BatCommand {
|
||||
public CatCommand() {
|
||||
super(Category.FUN, "cat", "Get a random cat image");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, @NonNull SlashCommandInteraction interaction) {
|
||||
CatImageToken[] responseEntity = WebRequest.getAsEntity("https://api.thecatapi.com/v1/images/search", CatImageToken[].class);
|
||||
|
@ -2,6 +2,7 @@ package cc.fascinated.bat.command.impl.fun;
|
||||
|
||||
import cc.fascinated.bat.command.BatCommand;
|
||||
import cc.fascinated.bat.command.Category;
|
||||
import cc.fascinated.bat.command.CommandInfo;
|
||||
import cc.fascinated.bat.common.EmbedUtils;
|
||||
import cc.fascinated.bat.common.WebRequest;
|
||||
import cc.fascinated.bat.model.BatGuild;
|
||||
@ -17,11 +18,8 @@ import org.springframework.stereotype.Component;
|
||||
* @author Fascinated (fascinated7)
|
||||
*/
|
||||
@Component
|
||||
@CommandInfo(name = "dog", description = "Get a random dog image", category = Category.FUN)
|
||||
public class DogCommand extends BatCommand {
|
||||
public DogCommand() {
|
||||
super(Category.FUN, "dog", "Get a random dog image");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, @NonNull SlashCommandInteraction interaction) {
|
||||
RandomImage responseEntity = WebRequest.getAsEntity("https://dog.ceo/api/breeds/image/random", RandomImage.class);
|
||||
|
Reference in New Issue
Block a user