cleanup commands

This commit is contained in:
Lee 2024-06-27 19:36:52 +01:00
parent 3d39fd9784
commit f062fa21c3
35 changed files with 162 additions and 145 deletions

@ -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 {

@ -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);

@ -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);
}

@ -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;
}

@ -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));
}
}

@ -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;
}

@ -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);

@ -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;
}

@ -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));
}
}

@ -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;
}

@ -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;
}

@ -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;
}

@ -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;
}

@ -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;
}

@ -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));
}
}

@ -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;
}

@ -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;

@ -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;
}

@ -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;
}

@ -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

@ -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;

@ -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;
}

@ -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;
}

@ -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));
}
}

@ -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;

@ -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<String, BatSubCommand> 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;
}
}