feat: added Command system, added SetupFeatureCommand
This commit is contained in:
parent
30622adb10
commit
fec77bfbab
11 changed files with 195 additions and 10 deletions
|
@ -1,9 +1,11 @@
|
||||||
package de.limited_dev.lil_judd;
|
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.GuildStateListener;
|
||||||
import de.limited_dev.lil_judd.listeners.ReadyListener;
|
import de.limited_dev.lil_judd.listeners.ReadyListener;
|
||||||
import de.limited_dev.lil_judd.listeners.SlashCommandInteractionListener;
|
import de.limited_dev.lil_judd.listeners.SlashCommandInteractionListener;
|
||||||
import de.limited_dev.lil_judd.util.Logger;
|
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 de.limited_dev.lil_judd.util.managers.TokenManager;
|
||||||
import net.dv8tion.jda.api.JDA;
|
import net.dv8tion.jda.api.JDA;
|
||||||
import net.dv8tion.jda.api.JDABuilder;
|
import net.dv8tion.jda.api.JDABuilder;
|
||||||
|
@ -30,6 +32,8 @@ public class Main {
|
||||||
.setStatus(OnlineStatus.DO_NOT_DISTURB)
|
.setStatus(OnlineStatus.DO_NOT_DISTURB)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
|
CommandManager.registerCommands();
|
||||||
|
|
||||||
jda.addEventListener(new ReadyListener());
|
jda.addEventListener(new ReadyListener());
|
||||||
jda.addEventListener(new SlashCommandInteractionListener());
|
jda.addEventListener(new SlashCommandInteractionListener());
|
||||||
jda.addEventListener(new GuildStateListener());
|
jda.addEventListener(new GuildStateListener());
|
||||||
|
|
|
@ -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");
|
||||||
|
}
|
||||||
|
}
|
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
|
@ -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;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
|
@ -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<Command> commands = new CopyOnWriteArrayList<>();
|
||||||
|
|
||||||
|
public static void registerCommands(){
|
||||||
|
commands.add(new PingCommand());
|
||||||
|
commands.add(new InfoCommand());
|
||||||
|
commands.add(new SetupFeatureCommand());
|
||||||
|
}
|
||||||
|
|
||||||
|
public static CopyOnWriteArrayList<Command> getCommands() {
|
||||||
|
return commands;
|
||||||
|
}
|
||||||
|
}
|
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,6 +1,8 @@
|
||||||
package de.limited_dev.lil_judd.listeners;
|
package de.limited_dev.lil_judd.listeners;
|
||||||
|
|
||||||
import de.limited_dev.lil_judd.Main;
|
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 de.limited_dev.lil_judd.util.EmbeddedMessageHelper;
|
||||||
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
|
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
|
||||||
import net.dv8tion.jda.api.hooks.ListenerAdapter;
|
import net.dv8tion.jda.api.hooks.ListenerAdapter;
|
||||||
|
@ -10,11 +12,10 @@ public class SlashCommandInteractionListener extends ListenerAdapter {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onSlashCommandInteraction(@NotNull SlashCommandInteractionEvent event) {
|
public void onSlashCommandInteraction(@NotNull SlashCommandInteractionEvent event) {
|
||||||
if(event.getName().equals("ping")){
|
for(Command c : CommandManager.getCommands()){
|
||||||
event.reply("My connection to the home base takes **" + Main.getJda().getGatewayPing() + "ms**").queue();
|
Main.getLgr().info("New Command: /" + event.getName());
|
||||||
}
|
if(event.getName().equals(c.getName()))
|
||||||
else if(event.getName().equals("info")){
|
c.onSlashCommandInteraction(event);
|
||||||
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");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
package de.limited_dev.lil_judd.util;
|
||||||
|
|
||||||
|
public class Constants {
|
||||||
|
public static final String CreatorID = "372703841151614976";
|
||||||
|
}
|
|
@ -1,5 +1,6 @@
|
||||||
package de.limited_dev.lil_judd.util;
|
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.EmbedBuilder;
|
||||||
import net.dv8tion.jda.api.events.Event;
|
import net.dv8tion.jda.api.events.Event;
|
||||||
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
|
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
|
||||||
|
@ -9,17 +10,18 @@ import java.time.LocalDateTime;
|
||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
|
|
||||||
public class EmbeddedMessageHelper {
|
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();
|
LocalDateTime now = LocalDateTime.now();
|
||||||
EmbedBuilder eb = new EmbedBuilder();
|
EmbedBuilder eb = new EmbedBuilder();
|
||||||
|
|
||||||
eb.setAuthor(author);
|
eb.setAuthor(Main.getJda().getSelfUser().getName());
|
||||||
eb.setTitle(title);
|
eb.setTitle(title);
|
||||||
eb.setColor(Color.ORANGE);
|
eb.setColor(Color.ORANGE);
|
||||||
eb.setDescription(description);
|
eb.setDescription(description);
|
||||||
eb.setThumbnail(thumbnailURL);
|
if(thumbnailURL != null)
|
||||||
|
eb.setThumbnail(thumbnailURL);
|
||||||
eb.setFooter(">" + dtf.format(now) + " - " + event.getUser().getName() + "#" + event.getUser().getDiscriminator());
|
eb.setFooter(">" + dtf.format(now) + " - " + event.getUser().getName() + "#" + event.getUser().getDiscriminator());
|
||||||
event.replyEmbeds(eb.build()).queue();
|
event.replyEmbeds(eb.build()).queue();
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,14 +1,24 @@
|
||||||
package de.limited_dev.lil_judd.util;
|
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.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.Commands;
|
||||||
|
import net.dv8tion.jda.api.interactions.commands.build.OptionData;
|
||||||
|
|
||||||
public class SlashCommandHelper {
|
public class SlashCommandHelper {
|
||||||
|
|
||||||
public static void addSlashCommandsToGuild(Guild g){
|
public static void addSlashCommandsToGuild(Guild g){
|
||||||
g.updateCommands().addCommands(
|
g.updateCommands().addCommands(
|
||||||
Commands.slash("ping", "Pong! Display the Ping"),
|
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();
|
).queue();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Reference in a new issue