Added console commands

This commit is contained in:
Stijn 2022-04-13 21:46:09 +02:00
parent c3d2b215d5
commit aa42ba000c
11 changed files with 293 additions and 23 deletions

View File

@ -59,30 +59,13 @@ tasks {
dependencies { dependencies {
// JDA // JDA
implementation("net.dv8tion:JDA:5.0.0-alpha.9") { shadow("net.dv8tion:JDA:5.0.0-alpha.9") {
shadow("net.dv8tion:JDA:5.0.0-alpha.9") { exclude("opus-java") // exclude audio
exclude("opus-java") // exclude audio
}
// MySQL
// runtimeOnly("mysql:mysql-connector-java:8.0.23")
} }
// 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 // Configurate
shadow("org.spongepowered:configurate-yaml:4.1.2") shadow("org.spongepowered:configurate-yaml:4.1.2")
} }

View File

@ -3,10 +3,14 @@ package com.alttd;
import com.alttd.commandManager.CommandManager; import com.alttd.commandManager.CommandManager;
import com.alttd.config.SettingsConfig; import com.alttd.config.SettingsConfig;
import com.alttd.config.MessagesConfig; import com.alttd.config.MessagesConfig;
import com.alttd.console.ConsoleCommandManager;
import com.alttd.permissions.PermissionManager; import com.alttd.permissions.PermissionManager;
import com.alttd.util.Logger; import com.alttd.util.Logger;
import com.mysql.cj.log.Log;
import net.dv8tion.jda.api.JDA; import net.dv8tion.jda.api.JDA;
import net.dv8tion.jda.api.JDABuilder; 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 javax.security.auth.login.LoginException;
import java.io.File; import java.io.File;
@ -38,6 +42,14 @@ public class AltitudeBot {
exit(1); exit(1);
Logger.exception(e); 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(); initListeners();
//TODO init permissionManager //TODO init permissionManager
} }

View File

@ -1,5 +1,7 @@
package com.alttd.config; package com.alttd.config;
import net.dv8tion.jda.api.entities.Activity;
public class SettingsConfig extends AbstractConfig { public class SettingsConfig extends AbstractConfig {
static SettingsConfig settingsConfig; static SettingsConfig settingsConfig;
@ -36,4 +38,22 @@ public class SettingsConfig extends AbstractConfig {
DATABASE_PASSWORD = settingsConfig.getString("settings.database_password", DATABASE_PASSWORD); 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);
}
} }

View File

@ -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.";
}
}

View File

@ -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();
}

View File

@ -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<ConsoleCommand> 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<ConsoleCommand> 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<ConsoleCommand> getCommands() {
return commands;
}
public static void startConsoleCommands(JDA jda) {
Logger.info("Starting console commands");
if (instance == null)
instance = new ConsoleCommandManager(jda);
}
}

View File

@ -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<commands>", template));
}
@Override
public String getHelpMessage() {
return "help - Shows this help menu";
}
}

View File

@ -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 <config/database> - Reload the configs or databases";
}
}

View File

@ -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";
}
}

View File

@ -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";
}
}

View File

@ -22,7 +22,7 @@ public class Logger { //TODO make this log to a file
if (!logDir.exists()) if (!logDir.exists())
{ {
if (!logDir.mkdir()) { if (!logDir.mkdir()) {
System.out.println("UNABLE TO CREATE LOGGING DIRECTORY"); Logger.info("UNABLE TO CREATE LOGGING DIRECTORY");
System.exit(1); System.exit(1);
} }
} }