package me.chayapak1.chomens_bot.commands; import me.chayapak1.chomens_bot.Bot; import me.chayapak1.chomens_bot.command.Command; import me.chayapak1.chomens_bot.command.CommandContext; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.JoinConfiguration; import net.kyori.adventure.text.format.NamedTextColor; import java.util.ArrayList; import java.util.List; public class HelpCommand implements Command { public String name() { return "help"; } public String description() { return "Shows the help"; } public List<String> usage() { final List<String> usages = new ArrayList<>(); usages.add("[command]"); return usages; } public List<String> alias() { final List<String> aliases = new ArrayList<>(); aliases.add("heko"); aliases.add("cmds"); aliases.add("commands"); return aliases; } public int trustLevel() { return 0; } private Bot bot; public Component execute(CommandContext context, String[] args, String[] fullArgs) { this.bot = context.bot(); if (args.length == 0) { sendCommandList(context); return Component.text("success"); } else { return sendUsages(context, args); } } public void sendCommandList(CommandContext context) { final List<Component> list = new ArrayList<>(); list.addAll(getCommandListByTrustLevel(0)); list.addAll(getCommandListByTrustLevel(1)); list.addAll(getCommandListByTrustLevel(2)); final Component component = Component.empty() .append(Component.text("Commands ").color(NamedTextColor.GRAY)) .append(Component.text("(").color(NamedTextColor.DARK_GRAY)) .append(Component.text("Length: ").color(NamedTextColor.GRAY)) .append(Component.text(list.size()).color(NamedTextColor.GREEN)) .append(Component.text(") ").color(NamedTextColor.DARK_GRAY)) .append(Component.text("(").color(NamedTextColor.DARK_GRAY)) .append(Component.text("Public ").color(NamedTextColor.GREEN)) .append(Component.text("Trusted ").color(NamedTextColor.RED)) .append(Component.text("Owner").color(NamedTextColor.DARK_RED)) .append(Component.text(") - ").color(NamedTextColor.DARK_GRAY)) .append(Component.join(JoinConfiguration.separator(Component.space()), list)); context.sendOutput(component); } public List<Component> getCommandListByTrustLevel (int trustLevel) { final List<Component> list = new ArrayList<>(); for (Command command : bot.commandHandler().commands()) { final String name = command.name(); if (command.trustLevel() != trustLevel) continue; list.add(Component.text(name).color(getColorByTrustLevel(trustLevel))); } return list; } public NamedTextColor getColorByTrustLevel (int trustLevel) { return switch (trustLevel) { case 0 -> NamedTextColor.GREEN; case 1 -> NamedTextColor.RED; case 2 -> NamedTextColor.DARK_RED; default -> NamedTextColor.WHITE; // hm? }; } public Component sendUsages (CommandContext context, String[] args) { final Bot bot = context.bot(); final String prefix = bot.chatCommandHandler().prefix(); final String commandName = args[0]; for (Command command : bot.commandHandler().commands()) { if (!command.name().equals(commandName) && !command.alias().contains(commandName)) continue; final List<Component> usages = new ArrayList<>(); usages.add( Component.empty() .append(Component.text(prefix + commandName).color(NamedTextColor.GOLD)) .append(Component.text( (command.alias().size() > 0 && !command.alias().get(0).equals("")) ? " (" + String.join(", ", command.alias()) + ")" : "" )) .append(Component.text(" - " + command.description()).color(NamedTextColor.GRAY)) ); usages.add( Component.empty() .append(Component.text("Trust level: ").color(NamedTextColor.GREEN)) .append(Component.text(command.trustLevel()).color(NamedTextColor.YELLOW)) ); for (String usage : command.usage()) { usages.add( Component.empty() .append(Component.text(prefix + commandName).color(NamedTextColor.GOLD)) .append(Component.text(" ")) .append(Component.text(usage).color(NamedTextColor.AQUA)) ); } context.sendOutput(Component.join(JoinConfiguration.separator(Component.newline()), usages)); return Component.text("success"); } return Component.text("Unknown command").color(NamedTextColor.RED); } }