diff --git a/build.gradle.kts b/build.gradle.kts index 97140cb..785ebb7 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -59,30 +59,13 @@ tasks { dependencies { // JDA - implementation("net.dv8tion:JDA:5.0.0-alpha.9") { - shadow("net.dv8tion:JDA:5.0.0-alpha.9") { - exclude("opus-java") // exclude audio - } - // MySQL -// runtimeOnly("mysql:mysql-connector-java:8.0.23") + shadow("net.dv8tion:JDA:5.0.0-alpha.9") { + exclude("opus-java") // exclude audio } + // MySQL + shadow("mysql:mysql-connector-java:8.0.28") +// implementation("org.mariadb.jdbc:mariadb-java-client:2.1.2") - implementation("org.mariadb.jdbc:mariadb-java-client:2.1.2") { - shadow("org.mariadb.jdbc:mariadb-java-client:2.1.2") - } - - tasks { - - shadowJar { - listOf( - "net.dv8tion.jda" - ).forEach { relocate(it, "${rootProject.group}.lib.$it") } - } - - build { - dependsOn(shadowJar) - } - } // Configurate shadow("org.spongepowered:configurate-yaml:4.1.2") } \ No newline at end of file diff --git a/src/main/java/com/alttd/AltitudeBot.java b/src/main/java/com/alttd/AltitudeBot.java index 77d2c69..cff2f51 100644 --- a/src/main/java/com/alttd/AltitudeBot.java +++ b/src/main/java/com/alttd/AltitudeBot.java @@ -3,10 +3,14 @@ package com.alttd; import com.alttd.commandManager.CommandManager; import com.alttd.config.SettingsConfig; import com.alttd.config.MessagesConfig; +import com.alttd.console.ConsoleCommandManager; import com.alttd.permissions.PermissionManager; import com.alttd.util.Logger; +import com.mysql.cj.log.Log; import net.dv8tion.jda.api.JDA; import net.dv8tion.jda.api.JDABuilder; +import net.dv8tion.jda.api.OnlineStatus; +import net.dv8tion.jda.api.entities.Activity; import javax.security.auth.login.LoginException; import java.io.File; @@ -38,6 +42,14 @@ public class AltitudeBot { exit(1); Logger.exception(e); } + ConsoleCommandManager.startConsoleCommands(jda); + try { + jda.getPresence().setPresence( + OnlineStatus.valueOf(SettingsConfig.STATUS), + Activity.listening(SettingsConfig.ACTIVITY)); + } catch (IllegalArgumentException e) { + Logger.exception(e); + } initListeners(); //TODO init permissionManager } diff --git a/src/main/java/com/alttd/config/SettingsConfig.java b/src/main/java/com/alttd/config/SettingsConfig.java index fdfaf7c..f2626f0 100644 --- a/src/main/java/com/alttd/config/SettingsConfig.java +++ b/src/main/java/com/alttd/config/SettingsConfig.java @@ -1,5 +1,7 @@ package com.alttd.config; +import net.dv8tion.jda.api.entities.Activity; + public class SettingsConfig extends AbstractConfig { static SettingsConfig settingsConfig; @@ -36,4 +38,22 @@ public class SettingsConfig extends AbstractConfig { DATABASE_PASSWORD = settingsConfig.getString("settings.database_password", DATABASE_PASSWORD); } + + public static String STATUS = "ONLINE"; + public static String ACTIVITY = "Testing"; + private void loadActivity() { + STATUS = settingsConfig.getString("settings.status", STATUS); + ACTIVITY = settingsConfig.getString("settings.activity", ACTIVITY); + } + + public static void setActivity(String newActivity) { + ACTIVITY = newActivity; + settingsConfig.set("settings.activity", ACTIVITY); + } + + public static void setStatus(String status) { + STATUS = status; + settingsConfig.set("settings.activity", STATUS); + } + } diff --git a/src/main/java/com/alttd/console/ConsoleActivity.java b/src/main/java/com/alttd/console/ConsoleActivity.java new file mode 100644 index 0000000..0608abf --- /dev/null +++ b/src/main/java/com/alttd/console/ConsoleActivity.java @@ -0,0 +1,43 @@ +package com.alttd.console; + +import com.alttd.config.SettingsConfig; +import com.alttd.util.Logger; +import net.dv8tion.jda.api.JDA; +import net.dv8tion.jda.api.entities.Activity; + +import java.util.Arrays; + +public class ConsoleActivity extends ConsoleCommand { + private final JDA jda; + + public ConsoleActivity(JDA jda) { + super(); + this.jda = jda; + } + + @Override + public String getName() { + return "activity"; + } + + @Override + public void execute(String command, String[] args) { + if (args.length == 1) { + Activity activity = jda.getPresence().getActivity(); + if (activity == null) + Logger.info("No activity found."); + else + Logger.info("Current activity: Listening to " + activity.getName()); + return; + } + String newActivity = String.join(" ", Arrays.copyOfRange(args, 1, args.length)); + SettingsConfig.setActivity(newActivity); + jda.getPresence().setActivity(Activity.listening(newActivity)); + Logger.info("Set activity to: Listening to " + newActivity); + } + + @Override + public String getHelpMessage() { + return "activity [set] [text] Display the current activity or set it."; + } +} diff --git a/src/main/java/com/alttd/console/ConsoleCommand.java b/src/main/java/com/alttd/console/ConsoleCommand.java new file mode 100644 index 0000000..12374ba --- /dev/null +++ b/src/main/java/com/alttd/console/ConsoleCommand.java @@ -0,0 +1,11 @@ +package com.alttd.console; + +public abstract class ConsoleCommand { + + public abstract String getName(); + + public abstract void execute(String command, String[] args); + + public abstract String getHelpMessage(); + +} diff --git a/src/main/java/com/alttd/console/ConsoleCommandManager.java b/src/main/java/com/alttd/console/ConsoleCommandManager.java new file mode 100644 index 0000000..ded9cf0 --- /dev/null +++ b/src/main/java/com/alttd/console/ConsoleCommandManager.java @@ -0,0 +1,54 @@ +package com.alttd.console; + +import com.alttd.util.Logger; +import net.dv8tion.jda.api.JDA; + +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; +import java.util.Scanner; + +public class ConsoleCommandManager { + + private final List commands = new ArrayList<>(); + private static ConsoleCommandManager instance = null; + + private ConsoleCommandManager(JDA jda) { + commands.addAll(List.of( + new ConsoleActivity(jda), + new ConsoleHelp(this), + new ConsoleReload(), + new ConsoleStatus(jda), + new ConsoleStop())); + new Thread(() -> { + while (true) + instance.readCommand(new Scanner(System.in)); + }).start(); + } + + private void readCommand(Scanner scanner) { + System.out.print("command: "); + String[] args = scanner.nextLine().toLowerCase().split(" +"); + if (args.length == 0 || args[0].length() == 0) + return; + String command = args[0]; + Optional first = commands.stream() + .filter(consoleCommand -> consoleCommand.getName().equalsIgnoreCase(command)) + .findFirst(); + if (first.isEmpty()) { + Logger.info("Invalid command, see help for more info."); + return; + } + first.get().execute(command, args); + } + + protected List getCommands() { + return commands; + } + + public static void startConsoleCommands(JDA jda) { + Logger.info("Starting console commands"); + if (instance == null) + instance = new ConsoleCommandManager(jda); + } +} diff --git a/src/main/java/com/alttd/console/ConsoleHelp.java b/src/main/java/com/alttd/console/ConsoleHelp.java new file mode 100644 index 0000000..3697bad --- /dev/null +++ b/src/main/java/com/alttd/console/ConsoleHelp.java @@ -0,0 +1,34 @@ +package com.alttd.console; + +import com.alttd.templates.Parser; +import com.alttd.templates.Template; +import com.alttd.util.Logger; + +import java.util.stream.Collectors; + +public class ConsoleHelp extends ConsoleCommand { + ConsoleCommandManager commandManager; + + public ConsoleHelp(ConsoleCommandManager instance) { + super(); + commandManager = instance; + } + + @Override + public String getName() { + return "help"; + } + + @Override + public void execute(String command, String[] args) { + Template template = Template.of("commands", commandManager.getCommands().stream() + .map(ConsoleCommand::getHelpMessage) + .collect(Collectors.joining("\n"))); + Logger.info(Parser.parse("Commands:\n", template)); + } + + @Override + public String getHelpMessage() { + return "help - Shows this help menu"; + } +} diff --git a/src/main/java/com/alttd/console/ConsoleReload.java b/src/main/java/com/alttd/console/ConsoleReload.java new file mode 100644 index 0000000..0db50fe --- /dev/null +++ b/src/main/java/com/alttd/console/ConsoleReload.java @@ -0,0 +1,37 @@ +package com.alttd.console; + +import com.alttd.config.MessagesConfig; +import com.alttd.config.SettingsConfig; +import com.alttd.util.Logger; + +public class ConsoleReload extends ConsoleCommand { + @Override + public String getName() { + return "reload"; + } + + @Override + public void execute(String command, String[] args) { + if (args.length != 2) { + Logger.info("Invalid argument length: " + getHelpMessage()); + return; + } + switch (args[1]) { + case "config" -> { + MessagesConfig.reload(); + Logger.info("Reloaded Messages config."); + SettingsConfig.reload(); + Logger.info("Reloaded Settings config."); + } + case "database" -> { + Logger.info("NOT IMPLEMENTED YET"); + } + default -> Logger.info("Invalid argument: " + args[1]); + } + } + + @Override + public String getHelpMessage() { + return "reload - Reload the configs or databases"; + } +} diff --git a/src/main/java/com/alttd/console/ConsoleStatus.java b/src/main/java/com/alttd/console/ConsoleStatus.java new file mode 100644 index 0000000..dbddb41 --- /dev/null +++ b/src/main/java/com/alttd/console/ConsoleStatus.java @@ -0,0 +1,53 @@ +package com.alttd.console; + +import com.alttd.config.SettingsConfig; +import com.alttd.util.Logger; +import net.dv8tion.jda.api.JDA; +import net.dv8tion.jda.api.OnlineStatus; +import net.dv8tion.jda.api.entities.Activity; + +import java.util.Arrays; +import java.util.stream.Collectors; + +public class ConsoleStatus extends ConsoleCommand{ + + private final JDA jda; + + public ConsoleStatus(JDA jda) { + this.jda = jda; + } + + @Override + public String getName() { + return "status"; + } + + @Override + public void execute(String command, String[] args) { + if (args.length == 1) { + OnlineStatus status = jda.getPresence().getStatus(); + Logger.info("Current status: " + status.getKey()); + return; + } + if (args.length != 2) { + Logger.info("Invalid argument length."); + return; + } + try { + OnlineStatus status = OnlineStatus.fromKey(args[1].toLowerCase()); + SettingsConfig.setStatus(status.getKey()); + jda.getPresence().setStatus(status); + Logger.info("Set status to: " + SettingsConfig.STATUS); + } catch (IllegalArgumentException exception) { + Logger.info("Invalid status please use any of the following " + + Arrays.stream(OnlineStatus.values()) + .map(OnlineStatus::getKey) + .collect(Collectors.joining(", "))); + } + } + + @Override + public String getHelpMessage() { + return "status [set] [status] - Display the current status or set it"; + } +} diff --git a/src/main/java/com/alttd/console/ConsoleStop.java b/src/main/java/com/alttd/console/ConsoleStop.java new file mode 100644 index 0000000..2f63684 --- /dev/null +++ b/src/main/java/com/alttd/console/ConsoleStop.java @@ -0,0 +1,23 @@ +package com.alttd.console; + +import com.alttd.AltitudeBot; +import com.alttd.util.Logger; + +public class ConsoleStop extends ConsoleCommand { + @Override + public String getName() { + return "stop"; + } + + @Override + public void execute(String command, String[] args) { + Logger.info("Stopping bot..."); + AltitudeBot.getInstance().getJDA().cancelRequests(); + System.exit(0); + } + + @Override + public String getHelpMessage() { + return "stop - Stop the bot"; + } +} diff --git a/src/main/java/com/alttd/util/Logger.java b/src/main/java/com/alttd/util/Logger.java index 395d95c..03dc3e9 100644 --- a/src/main/java/com/alttd/util/Logger.java +++ b/src/main/java/com/alttd/util/Logger.java @@ -22,7 +22,7 @@ public class Logger { //TODO make this log to a file if (!logDir.exists()) { if (!logDir.mkdir()) { - System.out.println("UNABLE TO CREATE LOGGING DIRECTORY"); + Logger.info("UNABLE TO CREATE LOGGING DIRECTORY"); System.exit(1); } }