Bat/src/main/java/cc/fascinated/bat/command/impl/HelpCommand.java

110 lines
4.8 KiB
Java
Raw Normal View History

2024-06-27 16:01:27 +01:00
package cc.fascinated.bat.command.impl;
import cc.fascinated.bat.Consts;
import cc.fascinated.bat.command.BatCommand;
2024-06-27 16:24:08 +01:00
import cc.fascinated.bat.command.BatSubCommand;
2024-06-27 16:01:27 +01:00
import cc.fascinated.bat.command.Category;
import cc.fascinated.bat.common.EmbedUtils;
import cc.fascinated.bat.event.EventListener;
import cc.fascinated.bat.model.BatGuild;
import cc.fascinated.bat.model.BatUser;
import cc.fascinated.bat.service.CommandService;
import lombok.NonNull;
import net.dv8tion.jda.api.entities.Member;
import net.dv8tion.jda.api.entities.channel.middleman.MessageChannel;
import net.dv8tion.jda.api.events.interaction.component.StringSelectInteractionEvent;
import net.dv8tion.jda.api.interactions.commands.SlashCommandInteraction;
2024-06-27 16:24:08 +01:00
import net.dv8tion.jda.api.interactions.commands.build.SubcommandData;
2024-06-27 16:01:27 +01:00
import net.dv8tion.jda.api.interactions.components.ActionRow;
import net.dv8tion.jda.api.interactions.components.buttons.Button;
import net.dv8tion.jda.api.interactions.components.buttons.ButtonStyle;
import net.dv8tion.jda.api.interactions.components.selections.SelectOption;
import net.dv8tion.jda.api.interactions.components.selections.StringSelectMenu;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.Arrays;
2024-06-27 16:24:08 +01:00
import java.util.List;
import java.util.Map;
2024-06-27 16:01:27 +01:00
/**
* @author Fascinated (fascinated7)
*/
@Component
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;
}
@Override
public void execute(BatGuild guild, @NonNull BatUser user, @NonNull MessageChannel channel, Member member, @NonNull SlashCommandInteraction interaction) {
String categories = "";
for (Category category : Category.values()) {
long commandCount = commandService.getCommandsByCategory(category).size();
2024-06-27 16:01:27 +01:00
categories += "**%s** - %s Commands\n".formatted(category.getName(), commandCount);
}
SelectOption[] options = Arrays.stream(Category.values()).map(category ->
SelectOption.of(category.getName(), category.getName()).withEmoji(category.getEmoji()))
.toArray(SelectOption[]::new);
interaction.replyEmbeds(EmbedUtils.genericEmbed()
.setDescription("Here are the available command categories: \n\n" + categories)
.build()).addComponents(
ActionRow.of(
Button.of(ButtonStyle.LINK, Consts.INVITE_URL, "Invite"),
Button.of(ButtonStyle.LINK, Consts.SUPPORT_INVITE_URL, "Support")
),
ActionRow.of(
StringSelectMenu.create("help-menu")
.addOptions(options)
.build()
)
).queue();
}
@Override
public void onStringSelectInteraction(BatGuild guild, @NonNull BatUser user, @NonNull StringSelectInteractionEvent event) {
Category category = Category.getByName(event.getSelectedOptions().get(0).getValue());
if (category == null) {
event.reply("Invalid category selected.").queue();
return;
}
String commands = "";
List<BatCommand> categoryCommands = commandService.getCommandsByCategory(category);
2024-06-27 16:24:08 +01:00
if (categoryCommands.isEmpty()) {
commands = "No commands available in this category.";
} else {
for (BatCommand command : categoryCommands) {
if (!command.getSubCommands().isEmpty()) {
for (Map.Entry<String, BatSubCommand> entry : command.getSubCommands().entrySet()) {
BatSubCommand subCommand = entry.getValue();
SubcommandData commandData = subCommand.getCommandData();
commands += "</%s %s:%s> - %s\n".formatted(
command.getName(),
commandData.getName(),
subCommand.getCommandSnowflake(),
commandData.getDescription()
);
}
continue;
}
2024-06-27 16:01:27 +01:00
commands += "</%s:%s> - %s\n".formatted(
command.getName(),
command.getCommandSnowflake(),
command.getDescription()
);
}
}
event.editMessageEmbeds(EmbedUtils.genericEmbed()
.setDescription("There is %S commands in the **%s** category: \n\n%s".formatted(categoryCommands.size(), category.getName(), commands))
2024-06-27 16:01:27 +01:00
.build()).queue();
}
}