diff --git a/src/main/java/de/limited_dev/lil_judd/Main.java b/src/main/java/de/limited_dev/lil_judd/Main.java index 9a9e56b..81b74e2 100644 --- a/src/main/java/de/limited_dev/lil_judd/Main.java +++ b/src/main/java/de/limited_dev/lil_judd/Main.java @@ -1,9 +1,11 @@ package de.limited_dev.lil_judd; +import de.limited_dev.lil_judd.commands.components.CommandManager; import de.limited_dev.lil_judd.listeners.GuildStateListener; import de.limited_dev.lil_judd.listeners.ReadyListener; import de.limited_dev.lil_judd.listeners.SlashCommandInteractionListener; import de.limited_dev.lil_judd.util.Logger; +import de.limited_dev.lil_judd.util.SlashCommandHelper; import de.limited_dev.lil_judd.util.managers.TokenManager; import net.dv8tion.jda.api.JDA; import net.dv8tion.jda.api.JDABuilder; @@ -30,6 +32,8 @@ public class Main { .setStatus(OnlineStatus.DO_NOT_DISTURB) .build(); + CommandManager.registerCommands(); + jda.addEventListener(new ReadyListener()); jda.addEventListener(new SlashCommandInteractionListener()); jda.addEventListener(new GuildStateListener()); diff --git a/src/main/java/de/limited_dev/lil_judd/commands/InfoCommand.java b/src/main/java/de/limited_dev/lil_judd/commands/InfoCommand.java new file mode 100644 index 0000000..5b709c6 --- /dev/null +++ b/src/main/java/de/limited_dev/lil_judd/commands/InfoCommand.java @@ -0,0 +1,20 @@ +package de.limited_dev.lil_judd.commands; + +import de.limited_dev.lil_judd.Main; +import de.limited_dev.lil_judd.commands.components.Command; +import de.limited_dev.lil_judd.commands.components.Option; +import de.limited_dev.lil_judd.util.EmbeddedMessageHelper; +import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent; + +public class InfoCommand extends Command { + public InfoCommand() { + super("info", "Let me tell you about me", null); + } + + @Override + public void onSlashCommandInteraction(SlashCommandInteractionEvent event) { + EmbeddedMessageHelper.sendSimpleOneLiner(event, + "Bot information","I'm li'l Judd.\nI was created to help you & your Splatoon competitive Team.\nContact me with \"/\"-commands", + "https://external-content.duckduckgo.com/iu/?u=https%3A%2F%2Fvignette.wikia.nocookie.net%2Fsplatoon%2Fimages%2Fa%2Fa3%2FLittle_Judd_Animated.gif%2Frevision%2Flatest%3Fcb%3D20170605172120&f=1&nofb=1&ipt=f6197a3fdaf8bd6755347ba4e4c67a91320ff047969a9fa1ef4ee3bc88840ffe&ipo=images"); + } +} diff --git a/src/main/java/de/limited_dev/lil_judd/commands/PingCommand.java b/src/main/java/de/limited_dev/lil_judd/commands/PingCommand.java new file mode 100644 index 0000000..e667960 --- /dev/null +++ b/src/main/java/de/limited_dev/lil_judd/commands/PingCommand.java @@ -0,0 +1,19 @@ +package de.limited_dev.lil_judd.commands; + + +import de.limited_dev.lil_judd.Main; +import de.limited_dev.lil_judd.commands.components.Command; +import de.limited_dev.lil_judd.commands.components.Option; +import de.limited_dev.lil_judd.util.EmbeddedMessageHelper; +import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent; + +public class PingCommand extends Command { + public PingCommand() { + super("ping", "Pong! Get the Ping to my base", null); + } + + @Override + public void onSlashCommandInteraction(SlashCommandInteractionEvent event) { + EmbeddedMessageHelper.sendSimpleOneLiner(event, "Connection speed", "My connection to base takes **" + Main.getJda().getGatewayPing() + "ms**", null); + } +} diff --git a/src/main/java/de/limited_dev/lil_judd/commands/SetupFeatureCommand.java b/src/main/java/de/limited_dev/lil_judd/commands/SetupFeatureCommand.java new file mode 100644 index 0000000..647c1d5 --- /dev/null +++ b/src/main/java/de/limited_dev/lil_judd/commands/SetupFeatureCommand.java @@ -0,0 +1,22 @@ +package de.limited_dev.lil_judd.commands; + +import de.limited_dev.lil_judd.commands.components.Command; +import de.limited_dev.lil_judd.commands.components.Option; +import de.limited_dev.lil_judd.util.EmbeddedMessageHelper; +import net.dv8tion.jda.api.Permission; +import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent; + +public class SetupFeatureCommand extends Command { + public SetupFeatureCommand() { + super("setup", "Setup a Feature", new Option[]{ new Option(null, "Feature name", "Des", false)}); + } + + @Override + public void onSlashCommandInteraction(SlashCommandInteractionEvent event) { + if(!event.getGuild().getMemberById(event.getUser().getId()).hasPermission(Permission.ADMINISTRATOR)){ + EmbeddedMessageHelper.sendSimpleOneLiner(event, "You do not have the Permission", "Sorry, but you don't have the Permission to run this command", null); + return; + } + + } +} diff --git a/src/main/java/de/limited_dev/lil_judd/commands/components/Command.java b/src/main/java/de/limited_dev/lil_judd/commands/components/Command.java new file mode 100644 index 0000000..e87e0d0 --- /dev/null +++ b/src/main/java/de/limited_dev/lil_judd/commands/components/Command.java @@ -0,0 +1,46 @@ +package de.limited_dev.lil_judd.commands.components; + +import de.limited_dev.lil_judd.Main; +import de.limited_dev.lil_judd.commands.components.Option; +import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent; + +public class Command { + + private final String name; + private final String description; + private final Option[] options; + + public Command(String name, String description, Option[] options){ + this.name = name; + this.description = description; + this.options = options; + } + + public void onSlashCommandInteraction(SlashCommandInteractionEvent event){ + + } + + protected void sendReply(SlashCommandInteractionEvent event, String msg){ + event.reply(msg).queue(); + } + + public String getName() { + return name.toLowerCase(); + } + + public String getDescription() { + return description; + } + + public Option[] getOptions() { + return options; + } + + public boolean hasOptions(){ + return options != null; + } + + public int getAmountOfOptions(){ + return options.length; + } +} diff --git a/src/main/java/de/limited_dev/lil_judd/commands/components/CommandManager.java b/src/main/java/de/limited_dev/lil_judd/commands/components/CommandManager.java new file mode 100644 index 0000000..4a59b72 --- /dev/null +++ b/src/main/java/de/limited_dev/lil_judd/commands/components/CommandManager.java @@ -0,0 +1,22 @@ +package de.limited_dev.lil_judd.commands.components; + +import de.limited_dev.lil_judd.commands.InfoCommand; +import de.limited_dev.lil_judd.commands.PingCommand; +import de.limited_dev.lil_judd.commands.SetupFeatureCommand; + +import java.util.concurrent.CopyOnWriteArrayList; + +public class CommandManager { + + private static CopyOnWriteArrayList commands = new CopyOnWriteArrayList<>(); + + public static void registerCommands(){ + commands.add(new PingCommand()); + commands.add(new InfoCommand()); + commands.add(new SetupFeatureCommand()); + } + + public static CopyOnWriteArrayList getCommands() { + return commands; + } +} diff --git a/src/main/java/de/limited_dev/lil_judd/commands/components/Option.java b/src/main/java/de/limited_dev/lil_judd/commands/components/Option.java new file mode 100644 index 0000000..665988e --- /dev/null +++ b/src/main/java/de/limited_dev/lil_judd/commands/components/Option.java @@ -0,0 +1,34 @@ +package de.limited_dev.lil_judd.commands.components; + +import net.dv8tion.jda.api.interactions.commands.OptionType; + +public class Option { + + private final OptionType type; + private final String name; + private final String description; + private final boolean optional; + + public Option(OptionType type, String name, String description, boolean optional){ + this.type = type; + this.name = name; + this.description = description; + this.optional = optional; + } + + public OptionType getType() { + return type; + } + + public String getName() { + return name; + } + + public String getDescription() { + return description; + } + + public boolean isOptional() { + return optional; + } +} diff --git a/src/main/java/de/limited_dev/lil_judd/listeners/SlashCommandInteractionListener.java b/src/main/java/de/limited_dev/lil_judd/listeners/SlashCommandInteractionListener.java index 6439624..1c764ae 100644 --- a/src/main/java/de/limited_dev/lil_judd/listeners/SlashCommandInteractionListener.java +++ b/src/main/java/de/limited_dev/lil_judd/listeners/SlashCommandInteractionListener.java @@ -1,6 +1,8 @@ package de.limited_dev.lil_judd.listeners; import de.limited_dev.lil_judd.Main; +import de.limited_dev.lil_judd.commands.components.Command; +import de.limited_dev.lil_judd.commands.components.CommandManager; import de.limited_dev.lil_judd.util.EmbeddedMessageHelper; import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent; import net.dv8tion.jda.api.hooks.ListenerAdapter; @@ -10,11 +12,10 @@ public class SlashCommandInteractionListener extends ListenerAdapter { @Override public void onSlashCommandInteraction(@NotNull SlashCommandInteractionEvent event) { - if(event.getName().equals("ping")){ - event.reply("My connection to the home base takes **" + Main.getJda().getGatewayPing() + "ms**").queue(); - } - else if(event.getName().equals("info")){ - EmbeddedMessageHelper.sendSimpleOneLiner(event, Main.getJda().getSelfUser().getName(), "Bot information","I'm li'l Judd. I'm better then him, and you know it.", "https://external-content.duckduckgo.com/iu/?u=https%3A%2F%2Fvignette.wikia.nocookie.net%2Fsplatoon%2Fimages%2Fa%2Fa3%2FLittle_Judd_Animated.gif%2Frevision%2Flatest%3Fcb%3D20170605172120&f=1&nofb=1&ipt=f6197a3fdaf8bd6755347ba4e4c67a91320ff047969a9fa1ef4ee3bc88840ffe&ipo=images"); + for(Command c : CommandManager.getCommands()){ + Main.getLgr().info("New Command: /" + event.getName()); + if(event.getName().equals(c.getName())) + c.onSlashCommandInteraction(event); } } } diff --git a/src/main/java/de/limited_dev/lil_judd/util/Constants.java b/src/main/java/de/limited_dev/lil_judd/util/Constants.java new file mode 100644 index 0000000..e8e0314 --- /dev/null +++ b/src/main/java/de/limited_dev/lil_judd/util/Constants.java @@ -0,0 +1,5 @@ +package de.limited_dev.lil_judd.util; + +public class Constants { + public static final String CreatorID = "372703841151614976"; +} diff --git a/src/main/java/de/limited_dev/lil_judd/util/EmbeddedMessageHelper.java b/src/main/java/de/limited_dev/lil_judd/util/EmbeddedMessageHelper.java index 3311c4b..3489c8c 100644 --- a/src/main/java/de/limited_dev/lil_judd/util/EmbeddedMessageHelper.java +++ b/src/main/java/de/limited_dev/lil_judd/util/EmbeddedMessageHelper.java @@ -1,5 +1,6 @@ package de.limited_dev.lil_judd.util; +import de.limited_dev.lil_judd.Main; import net.dv8tion.jda.api.EmbedBuilder; import net.dv8tion.jda.api.events.Event; import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent; @@ -9,17 +10,18 @@ import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; public class EmbeddedMessageHelper { - private static final DateTimeFormatter dtf = DateTimeFormatter.ofPattern("HH:mm:ss | dd/MM/yyyy"); + private static final DateTimeFormatter dtf = DateTimeFormatter.ofPattern("dd/MM/yyyy @ HH:mm:ss"); - public static void sendSimpleOneLiner(SlashCommandInteractionEvent event, String author, String title, String description, String thumbnailURL){ + public static void sendSimpleOneLiner(SlashCommandInteractionEvent event, String title, String description, String thumbnailURL){ LocalDateTime now = LocalDateTime.now(); EmbedBuilder eb = new EmbedBuilder(); - eb.setAuthor(author); + eb.setAuthor(Main.getJda().getSelfUser().getName()); eb.setTitle(title); eb.setColor(Color.ORANGE); eb.setDescription(description); - eb.setThumbnail(thumbnailURL); + if(thumbnailURL != null) + eb.setThumbnail(thumbnailURL); eb.setFooter(">" + dtf.format(now) + " - " + event.getUser().getName() + "#" + event.getUser().getDiscriminator()); event.replyEmbeds(eb.build()).queue(); } diff --git a/src/main/java/de/limited_dev/lil_judd/util/SlashCommandHelper.java b/src/main/java/de/limited_dev/lil_judd/util/SlashCommandHelper.java index a9893ee..f5190a3 100644 --- a/src/main/java/de/limited_dev/lil_judd/util/SlashCommandHelper.java +++ b/src/main/java/de/limited_dev/lil_judd/util/SlashCommandHelper.java @@ -1,14 +1,24 @@ package de.limited_dev.lil_judd.util; +import de.limited_dev.lil_judd.commands.components.Command; +import de.limited_dev.lil_judd.commands.components.CommandManager; +import de.limited_dev.lil_judd.commands.components.Option; import net.dv8tion.jda.api.entities.Guild; +import net.dv8tion.jda.api.interactions.commands.OptionType; import net.dv8tion.jda.api.interactions.commands.build.Commands; +import net.dv8tion.jda.api.interactions.commands.build.OptionData; public class SlashCommandHelper { public static void addSlashCommandsToGuild(Guild g){ g.updateCommands().addCommands( Commands.slash("ping", "Pong! Display the Ping"), - Commands.slash("info", "Shows Info about me") + Commands.slash("info", "Shows Info about me"), + Commands.slash("setup", "Setup a feature") + .addOptions( + new OptionData(OptionType.STRING, "feature", "The Feature you want to setup") + .addChoice("Send Time finder", "timefinder") + ) ).queue(); } }