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.getCommands().values().stream().filter(command -> command.getCategory() == category).count();
|
|
|
|
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 = "";
|
2024-06-27 16:24:08 +01:00
|
|
|
List<BatCommand> categoryCommands = commandService.getCommands().values().stream()
|
|
|
|
.filter(command -> command.getCategory() == category)
|
|
|
|
.toList();
|
|
|
|
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("The available commands in the **%s** category: \n\n%s".formatted(category.getName(), commands))
|
|
|
|
.build()).queue();
|
|
|
|
}
|
|
|
|
}
|