diff --git a/pom.xml b/pom.xml
index 52a8c5b..04bb714 100644
--- a/pom.xml
+++ b/pom.xml
@@ -100,7 +100,7 @@
net.dv8tion
JDA
- 5.1.2
+ 5.3.0
dev.arbjerg
diff --git a/src/main/java/me/bobert/netneutrality/command/admin/BlacklistCommand.java b/src/main/java/me/bobert/netneutrality/command/admin/BlacklistCommand.java
index 1040340..205ddac 100644
--- a/src/main/java/me/bobert/netneutrality/command/admin/BlacklistCommand.java
+++ b/src/main/java/me/bobert/netneutrality/command/admin/BlacklistCommand.java
@@ -5,10 +5,10 @@ package me.bobert.netneutrality.command.admin;
* https://discord.gg/qUa6zNFZsd
*/
-import me.bobert.netneutrality.core.command.AbstractAdminCommand;
+import me.bobert.netneutrality.core.command.impl.AdminCommand;
import me.bobert.netneutrality.core.command.CommandExecutionResult;
import me.bobert.netneutrality.core.command.options.CommandOption;
-import me.bobert.netneutrality.core.command.options.CommandOptionsBuilder;
+import me.bobert.netneutrality.core.command.CommandOptionsBuilder;
import me.bobert.netneutrality.core.context.CommandContext;
import me.bobert.netneutrality.db.entities.OBlacklist;
import me.bobert.netneutrality.db.service.BlacklistService;
@@ -18,7 +18,7 @@ import net.dv8tion.jda.api.interactions.commands.build.SubcommandData;
import java.util.List;
-public class BlacklistCommand extends AbstractAdminCommand {
+public class BlacklistCommand extends AdminCommand {
@Override
public boolean isEnabled() {
diff --git a/src/main/java/me/bobert/netneutrality/command/admin/ReactionCommand.java b/src/main/java/me/bobert/netneutrality/command/admin/ReactionCommand.java
index 42f2cd7..0eabce6 100644
--- a/src/main/java/me/bobert/netneutrality/command/admin/ReactionCommand.java
+++ b/src/main/java/me/bobert/netneutrality/command/admin/ReactionCommand.java
@@ -5,10 +5,10 @@ package me.bobert.netneutrality.command.admin;
* https://discord.gg/qUa6zNFZsd
*/
-import me.bobert.netneutrality.core.command.AbstractAdminCommand;
+import me.bobert.netneutrality.core.command.impl.AdminCommand;
import me.bobert.netneutrality.core.command.CommandExecutionResult;
import me.bobert.netneutrality.core.command.options.CommandOption;
-import me.bobert.netneutrality.core.command.options.CommandOptionsBuilder;
+import me.bobert.netneutrality.core.command.CommandOptionsBuilder;
import me.bobert.netneutrality.core.context.CommandContext;
import me.bobert.netneutrality.core.tasks.TaskManager;
import me.bobert.netneutrality.tasks.emoji.EmojiReactionRoleTask;
@@ -24,7 +24,7 @@ import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
-public class ReactionCommand extends AbstractAdminCommand {
+public class ReactionCommand extends AdminCommand {
@Override
public boolean isEnabled() {
diff --git a/src/main/java/me/bobert/netneutrality/command/basic/HelpCommand.java b/src/main/java/me/bobert/netneutrality/command/basic/HelpCommand.java
index 5e3280f..794ba99 100644
--- a/src/main/java/me/bobert/netneutrality/command/basic/HelpCommand.java
+++ b/src/main/java/me/bobert/netneutrality/command/basic/HelpCommand.java
@@ -6,8 +6,9 @@ package me.bobert.netneutrality.command.basic;
*/
import me.bobert.netneutrality.core.command.*;
+import me.bobert.netneutrality.core.command.impl.AbstractCommand;
import me.bobert.netneutrality.core.command.options.CommandOption;
-import me.bobert.netneutrality.core.command.options.CommandOptionsBuilder;
+import me.bobert.netneutrality.core.command.CommandOptionsBuilder;
import me.bobert.netneutrality.core.context.CommandContext;
import me.bobert.netneutrality.core.tasks.BuiltInTask;
import me.bobert.netneutrality.tasks.help.BotInfo;
diff --git a/src/main/java/me/bobert/netneutrality/command/basic/PingCommand.java b/src/main/java/me/bobert/netneutrality/command/basic/PingCommand.java
index 2dc8f22..801f96f 100644
--- a/src/main/java/me/bobert/netneutrality/command/basic/PingCommand.java
+++ b/src/main/java/me/bobert/netneutrality/command/basic/PingCommand.java
@@ -5,10 +5,10 @@ package me.bobert.netneutrality.command.basic;
* https://discord.gg/qUa6zNFZsd
*/
-import me.bobert.netneutrality.core.command.AbstractCommand;
+import me.bobert.netneutrality.core.command.impl.AbstractCommand;
import me.bobert.netneutrality.core.command.CommandCategory;
import me.bobert.netneutrality.core.command.CommandExecutionResult;
-import me.bobert.netneutrality.core.command.options.CommandOptionsBuilder;
+import me.bobert.netneutrality.core.command.CommandOptionsBuilder;
import me.bobert.netneutrality.core.context.CommandContext;
public class PingCommand extends AbstractCommand {
diff --git a/src/main/java/me/bobert/netneutrality/command/bot/ConfigureCommand.java b/src/main/java/me/bobert/netneutrality/command/bot/ConfigureCommand.java
index e9c9652..70891d7 100644
--- a/src/main/java/me/bobert/netneutrality/command/bot/ConfigureCommand.java
+++ b/src/main/java/me/bobert/netneutrality/command/bot/ConfigureCommand.java
@@ -5,10 +5,10 @@ package me.bobert.netneutrality.command.bot;
* https://discord.gg/qUa6zNFZsd
*/
-import me.bobert.netneutrality.core.command.AbstractAdminCommand;
+import me.bobert.netneutrality.core.command.impl.AdminCommand;
import me.bobert.netneutrality.core.command.CommandExecutionResult;
import me.bobert.netneutrality.core.command.options.CommandOption;
-import me.bobert.netneutrality.core.command.options.CommandOptionsBuilder;
+import me.bobert.netneutrality.core.command.CommandOptionsBuilder;
import me.bobert.netneutrality.core.context.CommandContext;
import me.bobert.netneutrality.db.GSettings;
import me.bobert.netneutrality.db.service.GuildService;
@@ -23,7 +23,7 @@ import net.dv8tion.jda.api.utils.messages.MessageCreateBuilder;
import java.util.Map;
-public class ConfigureCommand extends AbstractAdminCommand {
+public class ConfigureCommand extends AdminCommand {
@Override
public boolean isEnabled() {
diff --git a/src/main/java/me/bobert/netneutrality/command/crypto/CryptoPriceCommand.java b/src/main/java/me/bobert/netneutrality/command/crypto/CryptoPriceCommand.java
index f44fd99..cfb820d 100644
--- a/src/main/java/me/bobert/netneutrality/command/crypto/CryptoPriceCommand.java
+++ b/src/main/java/me/bobert/netneutrality/command/crypto/CryptoPriceCommand.java
@@ -6,11 +6,11 @@ package me.bobert.netneutrality.command.crypto;
*/
import me.bobert.netneutrality.core.LogHandler;
-import me.bobert.netneutrality.core.command.AbstractCommand;
+import me.bobert.netneutrality.core.command.impl.AbstractCommand;
import me.bobert.netneutrality.core.command.CommandCategory;
import me.bobert.netneutrality.core.command.CommandExecutionResult;
import me.bobert.netneutrality.core.command.options.CommandOption;
-import me.bobert.netneutrality.core.command.options.CommandOptionsBuilder;
+import me.bobert.netneutrality.core.command.CommandOptionsBuilder;
import me.bobert.netneutrality.core.context.CommandContext;
import me.bobert.netneutrality.http.WebModule;
import net.dv8tion.jda.api.interactions.commands.OptionType;
diff --git a/src/main/java/me/bobert/netneutrality/command/git/ReportIssueCommand.java b/src/main/java/me/bobert/netneutrality/command/git/ReportIssueCommand.java
index 94a6670..b9c5322 100644
--- a/src/main/java/me/bobert/netneutrality/command/git/ReportIssueCommand.java
+++ b/src/main/java/me/bobert/netneutrality/command/git/ReportIssueCommand.java
@@ -5,11 +5,10 @@ package me.bobert.netneutrality.command.git;
* https://discord.gg/qUa6zNFZsd
*/
-import me.bobert.netneutrality.context.command.SlashCommandContext;
-import me.bobert.netneutrality.core.command.AbstractCommand;
+import me.bobert.netneutrality.core.command.impl.AbstractCommand;
import me.bobert.netneutrality.core.command.CommandCategory;
import me.bobert.netneutrality.core.command.CommandExecutionResult;
-import me.bobert.netneutrality.core.command.options.CommandOptionsBuilder;
+import me.bobert.netneutrality.core.command.CommandOptionsBuilder;
import me.bobert.netneutrality.core.context.CommandContext;
import me.bobert.netneutrality.http.WebModule;
import me.bobert.netneutrality.tasks.git.ReportIssueTask;
diff --git a/src/main/java/me/bobert/netneutrality/command/music/BitconnectCommand.java b/src/main/java/me/bobert/netneutrality/command/music/BitconnectCommand.java
index b0f3065..f899d8f 100644
--- a/src/main/java/me/bobert/netneutrality/command/music/BitconnectCommand.java
+++ b/src/main/java/me/bobert/netneutrality/command/music/BitconnectCommand.java
@@ -6,14 +6,14 @@ package me.bobert.netneutrality.command.music;
* https://discord.gg/qUa6zNFZsd
*/
-import me.bobert.netneutrality.core.command.AbstractMusicCommand;
+import me.bobert.netneutrality.core.command.impl.MusicCommand;
import me.bobert.netneutrality.core.command.CommandCategory;
import me.bobert.netneutrality.core.command.CommandExecutionResult;
-import me.bobert.netneutrality.core.command.options.CommandOptionsBuilder;
+import me.bobert.netneutrality.core.command.CommandOptionsBuilder;
import me.bobert.netneutrality.core.context.CommandContext;
import me.bobert.netneutrality.music.MusicManager;
-public class BitconnectCommand extends AbstractMusicCommand {
+public class BitconnectCommand extends MusicCommand {
@Override
public boolean isEnabled() {
diff --git a/src/main/java/me/bobert/netneutrality/command/music/ClearQueueCommand.java b/src/main/java/me/bobert/netneutrality/command/music/ClearQueueCommand.java
index eb739a8..5397662 100644
--- a/src/main/java/me/bobert/netneutrality/command/music/ClearQueueCommand.java
+++ b/src/main/java/me/bobert/netneutrality/command/music/ClearQueueCommand.java
@@ -6,14 +6,14 @@ package me.bobert.netneutrality.command.music;
* https://discord.gg/qUa6zNFZsd
*/
-import me.bobert.netneutrality.core.command.AbstractMusicCommand;
+import me.bobert.netneutrality.core.command.impl.MusicCommand;
import me.bobert.netneutrality.core.command.CommandExecutionResult;
-import me.bobert.netneutrality.core.command.options.CommandOptionsBuilder;
+import me.bobert.netneutrality.core.command.CommandOptionsBuilder;
import me.bobert.netneutrality.core.context.CommandContext;
import me.bobert.netneutrality.music.MusicManager;
import me.bobert.netneutrality.utils.MusicUtils;
-public class ClearQueueCommand extends AbstractMusicCommand {
+public class ClearQueueCommand extends MusicCommand {
@Override
public boolean needAdmin() {
diff --git a/src/main/java/me/bobert/netneutrality/command/music/CurrentlyPlayingCommand.java b/src/main/java/me/bobert/netneutrality/command/music/CurrentlyPlayingCommand.java
index 42cc979..63781fc 100644
--- a/src/main/java/me/bobert/netneutrality/command/music/CurrentlyPlayingCommand.java
+++ b/src/main/java/me/bobert/netneutrality/command/music/CurrentlyPlayingCommand.java
@@ -6,15 +6,15 @@ package me.bobert.netneutrality.command.music;
* https://discord.gg/qUa6zNFZsd
*/
-import me.bobert.netneutrality.core.command.AbstractMusicCommand;
+import me.bobert.netneutrality.core.command.impl.MusicCommand;
import me.bobert.netneutrality.core.command.CommandExecutionResult;
-import me.bobert.netneutrality.core.command.options.CommandOptionsBuilder;
+import me.bobert.netneutrality.core.command.CommandOptionsBuilder;
import me.bobert.netneutrality.core.context.CommandContext;
import me.bobert.netneutrality.music.MusicManager;
import me.bobert.netneutrality.utils.MessageFunction;
import me.bobert.netneutrality.utils.MusicUtils;
-public class CurrentlyPlayingCommand extends AbstractMusicCommand {
+public class CurrentlyPlayingCommand extends MusicCommand {
@Override
public boolean isEnabled() {
diff --git a/src/main/java/me/bobert/netneutrality/command/music/JoinCommand.java b/src/main/java/me/bobert/netneutrality/command/music/JoinCommand.java
index 459e4e2..77d36f1 100644
--- a/src/main/java/me/bobert/netneutrality/command/music/JoinCommand.java
+++ b/src/main/java/me/bobert/netneutrality/command/music/JoinCommand.java
@@ -6,13 +6,13 @@ package me.bobert.netneutrality.command.music;
* https://discord.gg/qUa6zNFZsd
*/
-import me.bobert.netneutrality.core.command.AbstractMusicCommand;
+import me.bobert.netneutrality.core.command.impl.MusicCommand;
import me.bobert.netneutrality.core.command.CommandExecutionResult;
-import me.bobert.netneutrality.core.command.options.CommandOptionsBuilder;
+import me.bobert.netneutrality.core.command.CommandOptionsBuilder;
import me.bobert.netneutrality.core.context.CommandContext;
import me.bobert.netneutrality.utils.MusicUtils;
-public class JoinCommand extends AbstractMusicCommand {
+public class JoinCommand extends MusicCommand {
@Override
public boolean isEnabled() {
diff --git a/src/main/java/me/bobert/netneutrality/command/music/LeaveCommand.java b/src/main/java/me/bobert/netneutrality/command/music/LeaveCommand.java
index 6ab67af..8fe6c61 100644
--- a/src/main/java/me/bobert/netneutrality/command/music/LeaveCommand.java
+++ b/src/main/java/me/bobert/netneutrality/command/music/LeaveCommand.java
@@ -6,14 +6,14 @@ package me.bobert.netneutrality.command.music;
* https://discord.gg/qUa6zNFZsd
*/
-import me.bobert.netneutrality.core.command.AbstractMusicCommand;
+import me.bobert.netneutrality.core.command.impl.MusicCommand;
import me.bobert.netneutrality.core.command.CommandExecutionResult;
-import me.bobert.netneutrality.core.command.options.CommandOptionsBuilder;
+import me.bobert.netneutrality.core.command.CommandOptionsBuilder;
import me.bobert.netneutrality.core.context.CommandContext;
import me.bobert.netneutrality.music.MusicManager;
import me.bobert.netneutrality.utils.MusicUtils;
-public class LeaveCommand extends AbstractMusicCommand {
+public class LeaveCommand extends MusicCommand {
@Override
public boolean isEnabled() {
diff --git a/src/main/java/me/bobert/netneutrality/command/music/PlayCommand.java b/src/main/java/me/bobert/netneutrality/command/music/PlayCommand.java
index b6bd2de..1dd2c58 100644
--- a/src/main/java/me/bobert/netneutrality/command/music/PlayCommand.java
+++ b/src/main/java/me/bobert/netneutrality/command/music/PlayCommand.java
@@ -6,15 +6,15 @@ package me.bobert.netneutrality.command.music;
* https://discord.gg/qUa6zNFZsd
*/
-import me.bobert.netneutrality.core.command.AbstractMusicCommand;
+import me.bobert.netneutrality.core.command.impl.MusicCommand;
import me.bobert.netneutrality.core.command.CommandExecutionResult;
import me.bobert.netneutrality.core.command.options.CommandOption;
-import me.bobert.netneutrality.core.command.options.CommandOptionsBuilder;
+import me.bobert.netneutrality.core.command.CommandOptionsBuilder;
import me.bobert.netneutrality.core.context.CommandContext;
import me.bobert.netneutrality.music.MusicManager;
import net.dv8tion.jda.api.interactions.commands.OptionType;
-public class PlayCommand extends AbstractMusicCommand {
+public class PlayCommand extends MusicCommand {
@Override
public boolean isEnabled() {
diff --git a/src/main/java/me/bobert/netneutrality/command/music/QueueCommand.java b/src/main/java/me/bobert/netneutrality/command/music/QueueCommand.java
index 09a65ca..8280697 100644
--- a/src/main/java/me/bobert/netneutrality/command/music/QueueCommand.java
+++ b/src/main/java/me/bobert/netneutrality/command/music/QueueCommand.java
@@ -5,10 +5,10 @@ package me.bobert.netneutrality.command.music;
* https://discord.gg/qUa6zNFZsd
*/
-import me.bobert.netneutrality.core.command.AbstractMusicCommand;
+import me.bobert.netneutrality.core.command.impl.MusicCommand;
import me.bobert.netneutrality.core.command.CommandExecutionResult;
import me.bobert.netneutrality.core.command.options.CommandOption;
-import me.bobert.netneutrality.core.command.options.CommandOptionsBuilder;
+import me.bobert.netneutrality.core.command.CommandOptionsBuilder;
import me.bobert.netneutrality.core.context.CommandContext;
import me.bobert.netneutrality.music.MusicManager;
import me.bobert.netneutrality.utils.MessageFunction;
@@ -18,7 +18,7 @@ import net.dv8tion.jda.api.interactions.commands.OptionType;
import net.dv8tion.jda.api.interactions.commands.build.OptionData;
import net.dv8tion.jda.api.interactions.commands.build.SubcommandData;
-public class QueueCommand extends AbstractMusicCommand {
+public class QueueCommand extends MusicCommand {
@Override
public boolean isEnabled() {
diff --git a/src/main/java/me/bobert/netneutrality/command/music/ResumeCommand.java b/src/main/java/me/bobert/netneutrality/command/music/ResumeCommand.java
index da6e9a4..4a80b34 100644
--- a/src/main/java/me/bobert/netneutrality/command/music/ResumeCommand.java
+++ b/src/main/java/me/bobert/netneutrality/command/music/ResumeCommand.java
@@ -4,14 +4,14 @@ package me.bobert.netneutrality.command.music;/*
* https://discord.gg/qUa6zNFZsd
*/
-import me.bobert.netneutrality.core.command.AbstractMusicCommand;
+import me.bobert.netneutrality.core.command.impl.MusicCommand;
import me.bobert.netneutrality.core.command.CommandExecutionResult;
-import me.bobert.netneutrality.core.command.options.CommandOptionsBuilder;
+import me.bobert.netneutrality.core.command.CommandOptionsBuilder;
import me.bobert.netneutrality.core.context.CommandContext;
import me.bobert.netneutrality.music.MusicManager;
import me.bobert.netneutrality.utils.MusicUtils;
-public class ResumeCommand extends AbstractMusicCommand {
+public class ResumeCommand extends MusicCommand {
@Override
public boolean isEnabled() {
return true;
diff --git a/src/main/java/me/bobert/netneutrality/command/music/ShuffleCommand.java b/src/main/java/me/bobert/netneutrality/command/music/ShuffleCommand.java
index a63802c..a004ff0 100644
--- a/src/main/java/me/bobert/netneutrality/command/music/ShuffleCommand.java
+++ b/src/main/java/me/bobert/netneutrality/command/music/ShuffleCommand.java
@@ -6,14 +6,14 @@ package me.bobert.netneutrality.command.music;
* https://discord.gg/qUa6zNFZsd
*/
-import me.bobert.netneutrality.core.command.AbstractMusicCommand;
+import me.bobert.netneutrality.core.command.impl.MusicCommand;
import me.bobert.netneutrality.core.command.CommandExecutionResult;
-import me.bobert.netneutrality.core.command.options.CommandOptionsBuilder;
+import me.bobert.netneutrality.core.command.CommandOptionsBuilder;
import me.bobert.netneutrality.core.context.CommandContext;
import me.bobert.netneutrality.music.MusicManager;
import me.bobert.netneutrality.utils.MusicUtils;
-public class ShuffleCommand extends AbstractMusicCommand {
+public class ShuffleCommand extends MusicCommand {
@Override
public boolean isEnabled() {
return true;
diff --git a/src/main/java/me/bobert/netneutrality/command/music/SkipCommand.java b/src/main/java/me/bobert/netneutrality/command/music/SkipCommand.java
index 9dc2373..59bbba2 100644
--- a/src/main/java/me/bobert/netneutrality/command/music/SkipCommand.java
+++ b/src/main/java/me/bobert/netneutrality/command/music/SkipCommand.java
@@ -6,10 +6,10 @@ package me.bobert.netneutrality.command.music;
* https://discord.gg/qUa6zNFZsd
*/
-import me.bobert.netneutrality.core.command.AbstractMusicCommand;
+import me.bobert.netneutrality.core.command.impl.MusicCommand;
import me.bobert.netneutrality.core.command.CommandExecutionResult;
import me.bobert.netneutrality.core.command.options.CommandOption;
-import me.bobert.netneutrality.core.command.options.CommandOptionsBuilder;
+import me.bobert.netneutrality.core.command.CommandOptionsBuilder;
import me.bobert.netneutrality.core.context.CommandContext;
import me.bobert.netneutrality.music.MusicManager;
import me.bobert.netneutrality.utils.MusicUtils;
@@ -17,7 +17,7 @@ import me.bobert.netneutrality.utils.UserFunction;
import net.dv8tion.jda.api.interactions.commands.OptionType;
import net.dv8tion.jda.api.interactions.commands.build.OptionData;
-public class SkipCommand extends AbstractMusicCommand {
+public class SkipCommand extends MusicCommand {
@Override
public boolean isEnabled() {
diff --git a/src/main/java/me/bobert/netneutrality/command/music/StopCommand.java b/src/main/java/me/bobert/netneutrality/command/music/StopCommand.java
index bc0f727..407126d 100644
--- a/src/main/java/me/bobert/netneutrality/command/music/StopCommand.java
+++ b/src/main/java/me/bobert/netneutrality/command/music/StopCommand.java
@@ -6,15 +6,15 @@ package me.bobert.netneutrality.command.music;
* https://discord.gg/qUa6zNFZsd
*/
-import me.bobert.netneutrality.core.command.AbstractMusicCommand;
+import me.bobert.netneutrality.core.command.impl.MusicCommand;
import me.bobert.netneutrality.core.command.CommandExecutionResult;
-import me.bobert.netneutrality.core.command.options.CommandOptionsBuilder;
+import me.bobert.netneutrality.core.command.CommandOptionsBuilder;
import me.bobert.netneutrality.core.context.CommandContext;
import me.bobert.netneutrality.music.MusicManager;
import me.bobert.netneutrality.utils.MusicUtils;
import me.bobert.netneutrality.utils.UserFunction;
-public class StopCommand extends AbstractMusicCommand {
+public class StopCommand extends MusicCommand {
@Override
public boolean isEnabled() {
diff --git a/src/main/java/me/bobert/netneutrality/command/music/ViewQueueCommand.java b/src/main/java/me/bobert/netneutrality/command/music/ViewQueueCommand.java
index edf78ad..767bbf8 100644
--- a/src/main/java/me/bobert/netneutrality/command/music/ViewQueueCommand.java
+++ b/src/main/java/me/bobert/netneutrality/command/music/ViewQueueCommand.java
@@ -5,15 +5,15 @@ package me.bobert.netneutrality.command.music;
* https://discord.gg/qUa6zNFZsd
*/
-import me.bobert.netneutrality.core.command.AbstractMusicCommand;
+import me.bobert.netneutrality.core.command.impl.MusicCommand;
import me.bobert.netneutrality.core.command.CommandExecutionResult;
-import me.bobert.netneutrality.core.command.options.CommandOptionsBuilder;
+import me.bobert.netneutrality.core.command.CommandOptionsBuilder;
import me.bobert.netneutrality.core.context.CommandContext;
import me.bobert.netneutrality.music.MusicManager;
import me.bobert.netneutrality.utils.MessageFunction;
import me.bobert.netneutrality.utils.MusicUtils;
-public class ViewQueueCommand extends AbstractMusicCommand {
+public class ViewQueueCommand extends MusicCommand {
@Override
public boolean isEnabled() {
diff --git a/src/main/java/me/bobert/netneutrality/command/music/VolumeCommand.java b/src/main/java/me/bobert/netneutrality/command/music/VolumeCommand.java
index 90740d7..1ab6fef 100644
--- a/src/main/java/me/bobert/netneutrality/command/music/VolumeCommand.java
+++ b/src/main/java/me/bobert/netneutrality/command/music/VolumeCommand.java
@@ -6,10 +6,10 @@ package me.bobert.netneutrality.command.music;
* https://discord.gg/qUa6zNFZsd
*/
-import me.bobert.netneutrality.core.command.AbstractMusicCommand;
+import me.bobert.netneutrality.core.command.impl.MusicCommand;
import me.bobert.netneutrality.core.command.CommandExecutionResult;
import me.bobert.netneutrality.core.command.options.CommandOption;
-import me.bobert.netneutrality.core.command.options.CommandOptionsBuilder;
+import me.bobert.netneutrality.core.command.CommandOptionsBuilder;
import me.bobert.netneutrality.core.context.CommandContext;
import me.bobert.netneutrality.music.MusicManager;
import me.bobert.netneutrality.utils.MusicUtils;
@@ -17,7 +17,7 @@ import me.bobert.netneutrality.utils.UserFunction;
import net.dv8tion.jda.api.interactions.commands.OptionType;
import net.dv8tion.jda.api.interactions.commands.build.OptionData;
-public class VolumeCommand extends AbstractMusicCommand {
+public class VolumeCommand extends MusicCommand {
@Override
public boolean isEnabled() {
diff --git a/src/main/java/me/bobert/netneutrality/command/music/VoteSkipCommand.java b/src/main/java/me/bobert/netneutrality/command/music/VoteSkipCommand.java
index cb08015..7889578 100644
--- a/src/main/java/me/bobert/netneutrality/command/music/VoteSkipCommand.java
+++ b/src/main/java/me/bobert/netneutrality/command/music/VoteSkipCommand.java
@@ -5,14 +5,14 @@ package me.bobert.netneutrality.command.music;
* https://discord.gg/qUa6zNFZsd
*/
-import me.bobert.netneutrality.core.command.AbstractMusicCommand;
+import me.bobert.netneutrality.core.command.impl.MusicCommand;
import me.bobert.netneutrality.core.command.CommandExecutionResult;
-import me.bobert.netneutrality.core.command.options.CommandOptionsBuilder;
+import me.bobert.netneutrality.core.command.CommandOptionsBuilder;
import me.bobert.netneutrality.core.context.CommandContext;
import me.bobert.netneutrality.music.MusicManager;
import me.bobert.netneutrality.utils.MusicUtils;
-public class VoteSkipCommand extends AbstractMusicCommand {
+public class VoteSkipCommand extends MusicCommand {
@Override
public boolean isEnabled() {
diff --git a/src/main/java/me/bobert/netneutrality/command/react/CreateEmojiReaction.java b/src/main/java/me/bobert/netneutrality/command/react/CreateEmojiReaction.java
index c310c6d..a7710a4 100644
--- a/src/main/java/me/bobert/netneutrality/command/react/CreateEmojiReaction.java
+++ b/src/main/java/me/bobert/netneutrality/command/react/CreateEmojiReaction.java
@@ -6,7 +6,7 @@ package me.bobert.netneutrality.command.react;
* https://discord.gg/qUa6zNFZsd
*/
-import me.bobert.netneutrality.core.command.AbstractMessageMenuCommand;
+import me.bobert.netneutrality.core.command.impl.MessageMenuCommand;
import me.bobert.netneutrality.core.command.CommandExecutionResult;
import me.bobert.netneutrality.core.context.CommandContext;
import me.bobert.netneutrality.core.tasks.TaskManager;
@@ -14,7 +14,7 @@ import me.bobert.netneutrality.tasks.emoji.EmojiReactionRoleTask;
import me.bobert.netneutrality.tasks.reaction.EmojiRoleFirstStep;
import net.dv8tion.jda.api.entities.Message;
-public class CreateEmojiReaction extends AbstractMessageMenuCommand {
+public class CreateEmojiReaction extends MessageMenuCommand {
@Override
public CommandExecutionResult execute(Message target, CommandContext context) {
EmojiReactionRoleTask task = TaskManager.getInstance().findTaskByPartialId(EmojiReactionRoleTask.class, target.getId()).orElse(null);
diff --git a/src/main/java/me/bobert/netneutrality/command/react/ModifyEmojiReaction.java b/src/main/java/me/bobert/netneutrality/command/react/ModifyEmojiReaction.java
index d1d2c9a..47d4032 100644
--- a/src/main/java/me/bobert/netneutrality/command/react/ModifyEmojiReaction.java
+++ b/src/main/java/me/bobert/netneutrality/command/react/ModifyEmojiReaction.java
@@ -6,7 +6,7 @@ package me.bobert.netneutrality.command.react;
* https://discord.gg/qUa6zNFZsd
*/
-import me.bobert.netneutrality.core.command.AbstractMessageMenuCommand;
+import me.bobert.netneutrality.core.command.impl.MessageMenuCommand;
import me.bobert.netneutrality.core.command.CommandExecutionResult;
import me.bobert.netneutrality.core.context.CommandContext;
import me.bobert.netneutrality.core.tasks.TaskManager;
@@ -14,7 +14,7 @@ import me.bobert.netneutrality.tasks.emoji.EmojiReactionRoleTask;
import me.bobert.netneutrality.tasks.reaction.EmojiRoleModify;
import net.dv8tion.jda.api.entities.Message;
-public class ModifyEmojiReaction extends AbstractMessageMenuCommand {
+public class ModifyEmojiReaction extends MessageMenuCommand {
@Override
public CommandExecutionResult execute(Message target, CommandContext context) {
diff --git a/src/main/java/me/bobert/netneutrality/core/command/Command.java b/src/main/java/me/bobert/netneutrality/core/command/Command.java
index b6f3f02..08377d6 100644
--- a/src/main/java/me/bobert/netneutrality/core/command/Command.java
+++ b/src/main/java/me/bobert/netneutrality/core/command/Command.java
@@ -5,7 +5,6 @@ package me.bobert.netneutrality.core.command;
* https://discord.gg/qUa6zNFZsd
*/
-import me.bobert.netneutrality.core.command.options.CommandOptionsBuilder;
import me.bobert.netneutrality.core.context.CommandContext;
import net.dv8tion.jda.api.entities.Member;
import net.dv8tion.jda.api.entities.channel.middleman.MessageChannel;
diff --git a/src/main/java/me/bobert/netneutrality/core/command/CommandContainer.java b/src/main/java/me/bobert/netneutrality/core/command/CommandContainer.java
index 37e6ed7..1960f14 100644
--- a/src/main/java/me/bobert/netneutrality/core/command/CommandContainer.java
+++ b/src/main/java/me/bobert/netneutrality/core/command/CommandContainer.java
@@ -5,35 +5,175 @@ package me.bobert.netneutrality.core.command;
* https://discord.gg/qUa6zNFZsd
*/
-import me.bobert.netneutrality.core.command.options.CommandOptions;
-import me.bobert.netneutrality.core.command.options.CommandOptionsBuilder;
+import net.dv8tion.jda.api.entities.channel.ChannelType;
+import net.dv8tion.jda.api.interactions.commands.build.OptionData;
+import net.dv8tion.jda.api.interactions.commands.build.SlashCommandData;
+import net.dv8tion.jda.api.interactions.commands.build.SubcommandData;
+import net.dv8tion.jda.api.interactions.commands.build.SubcommandGroupData;
+import net.dv8tion.jda.internal.interactions.CommandDataImpl;
+
+import java.util.List;
+import java.util.Set;
+import java.util.StringJoiner;
public class CommandContainer {
public static final CommandContainer NULL_COMMAND = new CommandContainer(null);
private final Command command;
- private CommandOptions commandOptions;
+ private CommandDataImpl commandData;
+ private List options;
+ private List subcommands;
+ private List subcommandGroups;
public CommandContainer(Command command) {
this.command = command;
+
+ if (command != null) {
+ CommandOptionsBuilder commandOptionsBuilder = new CommandOptionsBuilder(command.getType(), command);
+ command.registerCommandOptions(commandOptionsBuilder);
+ initContainer(commandOptionsBuilder);
+ }
}
public Command getCommand() {
return command;
}
- public CommandOptions getCommandOptions() {
- return commandOptions;
+ public SlashCommandData getSlashCommandData() {
+ return commandData;
}
- public void init() {
- initOptions();
+ public List getOptions() {
+ return options;
}
- private void initOptions() {
- if (command != null) {
- CommandOptionsBuilder commandOptionsBuilder = new CommandOptionsBuilder(command.getType(), command);
- command.registerCommandOptions(commandOptionsBuilder);
- commandOptions = commandOptionsBuilder.build();
+ public List getSubcommands() {
+ return subcommands;
+ }
+
+ public List getSubcommandGroups() {
+ return subcommandGroups;
+ }
+
+ private void initContainer(CommandOptionsBuilder builder) {
+ this.commandData = builder.build();
+ this.options = commandData.getOptions();
+ this.subcommands = commandData.getSubcommands();
+ this.subcommandGroups = commandData.getSubcommandGroups();
+ }
+
+ public boolean isEmpty() {
+ return options.isEmpty() && subcommands.isEmpty() && subcommandGroups.isEmpty();
+ }
+
+ public String printUsage() {
+ StringBuilder usage = new StringBuilder();
+ if (!options.isEmpty()) {
+ usage.append("- Usage: /").append(command.getCommandName());
+ for (OptionData option : options) {
+ usage.append(" <").append(option.getName()).append(">");
+ }
+
+ usage.append(printOptions(options, null, false));
}
+
+ if (!subcommands.isEmpty()) {
+ for (SubcommandData subcommand : subcommands) {
+ usage.append("- Usage: /").append(command.getCommandName()).append(" ").append(subcommand.getName());
+
+ for (OptionData option : subcommand.getOptions()) {
+ usage.append(" <").append(option.getName()).append(">");
+ }
+
+ usage.append(" (").append(subcommand.getDescription()).append(")");
+ usage.append(printOptions(subcommand.getOptions(), null, false));
+
+ usage.append("\n");
+ }
+ }
+
+ if (!subcommandGroups.isEmpty()) {
+ for (SubcommandGroupData subcommandGroup : subcommandGroups) {
+ usage.append("- Subcommand: /").append(command.getCommandName())
+ .append(" ").append(subcommandGroup.getName())
+ .append(" (").append(subcommandGroup.getDescription()).append(")")
+ .append("\n");
+
+ for (SubcommandData subcommand : subcommandGroup.getSubcommands()) {
+ usage.append(" - Usage: /").append(command.getCommandName())
+ .append(" ").append(subcommandGroup.getName())
+ .append(" ").append(subcommand.getName());
+
+ for (OptionData option : subcommand.getOptions()) {
+ usage.append(" <").append(option.getName()).append(">");
+ }
+
+ usage.append(printOptions(subcommand.getOptions(), subcommand.getDescription(), true));
+
+ usage.append("\n");
+ }
+ }
+ }
+
+ if (!isEmpty()) {
+ usage.append("\n\n-# *: required argument");
+ }
+
+ return usage.toString();
+ }
+
+ private String printOptions(List options, String description, boolean group) {
+ StringBuilder usage = new StringBuilder();
+
+ if (description != null) {
+ usage.append(" (").append(description).append(")");
+ }
+
+ for (OptionData option : options) {
+ usage.append("\n");
+ if (group) usage.append(" ");
+ usage.append(" - ");
+ if (option.isRequired()) {
+ usage.append("*");
+ }
+ usage.append(option.getName()).append(": ").append(option.getDescription());
+
+ if (option.getMinValue() != null) {
+ usage.append(" [Min value: ").append(option.getMinValue().longValue()).append("]");
+ }
+
+ if (option.getMaxValue() != null) {
+ usage.append(" [Max value: ").append(option.getMaxValue().longValue()).append("]");
+ }
+
+ if (option.getMinLength() != null) {
+ usage.append(" [Min length: ").append(option.getMinLength().longValue()).append("]");
+ }
+
+ if (option.getMaxLength() != null) {
+ usage.append(" [Max length: ").append(option.getMaxLength().longValue()).append("]");
+ }
+
+ List choices = option.getChoices();
+ if (!choices.isEmpty()) {
+ StringJoiner joiner = new StringJoiner(", ");
+ for (net.dv8tion.jda.api.interactions.commands.Command.Choice choice : choices) {
+ joiner.add(choice.getAsString());
+ }
+
+ usage.append(" [Available choices: ").append(joiner).append("]");
+ }
+
+ Set requiredChannelTypes = option.getChannelTypes();
+ if (!requiredChannelTypes.isEmpty()) {
+ StringJoiner joiner = new StringJoiner(", ");
+ for (ChannelType type : requiredChannelTypes) {
+ joiner.add(type.name());
+ }
+
+ usage.append(" [Required channel types: ").append(joiner).append("]");
+ }
+ }
+
+ return usage.toString();
}
}
diff --git a/src/main/java/me/bobert/netneutrality/core/command/CommandManager.java b/src/main/java/me/bobert/netneutrality/core/command/CommandManager.java
index 2d1723d..79c8607 100644
--- a/src/main/java/me/bobert/netneutrality/core/command/CommandManager.java
+++ b/src/main/java/me/bobert/netneutrality/core/command/CommandManager.java
@@ -6,6 +6,7 @@ package me.bobert.netneutrality.core.command;
*/
import net.dv8tion.jda.api.JDA;
+import net.dv8tion.jda.api.interactions.InteractionContextType;
import net.dv8tion.jda.api.interactions.commands.build.CommandData;
import net.dv8tion.jda.api.interactions.commands.build.SlashCommandData;
import net.dv8tion.jda.api.requests.restaction.CommandListUpdateAction;
@@ -14,7 +15,10 @@ import org.apache.logging.log4j.Logger;
import org.reflections.Reflections;
import java.lang.reflect.Modifier;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
public class CommandManager {
@@ -30,10 +34,6 @@ public class CommandManager {
logger.info("Loaded {} commands!", commands.size());
}
- public static Command getCommand(String commandString) {
- return getCommandContainer(commandString).getCommand();
- }
-
public static CommandContainer getCommandContainer(String commandString) {
return commands.getOrDefault(commandString, CommandContainer.NULL_COMMAND);
}
@@ -60,8 +60,6 @@ public class CommandManager {
}
CommandContainer container = new CommandContainer(command);
- container.init();
-
if (!commands.containsKey(command.getCommandName())) {
commands.put(command.getCommandName(), container);
}
@@ -83,9 +81,9 @@ public class CommandManager {
logger.debug("Registering slash command: {}", command.getCommandName());
try {
- SlashCommandData data = container.getCommandOptions().getSlashCommandData();
+ SlashCommandData data = container.getSlashCommandData();
data.setDefaultPermissions(command.getSlashCommandPermission());
- data.setGuildOnly(command.isGuildOnly());
+ data.setContexts(command.isGuildOnly() ? Set.of(InteractionContextType.GUILD) : Set.of(InteractionContextType.GUILD, InteractionContextType.BOT_DM));
slashCommands.add(data);
} catch (Exception e) {
diff --git a/src/main/java/me/bobert/netneutrality/core/command/options/CommandOptionsBuilder.java b/src/main/java/me/bobert/netneutrality/core/command/CommandOptionsBuilder.java
similarity index 85%
rename from src/main/java/me/bobert/netneutrality/core/command/options/CommandOptionsBuilder.java
rename to src/main/java/me/bobert/netneutrality/core/command/CommandOptionsBuilder.java
index 20652d4..a3ca2dd 100644
--- a/src/main/java/me/bobert/netneutrality/core/command/options/CommandOptionsBuilder.java
+++ b/src/main/java/me/bobert/netneutrality/core/command/CommandOptionsBuilder.java
@@ -1,12 +1,13 @@
-package me.bobert.netneutrality.core.command.options;
+package me.bobert.netneutrality.core.command;
/*
* Copyright (c) anthorob
*
* https://discord.gg/qUa6zNFZsd
*/
-import me.bobert.netneutrality.core.command.Command;
import net.dv8tion.jda.api.interactions.DiscordLocale;
+import net.dv8tion.jda.api.interactions.IntegrationType;
+import net.dv8tion.jda.api.interactions.InteractionContextType;
import net.dv8tion.jda.api.interactions.commands.DefaultMemberPermissions;
import net.dv8tion.jda.api.interactions.commands.build.*;
import net.dv8tion.jda.api.interactions.commands.localization.LocalizationFunction;
@@ -15,16 +16,16 @@ import net.dv8tion.jda.api.utils.data.DataObject;
import net.dv8tion.jda.internal.interactions.CommandDataImpl;
import javax.annotation.Nonnull;
+import java.util.Collection;
import java.util.List;
import java.util.Map;
+import java.util.Set;
import java.util.function.Predicate;
public class CommandOptionsBuilder implements SlashCommandData {
- private final Command command;
private CommandDataImpl commandData;
public CommandOptionsBuilder(Command.Type type, Command command) {
- this.command = command;
if (type == Command.Type.SLASH) {
commandData = (CommandDataImpl) Commands.slash(command.getCommandName(), command.getDescription());
@@ -39,8 +40,8 @@ public class CommandOptionsBuilder implements SlashCommandData {
}
}
- public CommandOptions build() {
- return new CommandOptions(command, commandData);
+ public CommandDataImpl build() {
+ return commandData;
}
@Override
@@ -73,6 +74,16 @@ public class CommandOptionsBuilder implements SlashCommandData {
return commandData.setGuildOnly(guildOnly);
}
+ @Override
+ public @Nonnull SlashCommandData setContexts(@Nonnull Collection contexts) {
+ return commandData.setContexts(contexts);
+ }
+
+ @Override
+ public @Nonnull SlashCommandData setIntegrationTypes(@Nonnull Collection integrationTypes) {
+ return commandData.setIntegrationTypes(integrationTypes);
+ }
+
@Override
public @Nonnull SlashCommandData setNSFW(boolean nsfw) {
return commandData.setNSFW(nsfw);
@@ -103,6 +114,16 @@ public class CommandOptionsBuilder implements SlashCommandData {
return commandData.isGuildOnly();
}
+ @Override
+ public @Nonnull Set getContexts() {
+ return commandData.getContexts();
+ }
+
+ @Override
+ public @Nonnull Set getIntegrationTypes() {
+ return commandData.getIntegrationTypes();
+ }
+
@Override
public boolean isNSFW() {
return commandData.isNSFW();
diff --git a/src/main/java/me/bobert/netneutrality/core/command/CommandProcessor.java b/src/main/java/me/bobert/netneutrality/core/command/CommandProcessor.java
index 341c60f..0673248 100644
--- a/src/main/java/me/bobert/netneutrality/core/command/CommandProcessor.java
+++ b/src/main/java/me/bobert/netneutrality/core/command/CommandProcessor.java
@@ -8,10 +8,8 @@ package me.bobert.netneutrality.core.command;
import io.sentry.Sentry;
import me.bobert.netneutrality.context.command.SlashCommandContext;
import me.bobert.netneutrality.core.LogHandler;
-import me.bobert.netneutrality.core.command.options.CommandOptions;
import me.bobert.netneutrality.core.context.CommandContext;
import me.bobert.netneutrality.core.context.InteractionContext;
-import me.bobert.netneutrality.core.tasks.Task;
import me.bobert.netneutrality.core.tasks.TaskManager;
import me.bobert.netneutrality.exceptions.CommandExecutionException;
import me.bobert.netneutrality.exceptions.GracefulContextError;
@@ -73,7 +71,7 @@ public class CommandProcessor {
return;
}
- if (command.getType() == Command.Type.SLASH && !checkUsage(container.getCommandOptions())) {
+ if (command.getType() == Command.Type.SLASH && !checkUsage(container)) {
return;
}
@@ -123,10 +121,10 @@ public class CommandProcessor {
}
}
- private boolean checkUsage(CommandOptions commandOptions) {
- List groups = commandOptions.getSubcommandGroups();
- List subcommands = commandOptions.getSubcommands();
- List options = commandOptions.getOptions();
+ private boolean checkUsage(CommandContainer container) {
+ List groups = container.getSubcommandGroups();
+ List subcommands = container.getSubcommands();
+ List options = container.getOptions();
String[] possibleCommands = Arrays.stream(context.getFullCommand().split(" ")).skip(1).toArray(String[]::new);
if (possibleCommands.length == 0) {
if (!groups.isEmpty()) {
diff --git a/src/main/java/me/bobert/netneutrality/core/command/AbstractCommand.java b/src/main/java/me/bobert/netneutrality/core/command/impl/AbstractCommand.java
similarity index 90%
rename from src/main/java/me/bobert/netneutrality/core/command/AbstractCommand.java
rename to src/main/java/me/bobert/netneutrality/core/command/impl/AbstractCommand.java
index 439d57a..9eedddd 100644
--- a/src/main/java/me/bobert/netneutrality/core/command/AbstractCommand.java
+++ b/src/main/java/me/bobert/netneutrality/core/command/impl/AbstractCommand.java
@@ -1,4 +1,4 @@
-package me.bobert.netneutrality.core.command;
+package me.bobert.netneutrality.core.command.impl;
/*
* Copyright (c) anthorob
@@ -6,6 +6,7 @@ package me.bobert.netneutrality.core.command;
* https://discord.gg/qUa6zNFZsd
*/
+import me.bobert.netneutrality.core.command.Command;
import net.dv8tion.jda.api.entities.Member;
import net.dv8tion.jda.api.entities.channel.middleman.MessageChannel;
import net.dv8tion.jda.api.interactions.commands.DefaultMemberPermissions;
diff --git a/src/main/java/me/bobert/netneutrality/core/command/AbstractAdminCommand.java b/src/main/java/me/bobert/netneutrality/core/command/impl/AdminCommand.java
similarity index 59%
rename from src/main/java/me/bobert/netneutrality/core/command/AbstractAdminCommand.java
rename to src/main/java/me/bobert/netneutrality/core/command/impl/AdminCommand.java
index b98b3e1..fb816ca 100644
--- a/src/main/java/me/bobert/netneutrality/core/command/AbstractAdminCommand.java
+++ b/src/main/java/me/bobert/netneutrality/core/command/impl/AdminCommand.java
@@ -1,11 +1,13 @@
-package me.bobert.netneutrality.core.command;
+package me.bobert.netneutrality.core.command.impl;
/*
* Copyright (c) anthorob
*
* https://discord.gg/qUa6zNFZsd
*/
-public abstract class AbstractAdminCommand extends AbstractCommand {
+import me.bobert.netneutrality.core.command.CommandCategory;
+
+public abstract class AdminCommand extends AbstractCommand {
@Override
public boolean needAdmin() {
diff --git a/src/main/java/me/bobert/netneutrality/core/command/AbstractMessageMenuCommand.java b/src/main/java/me/bobert/netneutrality/core/command/impl/MessageMenuCommand.java
similarity index 79%
rename from src/main/java/me/bobert/netneutrality/core/command/AbstractMessageMenuCommand.java
rename to src/main/java/me/bobert/netneutrality/core/command/impl/MessageMenuCommand.java
index 1dfc4cd..536d589 100644
--- a/src/main/java/me/bobert/netneutrality/core/command/AbstractMessageMenuCommand.java
+++ b/src/main/java/me/bobert/netneutrality/core/command/impl/MessageMenuCommand.java
@@ -1,4 +1,4 @@
-package me.bobert.netneutrality.core.command;
+package me.bobert.netneutrality.core.command.impl;
/*
* Copyright (c) anthorob
@@ -7,11 +7,13 @@ package me.bobert.netneutrality.core.command;
*/
import me.bobert.netneutrality.context.command.MessageMenuContext;
-import me.bobert.netneutrality.core.command.options.CommandOptionsBuilder;
+import me.bobert.netneutrality.core.command.CommandCategory;
+import me.bobert.netneutrality.core.command.CommandExecutionResult;
+import me.bobert.netneutrality.core.command.CommandOptionsBuilder;
import me.bobert.netneutrality.core.context.CommandContext;
import net.dv8tion.jda.api.entities.Message;
-public abstract class AbstractMessageMenuCommand extends AbstractCommand {
+public abstract class MessageMenuCommand extends AbstractCommand {
@Override
public String getDescription() {
return null;
diff --git a/src/main/java/me/bobert/netneutrality/core/command/AbstractMusicCommand.java b/src/main/java/me/bobert/netneutrality/core/command/impl/MusicCommand.java
similarity index 92%
rename from src/main/java/me/bobert/netneutrality/core/command/AbstractMusicCommand.java
rename to src/main/java/me/bobert/netneutrality/core/command/impl/MusicCommand.java
index a4e9c8d..9fdadec 100644
--- a/src/main/java/me/bobert/netneutrality/core/command/AbstractMusicCommand.java
+++ b/src/main/java/me/bobert/netneutrality/core/command/impl/MusicCommand.java
@@ -1,10 +1,11 @@
-package me.bobert.netneutrality.core.command;
+package me.bobert.netneutrality.core.command.impl;
/*
* Copyright (c) anthorob
*
* https://discord.gg/qUa6zNFZsd
*/
+import me.bobert.netneutrality.core.command.CommandCategory;
import me.bobert.netneutrality.db.GSettings;
import me.bobert.netneutrality.db.service.GuildService;
import me.bobert.netneutrality.utils.UserFunction;
@@ -15,7 +16,7 @@ import net.dv8tion.jda.api.entities.channel.ChannelType;
import net.dv8tion.jda.api.entities.channel.middleman.GuildMessageChannel;
import net.dv8tion.jda.api.entities.channel.middleman.MessageChannel;
-public abstract class AbstractMusicCommand extends AbstractCommand {
+public abstract class MusicCommand extends AbstractCommand {
@Override
public boolean needAdmin() {
diff --git a/src/main/java/me/bobert/netneutrality/core/command/AbstractUserMenuCommand.java b/src/main/java/me/bobert/netneutrality/core/command/impl/UserMenuCommand.java
similarity index 80%
rename from src/main/java/me/bobert/netneutrality/core/command/AbstractUserMenuCommand.java
rename to src/main/java/me/bobert/netneutrality/core/command/impl/UserMenuCommand.java
index c9b2625..65d3b3d 100644
--- a/src/main/java/me/bobert/netneutrality/core/command/AbstractUserMenuCommand.java
+++ b/src/main/java/me/bobert/netneutrality/core/command/impl/UserMenuCommand.java
@@ -1,4 +1,4 @@
-package me.bobert.netneutrality.core.command;
+package me.bobert.netneutrality.core.command.impl;
/*
* Copyright (c) anthorob
@@ -7,11 +7,12 @@ package me.bobert.netneutrality.core.command;
*/
import me.bobert.netneutrality.context.command.UserMenuContext;
-import me.bobert.netneutrality.core.command.options.CommandOptionsBuilder;
+import me.bobert.netneutrality.core.command.CommandExecutionResult;
+import me.bobert.netneutrality.core.command.CommandOptionsBuilder;
import me.bobert.netneutrality.core.context.CommandContext;
import net.dv8tion.jda.api.entities.User;
-public abstract class AbstractUserMenuCommand extends AbstractCommand {
+public abstract class UserMenuCommand extends AbstractCommand {
@Override
public String getDescription() {
return null;
diff --git a/src/main/java/me/bobert/netneutrality/core/command/options/CommandOptions.java b/src/main/java/me/bobert/netneutrality/core/command/options/CommandOptions.java
deleted file mode 100644
index 70d55cd..0000000
--- a/src/main/java/me/bobert/netneutrality/core/command/options/CommandOptions.java
+++ /dev/null
@@ -1,170 +0,0 @@
-package me.bobert.netneutrality.core.command.options;
-/*
- * Copyright (c) anthorob
- *
- * https://discord.gg/qUa6zNFZsd
- */
-
-import me.bobert.netneutrality.core.command.Command;
-import net.dv8tion.jda.api.entities.channel.ChannelType;
-import net.dv8tion.jda.api.interactions.commands.build.OptionData;
-import net.dv8tion.jda.api.interactions.commands.build.SlashCommandData;
-import net.dv8tion.jda.api.interactions.commands.build.SubcommandData;
-import net.dv8tion.jda.api.interactions.commands.build.SubcommandGroupData;
-import net.dv8tion.jda.internal.interactions.CommandDataImpl;
-
-import java.util.List;
-import java.util.Set;
-import java.util.StringJoiner;
-
-public class CommandOptions {
- private final Command command;
- private final CommandDataImpl commandData;
- private final List options;
- private final List subcommands;
- private final List subcommandGroups;
-
- public CommandOptions(Command command, CommandDataImpl commandData) {
- this.command = command;
- this.commandData = commandData;
- this.options = commandData.getOptions();
- this.subcommands = commandData.getSubcommands();
- this.subcommandGroups = commandData.getSubcommandGroups();
- }
-
- public Command getCommand() {
- return command;
- }
-
- public SlashCommandData getSlashCommandData() {
- return commandData;
- }
-
- public List getOptions() {
- return options;
- }
-
- public List getSubcommands() {
- return subcommands;
- }
-
- public List getSubcommandGroups() {
- return subcommandGroups;
- }
-
- public boolean isEmpty() {
- return options.isEmpty() && subcommands.isEmpty() && subcommandGroups.isEmpty();
- }
-
- public String printUsage() {
- StringBuilder usage = new StringBuilder();
- if (!options.isEmpty()) {
- usage.append("- Usage: /").append(command.getCommandName());
- for (OptionData option : options) {
- usage.append(" <").append(option.getName()).append(">");
- }
-
- usage.append(printOptions(options, null, false));
- }
-
- if (!subcommands.isEmpty()) {
- for (SubcommandData subcommand : subcommands) {
- usage.append("- Usage: /").append(command.getCommandName()).append(" ").append(subcommand.getName());
-
- for (OptionData option : subcommand.getOptions()) {
- usage.append(" <").append(option.getName()).append(">");
- }
-
- usage.append(" (").append(subcommand.getDescription()).append(")");
- usage.append(printOptions(subcommand.getOptions(), null, false));
-
- usage.append("\n");
- }
- }
-
- if (!subcommandGroups.isEmpty()) {
- for (SubcommandGroupData subcommandGroup : subcommandGroups) {
- usage.append("- Subcommand: /").append(command.getCommandName())
- .append(" ").append(subcommandGroup.getName())
- .append(" (").append(subcommandGroup.getDescription()).append(")")
- .append("\n");
-
- for (SubcommandData subcommand : subcommandGroup.getSubcommands()) {
- usage.append(" - Usage: /").append(command.getCommandName())
- .append(" ").append(subcommandGroup.getName())
- .append(" ").append(subcommand.getName());
-
- for (OptionData option : subcommand.getOptions()) {
- usage.append(" <").append(option.getName()).append(">");
- }
-
- usage.append(printOptions(subcommand.getOptions(), subcommand.getDescription(), true));
-
- usage.append("\n");
- }
- }
- }
-
- if (!isEmpty()) {
- usage.append("\n\n-# *: required argument");
- }
-
- return usage.toString();
- }
-
- private String printOptions(List options, String description, boolean group) {
- StringBuilder usage = new StringBuilder();
-
- if (description != null) {
- usage.append(" (").append(description).append(")");
- }
-
- for (OptionData option : options) {
- usage.append("\n");
- if (group) usage.append(" ");
- usage.append(" - ");
- if (option.isRequired()) {
- usage.append("*");
- }
- usage.append(option.getName()).append(": ").append(option.getDescription());
-
- if (option.getMinValue() != null) {
- usage.append(" [Min value: ").append(option.getMinValue().longValue()).append("]");
- }
-
- if (option.getMaxValue() != null) {
- usage.append(" [Max value: ").append(option.getMaxValue().longValue()).append("]");
- }
-
- if (option.getMinLength() != null) {
- usage.append(" [Min length: ").append(option.getMinLength().longValue()).append("]");
- }
-
- if (option.getMaxLength() != null) {
- usage.append(" [Max length: ").append(option.getMaxLength().longValue()).append("]");
- }
-
- List choices = option.getChoices();
- if (!choices.isEmpty()) {
- StringJoiner joiner = new StringJoiner(", ");
- for (net.dv8tion.jda.api.interactions.commands.Command.Choice choice : choices) {
- joiner.add(choice.getAsString());
- }
-
- usage.append(" [Available choices: ").append(joiner).append("]");
- }
-
- Set requiredChannelTypes = option.getChannelTypes();
- if (!requiredChannelTypes.isEmpty()) {
- StringJoiner joiner = new StringJoiner(", ");
- for (ChannelType type : requiredChannelTypes) {
- joiner.add(type.name());
- }
-
- usage.append(" [Required channel types: ").append(joiner).append("]");
- }
- }
-
- return usage.toString();
- }
-}
diff --git a/src/main/java/me/bobert/netneutrality/utils/MessageFunction.java b/src/main/java/me/bobert/netneutrality/utils/MessageFunction.java
index 0586fd1..7a3a7dd 100644
--- a/src/main/java/me/bobert/netneutrality/utils/MessageFunction.java
+++ b/src/main/java/me/bobert/netneutrality/utils/MessageFunction.java
@@ -246,7 +246,7 @@ public class MessageFunction {
if (container.getCommand().getDescription() != null) {
message += "\n- Description: " + container.getCommand().getDescription();
}
- message += "\n" + container.getCommandOptions().printUsage();
+ message += "\n" + container.printUsage();
return message;
}