From f062fa21c3ed608dc11a467b793a969a6e71a6f0 Mon Sep 17 00:00:00 2001 From: Liam Date: Thu, 27 Jun 2024 19:36:52 +0100 Subject: [PATCH] cleanup commands --- .../cc/fascinated/bat/command/BatCommand.java | 64 +++++-------------- .../fascinated/bat/command/BatSubCommand.java | 19 +++--- .../cc/fascinated/bat/command/Category.java | 6 +- .../fascinated/bat/command/CommandInfo.java | 50 +++++++++++++++ .../bat/command/impl/AvatarCommand.java | 3 +- .../bat/command/impl/BotStatsCommand.java | 3 +- .../bat/command/impl/HelpCommand.java | 9 +-- .../bat/command/impl/InviteCommand.java | 6 +- .../bat/command/impl/PingCommand.java | 6 +- .../bat/command/impl/fun/CatCommand.java | 6 +- .../bat/command/impl/fun/DogCommand.java | 6 +- .../bat/features/afk/command/AfkCommand.java | 3 +- .../autorole/command/AddSubCommand.java | 3 +- .../autorole/command/AutoRoleCommand.java | 12 ++-- .../autorole/command/ClearSubCommand.java | 3 +- .../autorole/command/ListSubCommand.java | 7 +- .../autorole/command/RemoveSubCommand.java | 3 +- .../birthday/command/BirthdayCommand.java | 12 ++-- .../birthday/command/ChannelSubCommand.java | 3 +- .../birthday/command/MessageSubCommand.java | 3 +- .../birthday/command/RemoveSubCommand.java | 3 +- .../birthday/command/SetSubCommand.java | 3 +- .../command/numberone/ChannelSubCommand.java | 3 +- .../numberone/NumberOneFeedCommand.java | 8 +-- .../command/numberone/ResetSubCommand.java | 3 +- .../command/scoresaber/LinkSubCommand.java | 3 +- .../command/scoresaber/MeSubCommand.java | 3 +- .../command/scoresaber/ResetSubCommand.java | 3 +- .../command/scoresaber/ScoreSaberCommand.java | 11 ++-- .../command/scoresaber/UserSubCommand.java | 3 +- .../command/userfeed/ChannelSubCommand.java | 3 +- .../command/userfeed/ResetSubCommand.java | 3 +- .../command/userfeed/UserFeedCommand.java | 10 +-- .../command/userfeed/UserSubCommand.java | 3 +- .../bat/service/CommandService.java | 18 +++--- 35 files changed, 162 insertions(+), 145 deletions(-) create mode 100644 src/main/java/cc/fascinated/bat/command/CommandInfo.java diff --git a/src/main/java/cc/fascinated/bat/command/BatCommand.java b/src/main/java/cc/fascinated/bat/command/BatCommand.java index 4948619..7efb8fa 100644 --- a/src/main/java/cc/fascinated/bat/command/BatCommand.java +++ b/src/main/java/cc/fascinated/bat/command/BatCommand.java @@ -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 requiredPermissions; - /** * The sub commands of the command */ private final Map 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()); } diff --git a/src/main/java/cc/fascinated/bat/command/BatSubCommand.java b/src/main/java/cc/fascinated/bat/command/BatSubCommand.java index 2dd49bd..c866cf7 100644 --- a/src/main/java/cc/fascinated/bat/command/BatSubCommand.java +++ b/src/main/java/cc/fascinated/bat/command/BatSubCommand.java @@ -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 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()); } /** diff --git a/src/main/java/cc/fascinated/bat/command/Category.java b/src/main/java/cc/fascinated/bat/command/Category.java index 8924f16..79e66f1 100644 --- a/src/main/java/cc/fascinated/bat/command/Category.java +++ b/src/main/java/cc/fascinated/bat/command/Category.java @@ -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 { diff --git a/src/main/java/cc/fascinated/bat/command/CommandInfo.java b/src/main/java/cc/fascinated/bat/command/CommandInfo.java new file mode 100644 index 0000000..5588589 --- /dev/null +++ b/src/main/java/cc/fascinated/bat/command/CommandInfo.java @@ -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; +} \ No newline at end of file diff --git a/src/main/java/cc/fascinated/bat/command/impl/AvatarCommand.java b/src/main/java/cc/fascinated/bat/command/impl/AvatarCommand.java index 5356014..9bcfa4d 100644 --- a/src/main/java/cc/fascinated/bat/command/impl/AvatarCommand.java +++ b/src/main/java/cc/fascinated/bat/command/impl/AvatarCommand.java @@ -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); } diff --git a/src/main/java/cc/fascinated/bat/command/impl/BotStatsCommand.java b/src/main/java/cc/fascinated/bat/command/impl/BotStatsCommand.java index fda9d94..5725a6e 100644 --- a/src/main/java/cc/fascinated/bat/command/impl/BotStatsCommand.java +++ b/src/main/java/cc/fascinated/bat/command/impl/BotStatsCommand.java @@ -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; } diff --git a/src/main/java/cc/fascinated/bat/command/impl/HelpCommand.java b/src/main/java/cc/fascinated/bat/command/impl/HelpCommand.java index ce7ec65..8dfc504 100644 --- a/src/main/java/cc/fascinated/bat/command/impl/HelpCommand.java +++ b/src/main/java/cc/fascinated/bat/command/impl/HelpCommand.java @@ -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\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\n".formatted( - command.getName(), + command.getCommandInfo().name(), command.getCommandSnowflake(), - command.getDescription() + command.getCommandInfo().description() ); } } diff --git a/src/main/java/cc/fascinated/bat/command/impl/InviteCommand.java b/src/main/java/cc/fascinated/bat/command/impl/InviteCommand.java index aedb2cf..addc71a 100644 --- a/src/main/java/cc/fascinated/bat/command/impl/InviteCommand.java +++ b/src/main/java/cc/fascinated/bat/command/impl/InviteCommand.java @@ -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() diff --git a/src/main/java/cc/fascinated/bat/command/impl/PingCommand.java b/src/main/java/cc/fascinated/bat/command/impl/PingCommand.java index b627b92..889f24d 100644 --- a/src/main/java/cc/fascinated/bat/command/impl/PingCommand.java +++ b/src/main/java/cc/fascinated/bat/command/impl/PingCommand.java @@ -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(); diff --git a/src/main/java/cc/fascinated/bat/command/impl/fun/CatCommand.java b/src/main/java/cc/fascinated/bat/command/impl/fun/CatCommand.java index a534f7d..a64a85b 100644 --- a/src/main/java/cc/fascinated/bat/command/impl/fun/CatCommand.java +++ b/src/main/java/cc/fascinated/bat/command/impl/fun/CatCommand.java @@ -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); diff --git a/src/main/java/cc/fascinated/bat/command/impl/fun/DogCommand.java b/src/main/java/cc/fascinated/bat/command/impl/fun/DogCommand.java index befa8fb..8cfa9f7 100644 --- a/src/main/java/cc/fascinated/bat/command/impl/fun/DogCommand.java +++ b/src/main/java/cc/fascinated/bat/command/impl/fun/DogCommand.java @@ -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); diff --git a/src/main/java/cc/fascinated/bat/features/afk/command/AfkCommand.java b/src/main/java/cc/fascinated/bat/features/afk/command/AfkCommand.java index ebe7315..cd27a09 100644 --- a/src/main/java/cc/fascinated/bat/features/afk/command/AfkCommand.java +++ b/src/main/java/cc/fascinated/bat/features/afk/command/AfkCommand.java @@ -1,6 +1,7 @@ package cc.fascinated.bat.features.afk.command; import cc.fascinated.bat.command.BatCommand; +import cc.fascinated.bat.command.CommandInfo; import cc.fascinated.bat.common.MemberUtils; import cc.fascinated.bat.features.afk.profile.AfkProfile; import cc.fascinated.bat.model.BatGuild; @@ -17,9 +18,9 @@ import org.springframework.stereotype.Component; * @author Fascinated (fascinated7) */ @Component +@CommandInfo(name = "afk", description = "Sets your AFK status") public class AfkCommand extends BatCommand { public AfkCommand() { - super("afk", "Sets your AFK status"); super.addOption(OptionType.STRING, "reason", "The reason for being AFK", false); } diff --git a/src/main/java/cc/fascinated/bat/features/autorole/command/AddSubCommand.java b/src/main/java/cc/fascinated/bat/features/autorole/command/AddSubCommand.java index 0cd986e..ee1e6c8 100644 --- a/src/main/java/cc/fascinated/bat/features/autorole/command/AddSubCommand.java +++ b/src/main/java/cc/fascinated/bat/features/autorole/command/AddSubCommand.java @@ -1,6 +1,7 @@ package cc.fascinated.bat.features.autorole.command; import cc.fascinated.bat.command.BatSubCommand; +import cc.fascinated.bat.command.CommandInfo; import cc.fascinated.bat.common.EmbedUtils; import cc.fascinated.bat.common.RoleUtils; import cc.fascinated.bat.features.autorole.profile.AutoRoleProfile; @@ -21,12 +22,12 @@ import org.springframework.stereotype.Component; * @author Fascinated (fascinated7) */ @Component("autoroles:add.sub") +@CommandInfo(name = "add", description = "Adds a role to the auto roles list") public class AddSubCommand extends BatSubCommand { private final GuildService guildService; @Autowired public AddSubCommand(@NonNull GuildService guildService) { - super("add", "Adds a role to the auto roles list"); super.addOption(OptionType.ROLE, "role", "The role to add", true); this.guildService = guildService; } diff --git a/src/main/java/cc/fascinated/bat/features/autorole/command/AutoRoleCommand.java b/src/main/java/cc/fascinated/bat/features/autorole/command/AutoRoleCommand.java index c97309c..78d1d6a 100644 --- a/src/main/java/cc/fascinated/bat/features/autorole/command/AutoRoleCommand.java +++ b/src/main/java/cc/fascinated/bat/features/autorole/command/AutoRoleCommand.java @@ -1,6 +1,7 @@ package cc.fascinated.bat.features.autorole.command; import cc.fascinated.bat.command.BatCommand; +import cc.fascinated.bat.command.CommandInfo; import lombok.NonNull; import net.dv8tion.jda.api.Permission; import org.springframework.context.ApplicationContext; @@ -10,13 +11,12 @@ import org.springframework.stereotype.Component; * @author Fascinated (fascinated7) */ @Component("autoroles.command") +@CommandInfo(name = "autorole", description = "Set up the automatic role system for members on join", requiredPermissions = Permission.MANAGE_SERVER) public class AutoRoleCommand extends BatCommand { public AutoRoleCommand(@NonNull ApplicationContext context) { - super("autorole", "Set up the automatic role system for members on join", true, Permission.MANAGE_SERVER); - - super.addSubCommand("list", context.getBean(ListSubCommand.class)); - super.addSubCommand("add", context.getBean(AddSubCommand.class)); - super.addSubCommand("remove", context.getBean(RemoveSubCommand.class)); - super.addSubCommand("clear", context.getBean(ClearSubCommand.class)); + super.addSubCommand(context.getBean(ListSubCommand.class)); + super.addSubCommand(context.getBean(AddSubCommand.class)); + super.addSubCommand(context.getBean(RemoveSubCommand.class)); + super.addSubCommand(context.getBean(ClearSubCommand.class)); } } diff --git a/src/main/java/cc/fascinated/bat/features/autorole/command/ClearSubCommand.java b/src/main/java/cc/fascinated/bat/features/autorole/command/ClearSubCommand.java index fb8cff6..0ea174b 100644 --- a/src/main/java/cc/fascinated/bat/features/autorole/command/ClearSubCommand.java +++ b/src/main/java/cc/fascinated/bat/features/autorole/command/ClearSubCommand.java @@ -1,6 +1,7 @@ package cc.fascinated.bat.features.autorole.command; import cc.fascinated.bat.command.BatSubCommand; +import cc.fascinated.bat.command.CommandInfo; import cc.fascinated.bat.common.EmbedUtils; import cc.fascinated.bat.features.autorole.profile.AutoRoleProfile; import cc.fascinated.bat.model.BatGuild; @@ -17,12 +18,12 @@ import org.springframework.stereotype.Component; * @author Fascinated (fascinated7) */ @Component("autoroles:clear.sub") +@CommandInfo(name = "clear", description = "Clears all auto roles") public class ClearSubCommand extends BatSubCommand { private final GuildService guildService; @Autowired public ClearSubCommand(GuildService guildService) { - super("clear", "Clears all auto roles"); this.guildService = guildService; } diff --git a/src/main/java/cc/fascinated/bat/features/autorole/command/ListSubCommand.java b/src/main/java/cc/fascinated/bat/features/autorole/command/ListSubCommand.java index bba7f74..29ae7f3 100644 --- a/src/main/java/cc/fascinated/bat/features/autorole/command/ListSubCommand.java +++ b/src/main/java/cc/fascinated/bat/features/autorole/command/ListSubCommand.java @@ -1,6 +1,7 @@ package cc.fascinated.bat.features.autorole.command; import cc.fascinated.bat.command.BatSubCommand; +import cc.fascinated.bat.command.CommandInfo; import cc.fascinated.bat.common.EmbedUtils; import cc.fascinated.bat.features.autorole.profile.AutoRoleProfile; import cc.fascinated.bat.model.BatGuild; @@ -16,12 +17,8 @@ import org.springframework.stereotype.Component; * @author Fascinated (fascinated7) */ @Component("autoroles:list.sub") +@CommandInfo(name = "list", description = "Lists all auto roles") public class ListSubCommand extends BatSubCommand { - - public ListSubCommand() { - super("list", "Lists all auto roles"); - } - @Override public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, @NonNull SlashCommandInteraction interaction) { AutoRoleProfile profile = guild.getProfile(AutoRoleProfile.class); diff --git a/src/main/java/cc/fascinated/bat/features/autorole/command/RemoveSubCommand.java b/src/main/java/cc/fascinated/bat/features/autorole/command/RemoveSubCommand.java index 1c511df..e75212b 100644 --- a/src/main/java/cc/fascinated/bat/features/autorole/command/RemoveSubCommand.java +++ b/src/main/java/cc/fascinated/bat/features/autorole/command/RemoveSubCommand.java @@ -1,6 +1,7 @@ package cc.fascinated.bat.features.autorole.command; import cc.fascinated.bat.command.BatSubCommand; +import cc.fascinated.bat.command.CommandInfo; import cc.fascinated.bat.common.EmbedUtils; import cc.fascinated.bat.features.autorole.profile.AutoRoleProfile; import cc.fascinated.bat.model.BatGuild; @@ -20,12 +21,12 @@ import org.springframework.stereotype.Component; * @author Fascinated (fascinated7) */ @Component("autoroles:remove.sub") +@CommandInfo(name = "remove", description = "Removes a role from the auto roles list") public class RemoveSubCommand extends BatSubCommand { private final GuildService guildService; @Autowired public RemoveSubCommand(GuildService guildService) { - super("remove", "Removes a role from the auto roles list"); super.addOption(OptionType.ROLE, "role", "The role to remove", true); this.guildService = guildService; } diff --git a/src/main/java/cc/fascinated/bat/features/birthday/command/BirthdayCommand.java b/src/main/java/cc/fascinated/bat/features/birthday/command/BirthdayCommand.java index 0232ca0..148a2ec 100644 --- a/src/main/java/cc/fascinated/bat/features/birthday/command/BirthdayCommand.java +++ b/src/main/java/cc/fascinated/bat/features/birthday/command/BirthdayCommand.java @@ -1,6 +1,7 @@ package cc.fascinated.bat.features.birthday.command; import cc.fascinated.bat.command.BatCommand; +import cc.fascinated.bat.command.CommandInfo; import lombok.NonNull; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; @@ -10,14 +11,13 @@ import org.springframework.stereotype.Component; * @author Fascinated (fascinated7) */ @Component +@CommandInfo(name = "birthday", description = "Modify your birthday settings.") public class BirthdayCommand extends BatCommand { @Autowired public BirthdayCommand(@NonNull ApplicationContext context) { - super("birthday", "Modify your birthday settings.", true); - - super.addSubCommand("set", context.getBean(SetSubCommand.class)); - super.addSubCommand("remove", context.getBean(RemoveSubCommand.class)); - super.addSubCommand("channel", context.getBean(ChannelSubCommand.class)); - super.addSubCommand("message", context.getBean(MessageSubCommand.class)); + super.addSubCommand(context.getBean(SetSubCommand.class)); + super.addSubCommand(context.getBean(RemoveSubCommand.class)); + super.addSubCommand(context.getBean(ChannelSubCommand.class)); + super.addSubCommand(context.getBean(MessageSubCommand.class)); } } diff --git a/src/main/java/cc/fascinated/bat/features/birthday/command/ChannelSubCommand.java b/src/main/java/cc/fascinated/bat/features/birthday/command/ChannelSubCommand.java index 9e5e108..ec3f01b 100644 --- a/src/main/java/cc/fascinated/bat/features/birthday/command/ChannelSubCommand.java +++ b/src/main/java/cc/fascinated/bat/features/birthday/command/ChannelSubCommand.java @@ -1,6 +1,7 @@ package cc.fascinated.bat.features.birthday.command; import cc.fascinated.bat.command.BatSubCommand; +import cc.fascinated.bat.command.CommandInfo; import cc.fascinated.bat.common.EmbedUtils; import cc.fascinated.bat.common.TextChannelUtils; import cc.fascinated.bat.features.birthday.profile.BirthdayProfile; @@ -23,12 +24,12 @@ import org.springframework.stereotype.Component; * @author Fascinated (fascinated7) */ @Component("birthday:channel.sub") +@CommandInfo(name = "channel", description = "Sets the birthday notification channel", requiredPermissions = Permission.MANAGE_SERVER) public class ChannelSubCommand extends BatSubCommand { private final GuildService guildService; @Autowired public ChannelSubCommand(GuildService guildService) { - super("channel", "Sets the birthday notification channel", Permission.MANAGE_SERVER); super.addOption(OptionType.CHANNEL, "channel", "The channel birthdays will be sent in", false); this.guildService = guildService; } diff --git a/src/main/java/cc/fascinated/bat/features/birthday/command/MessageSubCommand.java b/src/main/java/cc/fascinated/bat/features/birthday/command/MessageSubCommand.java index a465ea7..1ae7295 100644 --- a/src/main/java/cc/fascinated/bat/features/birthday/command/MessageSubCommand.java +++ b/src/main/java/cc/fascinated/bat/features/birthday/command/MessageSubCommand.java @@ -1,6 +1,7 @@ package cc.fascinated.bat.features.birthday.command; import cc.fascinated.bat.command.BatSubCommand; +import cc.fascinated.bat.command.CommandInfo; import cc.fascinated.bat.common.EmbedUtils; import cc.fascinated.bat.features.birthday.profile.BirthdayProfile; import cc.fascinated.bat.model.BatGuild; @@ -25,13 +26,13 @@ import java.util.Date; * @author Fascinated (fascinated7) */ @Component("birthday:message.sub") +@CommandInfo(name = "message", description = "Changes the message that is sent when it is a user's birthday", requiredPermissions = Permission.MANAGE_SERVER) public class MessageSubCommand extends BatSubCommand { private static final SimpleDateFormat FORMATTER = new SimpleDateFormat("dd/MM/yyyy"); private final GuildService guildService; @Autowired public MessageSubCommand(GuildService guildService) { - super("message", "Changes the message that is sent when it is a user's birthday", Permission.MANAGE_SERVER); super.addOption(OptionType.STRING, "message", "The message that is sent. (Placeholders: {user}, {age})", true); this.guildService = guildService; } diff --git a/src/main/java/cc/fascinated/bat/features/birthday/command/RemoveSubCommand.java b/src/main/java/cc/fascinated/bat/features/birthday/command/RemoveSubCommand.java index d323321..94582e3 100644 --- a/src/main/java/cc/fascinated/bat/features/birthday/command/RemoveSubCommand.java +++ b/src/main/java/cc/fascinated/bat/features/birthday/command/RemoveSubCommand.java @@ -1,6 +1,7 @@ package cc.fascinated.bat.features.birthday.command; import cc.fascinated.bat.command.BatSubCommand; +import cc.fascinated.bat.command.CommandInfo; import cc.fascinated.bat.common.EmbedUtils; import cc.fascinated.bat.features.birthday.profile.BirthdayProfile; import cc.fascinated.bat.model.BatGuild; @@ -18,12 +19,12 @@ import org.springframework.stereotype.Component; * @author Fascinated (fascinated7) */ @Component("birthday:remove.sub") +@CommandInfo(name = "remove", description = "Remove your birthday from this guild") public class RemoveSubCommand extends BatSubCommand { private final GuildService guildService; @Autowired public RemoveSubCommand(GuildService guildService) { - super("remove", "Remove your birthday from this guild"); this.guildService = guildService; } diff --git a/src/main/java/cc/fascinated/bat/features/birthday/command/SetSubCommand.java b/src/main/java/cc/fascinated/bat/features/birthday/command/SetSubCommand.java index cdf7634..5d3de41 100644 --- a/src/main/java/cc/fascinated/bat/features/birthday/command/SetSubCommand.java +++ b/src/main/java/cc/fascinated/bat/features/birthday/command/SetSubCommand.java @@ -1,6 +1,7 @@ package cc.fascinated.bat.features.birthday.command; import cc.fascinated.bat.command.BatSubCommand; +import cc.fascinated.bat.command.CommandInfo; import cc.fascinated.bat.common.EmbedUtils; import cc.fascinated.bat.features.birthday.profile.BirthdayProfile; import cc.fascinated.bat.model.BatGuild; @@ -24,13 +25,13 @@ import java.util.Date; * @author Fascinated (fascinated7) */ @Component("birthday:add.sub") +@CommandInfo(name = "set", description = "Add your birthday to this guild") public class SetSubCommand extends BatSubCommand { private static final SimpleDateFormat FORMATTER = new SimpleDateFormat("dd/MM/yyyy"); private final GuildService guildService; @Autowired public SetSubCommand(GuildService guildService) { - super("set", "Add your birthday to this guild"); super.addOption(OptionType.STRING, "birthday", "Your birthday (format: DAY/MONTH/YEAR - 01/05/2004)", true); this.guildService = guildService; } diff --git a/src/main/java/cc/fascinated/bat/features/scoresaber/command/numberone/ChannelSubCommand.java b/src/main/java/cc/fascinated/bat/features/scoresaber/command/numberone/ChannelSubCommand.java index 188966e..85d79b2 100644 --- a/src/main/java/cc/fascinated/bat/features/scoresaber/command/numberone/ChannelSubCommand.java +++ b/src/main/java/cc/fascinated/bat/features/scoresaber/command/numberone/ChannelSubCommand.java @@ -1,6 +1,7 @@ package cc.fascinated.bat.features.scoresaber.command.numberone; import cc.fascinated.bat.command.BatSubCommand; +import cc.fascinated.bat.command.CommandInfo; import cc.fascinated.bat.common.EmbedUtils; import cc.fascinated.bat.common.TextChannelUtils; import cc.fascinated.bat.features.scoresaber.profile.GuildNumberOneScoreFeedProfile; @@ -22,12 +23,12 @@ import org.springframework.stereotype.Component; * @author Fascinated (fascinated7) */ @Component("scoresaber-number-one-feed:channel.sub") +@CommandInfo(name = "channel", description = "Sets the feed channel") public class ChannelSubCommand extends BatSubCommand { private final GuildService guildService; @Autowired public ChannelSubCommand(GuildService guildService) { - super("channel", "Sets the feed channel"); super.addOption(OptionType.CHANNEL, "channel", "The channel scores are sent in", false); this.guildService = guildService; } diff --git a/src/main/java/cc/fascinated/bat/features/scoresaber/command/numberone/NumberOneFeedCommand.java b/src/main/java/cc/fascinated/bat/features/scoresaber/command/numberone/NumberOneFeedCommand.java index 36c30f3..fec8567 100644 --- a/src/main/java/cc/fascinated/bat/features/scoresaber/command/numberone/NumberOneFeedCommand.java +++ b/src/main/java/cc/fascinated/bat/features/scoresaber/command/numberone/NumberOneFeedCommand.java @@ -1,6 +1,7 @@ package cc.fascinated.bat.features.scoresaber.command.numberone; import cc.fascinated.bat.command.BatCommand; +import cc.fascinated.bat.command.CommandInfo; import lombok.NonNull; import net.dv8tion.jda.api.Permission; import org.springframework.context.ApplicationContext; @@ -10,11 +11,10 @@ import org.springframework.stereotype.Component; * @author Fascinated (fascinated7) */ @Component("scoresaber-number-one-feed") +@CommandInfo(name = "scoresaber-number-one-feed", description = "Modifies the settings for the feed.", requiredPermissions = Permission.MANAGE_SERVER) public class NumberOneFeedCommand extends BatCommand { public NumberOneFeedCommand(@NonNull ApplicationContext context) { - super("scoresaber-number-one-feed", "Modifies the settings for the feed.", true, Permission.MANAGE_SERVER); - - super.addSubCommand("channel", context.getBean(ChannelSubCommand.class)); - super.addSubCommand("reset", context.getBean(ResetSubCommand.class)); + super.addSubCommand(context.getBean(ChannelSubCommand.class)); + super.addSubCommand(context.getBean(ResetSubCommand.class)); } } diff --git a/src/main/java/cc/fascinated/bat/features/scoresaber/command/numberone/ResetSubCommand.java b/src/main/java/cc/fascinated/bat/features/scoresaber/command/numberone/ResetSubCommand.java index 1f4768b..8a43fe9 100644 --- a/src/main/java/cc/fascinated/bat/features/scoresaber/command/numberone/ResetSubCommand.java +++ b/src/main/java/cc/fascinated/bat/features/scoresaber/command/numberone/ResetSubCommand.java @@ -1,6 +1,7 @@ package cc.fascinated.bat.features.scoresaber.command.numberone; import cc.fascinated.bat.command.BatSubCommand; +import cc.fascinated.bat.command.CommandInfo; import cc.fascinated.bat.common.EmbedUtils; import cc.fascinated.bat.features.scoresaber.profile.GuildNumberOneScoreFeedProfile; import cc.fascinated.bat.model.BatGuild; @@ -17,12 +18,12 @@ import org.springframework.stereotype.Component; * @author Fascinated (fascinated7) */ @Component("scoresaber-number-one-feed:reset.sub") +@CommandInfo(name = "reset", description = "Resets the settings") public class ResetSubCommand extends BatSubCommand { private final GuildService guildService; @Autowired public ResetSubCommand(GuildService guildService) { - super("reset", "Resets the settings"); this.guildService = guildService; } diff --git a/src/main/java/cc/fascinated/bat/features/scoresaber/command/scoresaber/LinkSubCommand.java b/src/main/java/cc/fascinated/bat/features/scoresaber/command/scoresaber/LinkSubCommand.java index 4238ca9..6dd81b6 100644 --- a/src/main/java/cc/fascinated/bat/features/scoresaber/command/scoresaber/LinkSubCommand.java +++ b/src/main/java/cc/fascinated/bat/features/scoresaber/command/scoresaber/LinkSubCommand.java @@ -1,6 +1,7 @@ package cc.fascinated.bat.features.scoresaber.command.scoresaber; import cc.fascinated.bat.command.BatSubCommand; +import cc.fascinated.bat.command.CommandInfo; import cc.fascinated.bat.common.EmbedUtils; import cc.fascinated.bat.features.scoresaber.profile.UserScoreSaberProfile; import cc.fascinated.bat.model.BatGuild; @@ -21,13 +22,13 @@ import org.springframework.stereotype.Component; * @author Fascinated (fascinated7) */ @Component("scoresaber:link.sub") +@CommandInfo(name = "link", description = "Links your ScoreSaber profile") public class LinkSubCommand extends BatSubCommand { private final ScoreSaberService scoreSaberService; private final UserService userService; @Autowired public LinkSubCommand(@NonNull ScoreSaberService scoreSaberService, @NonNull UserService userService) { - super("link", "Links your ScoreSaber profile"); super.addOption(OptionType.STRING, "link", "Link your ScoreSaber profile", true); this.scoreSaberService = scoreSaberService; this.userService = userService; diff --git a/src/main/java/cc/fascinated/bat/features/scoresaber/command/scoresaber/MeSubCommand.java b/src/main/java/cc/fascinated/bat/features/scoresaber/command/scoresaber/MeSubCommand.java index 0c45e81..bf03843 100644 --- a/src/main/java/cc/fascinated/bat/features/scoresaber/command/scoresaber/MeSubCommand.java +++ b/src/main/java/cc/fascinated/bat/features/scoresaber/command/scoresaber/MeSubCommand.java @@ -1,6 +1,7 @@ package cc.fascinated.bat.features.scoresaber.command.scoresaber; import cc.fascinated.bat.command.BatSubCommand; +import cc.fascinated.bat.command.CommandInfo; import cc.fascinated.bat.model.BatGuild; import cc.fascinated.bat.model.BatUser; import cc.fascinated.bat.service.ScoreSaberService; @@ -15,12 +16,12 @@ import org.springframework.stereotype.Component; * @author Fascinated (fascinated7) */ @Component("scoresaber:me.sub") +@CommandInfo(name = "me", description = "Gets your ScoreSaber profile") public class MeSubCommand extends BatSubCommand { private final ScoreSaberService scoreSaberService; @Autowired public MeSubCommand(@NonNull ScoreSaberService scoreSaberService) { - super("me", "Gets your ScoreSaber profile"); this.scoreSaberService = scoreSaberService; } diff --git a/src/main/java/cc/fascinated/bat/features/scoresaber/command/scoresaber/ResetSubCommand.java b/src/main/java/cc/fascinated/bat/features/scoresaber/command/scoresaber/ResetSubCommand.java index 355701d..5ece8af 100644 --- a/src/main/java/cc/fascinated/bat/features/scoresaber/command/scoresaber/ResetSubCommand.java +++ b/src/main/java/cc/fascinated/bat/features/scoresaber/command/scoresaber/ResetSubCommand.java @@ -1,6 +1,7 @@ package cc.fascinated.bat.features.scoresaber.command.scoresaber; import cc.fascinated.bat.command.BatSubCommand; +import cc.fascinated.bat.command.CommandInfo; import cc.fascinated.bat.common.EmbedUtils; import cc.fascinated.bat.features.scoresaber.profile.UserScoreSaberProfile; import cc.fascinated.bat.model.BatGuild; @@ -17,12 +18,12 @@ import org.springframework.stereotype.Component; * @author Fascinated (fascinated7) */ @Component("scoresaber:reset.sub") +@CommandInfo(name = "reset", description = "Reset your settings") public class ResetSubCommand extends BatSubCommand { private final UserService userService; @Autowired public ResetSubCommand(@NonNull UserService userService) { - super("reset", "Reset your settings"); this.userService = userService; } diff --git a/src/main/java/cc/fascinated/bat/features/scoresaber/command/scoresaber/ScoreSaberCommand.java b/src/main/java/cc/fascinated/bat/features/scoresaber/command/scoresaber/ScoreSaberCommand.java index 84da4a9..7a8393a 100644 --- a/src/main/java/cc/fascinated/bat/features/scoresaber/command/scoresaber/ScoreSaberCommand.java +++ b/src/main/java/cc/fascinated/bat/features/scoresaber/command/scoresaber/ScoreSaberCommand.java @@ -1,6 +1,7 @@ package cc.fascinated.bat.features.scoresaber.command.scoresaber; import cc.fascinated.bat.command.BatCommand; +import cc.fascinated.bat.command.CommandInfo; import cc.fascinated.bat.common.Colors; import cc.fascinated.bat.common.DateUtils; import cc.fascinated.bat.common.EmbedUtils; @@ -26,18 +27,18 @@ import java.time.LocalDateTime; * @author Fascinated (fascinated7) */ @Component +@CommandInfo(name = "scoresaber", description = "General ScoreSaber commands") public class ScoreSaberCommand extends BatCommand { private final ScoreSaberService scoreSaberService; @Autowired public ScoreSaberCommand(@NonNull ScoreSaberService scoreSaberService, @NonNull ApplicationContext context) { - super("scoresaber", "General ScoreSaber commands"); this.scoreSaberService = scoreSaberService; - super.addSubCommand("link", context.getBean(LinkSubCommand.class)); - super.addSubCommand("user", context.getBean(UserSubCommand.class)); - super.addSubCommand("me", context.getBean(MeSubCommand.class)); - super.addSubCommand("reset", context.getBean(ResetSubCommand.class)); + super.addSubCommand(context.getBean(LinkSubCommand.class)); + super.addSubCommand(context.getBean(UserSubCommand.class)); + super.addSubCommand(context.getBean(MeSubCommand.class)); + super.addSubCommand(context.getBean(ResetSubCommand.class)); } @Override diff --git a/src/main/java/cc/fascinated/bat/features/scoresaber/command/scoresaber/UserSubCommand.java b/src/main/java/cc/fascinated/bat/features/scoresaber/command/scoresaber/UserSubCommand.java index 1575fb1..fdad10b 100644 --- a/src/main/java/cc/fascinated/bat/features/scoresaber/command/scoresaber/UserSubCommand.java +++ b/src/main/java/cc/fascinated/bat/features/scoresaber/command/scoresaber/UserSubCommand.java @@ -1,6 +1,7 @@ package cc.fascinated.bat.features.scoresaber.command.scoresaber; import cc.fascinated.bat.command.BatSubCommand; +import cc.fascinated.bat.command.CommandInfo; import cc.fascinated.bat.common.EmbedUtils; import cc.fascinated.bat.model.BatGuild; import cc.fascinated.bat.model.BatUser; @@ -19,13 +20,13 @@ import org.springframework.stereotype.Component; * @author Fascinated (fascinated7) */ @Component("scoresaber:user.sub") +@CommandInfo(name = "user", description = "Gets a ScoreSaber profile") public class UserSubCommand extends BatSubCommand { private final ScoreSaberService scoreSaberService; private final UserService userService; @Autowired public UserSubCommand(@NonNull ScoreSaberService scoreSaberService, @NonNull UserService userService) { - super("user", "Gets a ScoreSaber profile"); super.addOption(OptionType.USER, "user", "The user to view the ScoreSaber profile of", true); this.scoreSaberService = scoreSaberService; this.userService = userService; diff --git a/src/main/java/cc/fascinated/bat/features/scoresaber/command/userfeed/ChannelSubCommand.java b/src/main/java/cc/fascinated/bat/features/scoresaber/command/userfeed/ChannelSubCommand.java index 5d8cf23..42ab983 100644 --- a/src/main/java/cc/fascinated/bat/features/scoresaber/command/userfeed/ChannelSubCommand.java +++ b/src/main/java/cc/fascinated/bat/features/scoresaber/command/userfeed/ChannelSubCommand.java @@ -1,6 +1,7 @@ package cc.fascinated.bat.features.scoresaber.command.userfeed; import cc.fascinated.bat.command.BatSubCommand; +import cc.fascinated.bat.command.CommandInfo; import cc.fascinated.bat.common.EmbedUtils; import cc.fascinated.bat.common.TextChannelUtils; import cc.fascinated.bat.features.scoresaber.profile.GuildUserScoreFeedProfile; @@ -22,12 +23,12 @@ import org.springframework.stereotype.Component; * @author Fascinated (fascinated7) */ @Component("scoresaber-user-feed:channel.sub") +@CommandInfo(name = "channel", description = "Sets the feed channel") public class ChannelSubCommand extends BatSubCommand { private final GuildService guildService; @Autowired public ChannelSubCommand(GuildService guildService) { - super("channel", "Sets the feed channel"); super.addOption(OptionType.CHANNEL, "channel", "The channel scores are sent in", false); this.guildService = guildService; } diff --git a/src/main/java/cc/fascinated/bat/features/scoresaber/command/userfeed/ResetSubCommand.java b/src/main/java/cc/fascinated/bat/features/scoresaber/command/userfeed/ResetSubCommand.java index b447f0a..c735874 100644 --- a/src/main/java/cc/fascinated/bat/features/scoresaber/command/userfeed/ResetSubCommand.java +++ b/src/main/java/cc/fascinated/bat/features/scoresaber/command/userfeed/ResetSubCommand.java @@ -1,6 +1,7 @@ package cc.fascinated.bat.features.scoresaber.command.userfeed; import cc.fascinated.bat.command.BatSubCommand; +import cc.fascinated.bat.command.CommandInfo; import cc.fascinated.bat.common.EmbedUtils; import cc.fascinated.bat.features.scoresaber.profile.GuildUserScoreFeedProfile; import cc.fascinated.bat.model.BatGuild; @@ -17,12 +18,12 @@ import org.springframework.stereotype.Component; * @author Fascinated (fascinated7) */ @Component("scoresaber-user-feed:reset.sub") +@CommandInfo(name = "reset", description = "Resets the settings") public class ResetSubCommand extends BatSubCommand { private final GuildService guildService; @Autowired public ResetSubCommand(GuildService guildService) { - super("reset", "Resets the settings"); this.guildService = guildService; } diff --git a/src/main/java/cc/fascinated/bat/features/scoresaber/command/userfeed/UserFeedCommand.java b/src/main/java/cc/fascinated/bat/features/scoresaber/command/userfeed/UserFeedCommand.java index 84feb1f..125b0fd 100644 --- a/src/main/java/cc/fascinated/bat/features/scoresaber/command/userfeed/UserFeedCommand.java +++ b/src/main/java/cc/fascinated/bat/features/scoresaber/command/userfeed/UserFeedCommand.java @@ -1,6 +1,7 @@ package cc.fascinated.bat.features.scoresaber.command.userfeed; import cc.fascinated.bat.command.BatCommand; +import cc.fascinated.bat.command.CommandInfo; import lombok.NonNull; import net.dv8tion.jda.api.Permission; import org.springframework.context.ApplicationContext; @@ -10,12 +11,11 @@ import org.springframework.stereotype.Component; * @author Fascinated (fascinated7) */ @Component("scoresaber-user-feed.command") +@CommandInfo(name = "scoresaber-user-feed", description = "Modifies the settings for the feed.", requiredPermissions = Permission.MANAGE_SERVER) public class UserFeedCommand extends BatCommand { public UserFeedCommand(@NonNull ApplicationContext context) { - super("scoresaber-user-feed", "Modifies the settings for the feed.", true, Permission.MANAGE_SERVER); - - super.addSubCommand("user", context.getBean(UserSubCommand.class)); - super.addSubCommand("channel", context.getBean(ChannelSubCommand.class)); - super.addSubCommand("reset", context.getBean(ResetSubCommand.class)); + super.addSubCommand(context.getBean(UserSubCommand.class)); + super.addSubCommand(context.getBean(ChannelSubCommand.class)); + super.addSubCommand(context.getBean(ResetSubCommand.class)); } } diff --git a/src/main/java/cc/fascinated/bat/features/scoresaber/command/userfeed/UserSubCommand.java b/src/main/java/cc/fascinated/bat/features/scoresaber/command/userfeed/UserSubCommand.java index 2e5b55a..8b90d8d 100644 --- a/src/main/java/cc/fascinated/bat/features/scoresaber/command/userfeed/UserSubCommand.java +++ b/src/main/java/cc/fascinated/bat/features/scoresaber/command/userfeed/UserSubCommand.java @@ -1,6 +1,7 @@ package cc.fascinated.bat.features.scoresaber.command.userfeed; import cc.fascinated.bat.command.BatSubCommand; +import cc.fascinated.bat.command.CommandInfo; import cc.fascinated.bat.common.EmbedUtils; import cc.fascinated.bat.features.scoresaber.profile.GuildUserScoreFeedProfile; import cc.fascinated.bat.features.scoresaber.profile.UserScoreSaberProfile; @@ -22,13 +23,13 @@ import org.springframework.stereotype.Component; * @author Fascinated (fascinated7) */ @Component("scoresaber-user-feed:user.sub") +@CommandInfo(name = "user", description = "Adds or removes a user from the feed") public class UserSubCommand extends BatSubCommand { private final GuildService guildService; private final UserService userService; @Autowired public UserSubCommand(GuildService guildService, UserService userService) { - super("user", "Adds or removes a user from the feed"); super.addOption(OptionType.USER, "user", "Add or remove a user from the score feed", false); this.guildService = guildService; this.userService = userService; diff --git a/src/main/java/cc/fascinated/bat/service/CommandService.java b/src/main/java/cc/fascinated/bat/service/CommandService.java index 91ce62b..9e01513 100644 --- a/src/main/java/cc/fascinated/bat/service/CommandService.java +++ b/src/main/java/cc/fascinated/bat/service/CommandService.java @@ -21,10 +21,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.DependsOn; import org.springframework.stereotype.Service; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; /** * @author Fascinated (fascinated7) @@ -61,11 +58,12 @@ public class CommandService extends ListenerAdapter { * @param command The command to register */ public void registerCommand(@NonNull BatCommand command) { - if (commands.get(command.getName().toLowerCase()) != null) { + String commandName = command.getCommandInfo().name().toLowerCase(); + if (commands.get(commandName) != null) { return; } - log.info("Registered command \"{}\"", command.getName()); - commands.put(command.getName().toLowerCase(), command); + log.info("Registered command \"{}\"", command.getCommandInfo().name()); + commands.put(commandName, command); } /** @@ -132,14 +130,14 @@ public class CommandService extends ListenerAdapter { // No args provided, use the main command executor if (event.getInteraction().getSubcommandName() == null) { executor = command; - requiredPermissions.addAll(command.getRequiredPermissions()); + requiredPermissions.addAll(Arrays.asList(command.getCommandInfo().requiredPermissions())); } else { // Subcommand provided, use the subcommand executor for (Map.Entry subCommand : command.getSubCommands().entrySet()) { if (subCommand.getKey().equalsIgnoreCase(event.getInteraction().getSubcommandName())) { executor = subCommand.getValue(); - requiredPermissions.addAll(subCommand.getValue().getRequiredPermissions()); - requiredPermissions.addAll(command.getRequiredPermissions()); // not sure if we'd want this, but it's here for now + requiredPermissions.addAll(Arrays.asList(subCommand.getValue().getCommandInfo().requiredPermissions())); + requiredPermissions.addAll(Arrays.asList(command.getCommandInfo().requiredPermissions())); // not sure if we'd want this, but it's here for now break; } }