***VERY EXPERIMENTAL*** args parser
This commit is contained in:
parent
840afd22ef
commit
824697879d
39 changed files with 533 additions and 508 deletions
|
@ -26,5 +26,5 @@ public abstract class Command {
|
||||||
this.consoleOnly = consoleOnly;
|
this.consoleOnly = consoleOnly;
|
||||||
}
|
}
|
||||||
|
|
||||||
public abstract Component execute (CommandContext context, String[] args, String[] fullArgs) throws Exception;
|
public abstract Component execute (CommandContext context) throws Exception;
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,6 +4,8 @@ import land.chipmunk.chayapak.chomens_bot.Bot;
|
||||||
import land.chipmunk.chayapak.chomens_bot.data.chat.PlayerEntry;
|
import land.chipmunk.chayapak.chomens_bot.data.chat.PlayerEntry;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
public class CommandContext {
|
public class CommandContext {
|
||||||
public final Bot bot;
|
public final Bot bot;
|
||||||
|
|
||||||
|
@ -15,7 +17,8 @@ public class CommandContext {
|
||||||
|
|
||||||
public String commandName = null;
|
public String commandName = null;
|
||||||
|
|
||||||
public String[] splitInput;
|
public String[] fullArgs;
|
||||||
|
public String[] args;
|
||||||
|
|
||||||
public CommandContext(Bot bot, String prefix, PlayerEntry sender, boolean inGame) {
|
public CommandContext(Bot bot, String prefix, PlayerEntry sender, boolean inGame) {
|
||||||
this.bot = bot;
|
this.bot = bot;
|
||||||
|
@ -26,4 +29,82 @@ public class CommandContext {
|
||||||
|
|
||||||
public Component displayName () { return Component.empty(); }
|
public Component displayName () { return Component.empty(); }
|
||||||
public void sendOutput (Component component) {}
|
public void sendOutput (Component component) {}
|
||||||
|
|
||||||
|
private int argsPosition = 0;
|
||||||
|
|
||||||
|
public String getString (boolean greedy, boolean required) throws CommandException { return getString(greedy, required, "string"); }
|
||||||
|
private String getString (boolean greedy, boolean required, String type) throws CommandException {
|
||||||
|
if (args.length == 0 || args[Math.min(argsPosition, args.length - 1)] == null) {
|
||||||
|
if (required) {
|
||||||
|
throw new CommandException(
|
||||||
|
Component.translatable(
|
||||||
|
"Expected %s",
|
||||||
|
Component.text(type)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return greedy ? String.join(" ", Arrays.copyOfRange(args, argsPosition++, args.length)) : args[Math.min(argsPosition++, args.length - 1)];
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getInteger (boolean required) throws CommandException {
|
||||||
|
final String string = getString(false, required, "integer");
|
||||||
|
|
||||||
|
if (string.isEmpty()) return null;
|
||||||
|
|
||||||
|
try {
|
||||||
|
return Integer.parseInt(string);
|
||||||
|
} catch (NumberFormatException e) {
|
||||||
|
throw new CommandException(Component.text("Invalid integer"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public Double getDouble (boolean required) throws CommandException {
|
||||||
|
final String string = getString(false, required, "double");
|
||||||
|
|
||||||
|
if (string.isEmpty()) return null;
|
||||||
|
|
||||||
|
try {
|
||||||
|
return Double.parseDouble(string);
|
||||||
|
} catch (NumberFormatException e) {
|
||||||
|
throw new CommandException(Component.text("Invalid double"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public Float getFloat (boolean required) throws CommandException {
|
||||||
|
final String string = getString(false, required, "float");
|
||||||
|
|
||||||
|
if (string.isEmpty()) return null;
|
||||||
|
|
||||||
|
try {
|
||||||
|
return Float.parseFloat(string);
|
||||||
|
} catch (NumberFormatException e) {
|
||||||
|
throw new CommandException(Component.text("Invalid float"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public Boolean getBoolean (boolean required) throws CommandException {
|
||||||
|
final String string = getString(false, required, "boolean");
|
||||||
|
|
||||||
|
if (string.isEmpty()) return null;
|
||||||
|
|
||||||
|
return switch (string) {
|
||||||
|
case "true" -> true;
|
||||||
|
case "false" -> false;
|
||||||
|
default -> throw new CommandException(Component.text("Invalid boolean"));
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
public <T extends Enum<T>> T getEnum (Class<T> enumClass) throws CommandException {
|
||||||
|
final String string = getString(false, true, enumClass.getSimpleName());
|
||||||
|
|
||||||
|
try {
|
||||||
|
return Enum.valueOf(enumClass, string.toUpperCase());
|
||||||
|
} catch (IllegalArgumentException | NullPointerException e) {
|
||||||
|
throw new CommandException(Component.text("Invalid enum"));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,11 @@
|
||||||
|
package land.chipmunk.chayapak.chomens_bot.command;
|
||||||
|
|
||||||
|
import net.kyori.adventure.text.Component;
|
||||||
|
|
||||||
|
public class CommandException extends Exception {
|
||||||
|
public final Component message;
|
||||||
|
|
||||||
|
public CommandException (Component message) {
|
||||||
|
this.message = message;
|
||||||
|
}
|
||||||
|
}
|
|
@ -3,6 +3,7 @@ package land.chipmunk.chayapak.chomens_bot.commands;
|
||||||
import land.chipmunk.chayapak.chomens_bot.Bot;
|
import land.chipmunk.chayapak.chomens_bot.Bot;
|
||||||
import land.chipmunk.chayapak.chomens_bot.command.Command;
|
import land.chipmunk.chayapak.chomens_bot.command.Command;
|
||||||
import land.chipmunk.chayapak.chomens_bot.command.CommandContext;
|
import land.chipmunk.chayapak.chomens_bot.command.CommandContext;
|
||||||
|
import land.chipmunk.chayapak.chomens_bot.command.CommandException;
|
||||||
import land.chipmunk.chayapak.chomens_bot.command.TrustLevel;
|
import land.chipmunk.chayapak.chomens_bot.command.TrustLevel;
|
||||||
import land.chipmunk.chayapak.chomens_bot.util.ColorUtilities;
|
import land.chipmunk.chayapak.chomens_bot.util.ColorUtilities;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
|
@ -21,10 +22,12 @@ public class BotVisibilityCommand extends Command {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Component execute(CommandContext context, String[] args, String[] fullArgs) {
|
public Component execute(CommandContext context) throws CommandException {
|
||||||
final Bot bot = context.bot;
|
final Bot bot = context.bot;
|
||||||
|
|
||||||
if (args.length == 0) {
|
final String action = context.getString(false, false);
|
||||||
|
|
||||||
|
if (action.isEmpty()) {
|
||||||
final boolean visibility = bot.selfCare.visibility;
|
final boolean visibility = bot.selfCare.visibility;
|
||||||
bot.selfCare.visibility = !visibility;
|
bot.selfCare.visibility = !visibility;
|
||||||
|
|
||||||
|
@ -37,7 +40,7 @@ public class BotVisibilityCommand extends Command {
|
||||||
.append(Component.text(visibleOrInvisible).color(greenOrGold))
|
.append(Component.text(visibleOrInvisible).color(greenOrGold))
|
||||||
.color(ColorUtilities.getColorByString(bot.config.colorPalette.defaultColor));
|
.color(ColorUtilities.getColorByString(bot.config.colorPalette.defaultColor));
|
||||||
} else {
|
} else {
|
||||||
switch (args[0]) {
|
switch (action) {
|
||||||
case "on", "true" -> {
|
case "on", "true" -> {
|
||||||
bot.selfCare.visibility = true;
|
bot.selfCare.visibility = true;
|
||||||
bot.chat.send("/essentials:vanish disable");
|
bot.chat.send("/essentials:vanish disable");
|
||||||
|
@ -55,7 +58,7 @@ public class BotVisibilityCommand extends Command {
|
||||||
.color(ColorUtilities.getColorByString(bot.config.colorPalette.defaultColor));
|
.color(ColorUtilities.getColorByString(bot.config.colorPalette.defaultColor));
|
||||||
}
|
}
|
||||||
default -> {
|
default -> {
|
||||||
return Component.text("Invalid action").color(NamedTextColor.RED);
|
throw new CommandException(Component.text("Invalid action"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,7 @@ package land.chipmunk.chayapak.chomens_bot.commands;
|
||||||
import land.chipmunk.chayapak.chomens_bot.Bot;
|
import land.chipmunk.chayapak.chomens_bot.Bot;
|
||||||
import land.chipmunk.chayapak.chomens_bot.command.Command;
|
import land.chipmunk.chayapak.chomens_bot.command.Command;
|
||||||
import land.chipmunk.chayapak.chomens_bot.command.CommandContext;
|
import land.chipmunk.chayapak.chomens_bot.command.CommandContext;
|
||||||
|
import land.chipmunk.chayapak.chomens_bot.command.CommandException;
|
||||||
import land.chipmunk.chayapak.chomens_bot.command.TrustLevel;
|
import land.chipmunk.chayapak.chomens_bot.command.TrustLevel;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
|
|
||||||
|
@ -11,7 +12,7 @@ public class BruhifyCommand extends Command {
|
||||||
super(
|
super(
|
||||||
"bruhify",
|
"bruhify",
|
||||||
"RecycleBots bruhify but actionbar",
|
"RecycleBots bruhify but actionbar",
|
||||||
new String[] { "[{message}]" },
|
new String[] { "[message]" },
|
||||||
new String[] {},
|
new String[] {},
|
||||||
TrustLevel.PUBLIC,
|
TrustLevel.PUBLIC,
|
||||||
false
|
false
|
||||||
|
@ -19,14 +20,10 @@ public class BruhifyCommand extends Command {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Component execute(CommandContext context, String[] args, String[] fullArgs) {
|
public Component execute(CommandContext context) throws CommandException {
|
||||||
final Bot bot = context.bot;
|
final Bot bot = context.bot;
|
||||||
|
|
||||||
if (args.length == 0) {
|
bot.bruhify.bruhifyText = context.getString(true, false);
|
||||||
bot.bruhify.bruhifyText = "";
|
|
||||||
} else {
|
|
||||||
bot.bruhify.bruhifyText = String.join(" ", args);
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,10 +1,11 @@
|
||||||
package land.chipmunk.chayapak.chomens_bot.commands;
|
package land.chipmunk.chayapak.chomens_bot.commands;
|
||||||
|
|
||||||
import land.chipmunk.chayapak.chomens_bot.Bot;
|
import land.chipmunk.chayapak.chomens_bot.Bot;
|
||||||
import land.chipmunk.chayapak.chomens_bot.command.TrustLevel;
|
|
||||||
import land.chipmunk.chayapak.chomens_bot.data.chat.PlayerEntry;
|
|
||||||
import land.chipmunk.chayapak.chomens_bot.command.Command;
|
import land.chipmunk.chayapak.chomens_bot.command.Command;
|
||||||
import land.chipmunk.chayapak.chomens_bot.command.CommandContext;
|
import land.chipmunk.chayapak.chomens_bot.command.CommandContext;
|
||||||
|
import land.chipmunk.chayapak.chomens_bot.command.CommandException;
|
||||||
|
import land.chipmunk.chayapak.chomens_bot.command.TrustLevel;
|
||||||
|
import land.chipmunk.chayapak.chomens_bot.data.chat.PlayerEntry;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
import net.kyori.adventure.text.format.NamedTextColor;
|
import net.kyori.adventure.text.format.NamedTextColor;
|
||||||
|
|
||||||
|
@ -23,13 +24,15 @@ public class ClearChatCommand extends Command {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Component execute(CommandContext context, String[] args, String[] fullArgs) {
|
public Component execute(CommandContext context) throws CommandException {
|
||||||
final Bot bot = context.bot;
|
final Bot bot = context.bot;
|
||||||
|
|
||||||
if (args.length > 0) {
|
final String name = context.getString(true, false);
|
||||||
final PlayerEntry entry = bot.players.getEntry(String.join(" ", args));
|
|
||||||
|
|
||||||
if (entry == null) return Component.text("Invalid player name").color(NamedTextColor.RED);
|
if (name.isEmpty()) {
|
||||||
|
final PlayerEntry entry = bot.players.getEntry(name);
|
||||||
|
|
||||||
|
if (entry == null) throw new CommandException(Component.text("Invalid player name"));
|
||||||
|
|
||||||
final UUID uuid = entry.profile.getId();
|
final UUID uuid = entry.profile.getId();
|
||||||
|
|
||||||
|
|
|
@ -19,7 +19,7 @@ public class ClearChatQueueCommand extends Command {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Component execute(CommandContext context, String[] args, String[] fullArgs) {
|
public Component execute(CommandContext context) {
|
||||||
final Bot bot = context.bot;
|
final Bot bot = context.bot;
|
||||||
|
|
||||||
bot.chat.clearQueue();
|
bot.chat.clearQueue();
|
||||||
|
|
|
@ -3,6 +3,7 @@ package land.chipmunk.chayapak.chomens_bot.commands;
|
||||||
import land.chipmunk.chayapak.chomens_bot.Bot;
|
import land.chipmunk.chayapak.chomens_bot.Bot;
|
||||||
import land.chipmunk.chayapak.chomens_bot.command.Command;
|
import land.chipmunk.chayapak.chomens_bot.command.Command;
|
||||||
import land.chipmunk.chayapak.chomens_bot.command.CommandContext;
|
import land.chipmunk.chayapak.chomens_bot.command.CommandContext;
|
||||||
|
import land.chipmunk.chayapak.chomens_bot.command.CommandException;
|
||||||
import land.chipmunk.chayapak.chomens_bot.command.TrustLevel;
|
import land.chipmunk.chayapak.chomens_bot.command.TrustLevel;
|
||||||
import land.chipmunk.chayapak.chomens_bot.data.CommandLoop;
|
import land.chipmunk.chayapak.chomens_bot.data.CommandLoop;
|
||||||
import land.chipmunk.chayapak.chomens_bot.util.ColorUtilities;
|
import land.chipmunk.chayapak.chomens_bot.util.ColorUtilities;
|
||||||
|
@ -11,7 +12,6 @@ import net.kyori.adventure.text.JoinConfiguration;
|
||||||
import net.kyori.adventure.text.format.NamedTextColor;
|
import net.kyori.adventure.text.format.NamedTextColor;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class CloopCommand extends Command {
|
public class CloopCommand extends Command {
|
||||||
|
@ -19,7 +19,7 @@ public class CloopCommand extends Command {
|
||||||
super(
|
super(
|
||||||
"cloop",
|
"cloop",
|
||||||
"Loop commands",
|
"Loop commands",
|
||||||
new String[] { "<hash> add <interval> <{command}>", "<hash> remove <index>", "<hash> clear", "<hash> list" },
|
new String[] { "<hash> add <interval> <command>", "<hash> remove <index>", "<hash> clear", "<hash> list" },
|
||||||
new String[] { "commandloop" },
|
new String[] { "commandloop" },
|
||||||
TrustLevel.TRUSTED,
|
TrustLevel.TRUSTED,
|
||||||
false
|
false
|
||||||
|
@ -27,21 +27,17 @@ public class CloopCommand extends Command {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Component execute(CommandContext context, String[] args, String[] fullArgs) {
|
public Component execute(CommandContext context) throws CommandException {
|
||||||
final Bot bot = context.bot;
|
final Bot bot = context.bot;
|
||||||
|
|
||||||
switch (args[0]) {
|
final String action = context.getString(false, true);
|
||||||
case "add" -> {
|
|
||||||
if (args.length < 3) return Component.text("Please specify interval and command").color(NamedTextColor.RED);
|
|
||||||
int interval;
|
|
||||||
try {
|
|
||||||
interval = Integer.parseInt(args[1]);
|
|
||||||
if (interval < 1) interval = 1;
|
|
||||||
} catch (IllegalArgumentException ignored) {
|
|
||||||
return Component.text("Invalid interval").color(NamedTextColor.RED);
|
|
||||||
}
|
|
||||||
|
|
||||||
final String command = String.join(" ", Arrays.copyOfRange(args, 2, args.length));
|
switch (action) {
|
||||||
|
case "add" -> {
|
||||||
|
int interval = context.getInteger(true);
|
||||||
|
if (interval < 1) interval = 1;
|
||||||
|
|
||||||
|
final String command = context.getString(true, true);
|
||||||
|
|
||||||
bot.cloop.add(interval, command);
|
bot.cloop.add(interval, command);
|
||||||
|
|
||||||
|
@ -53,7 +49,7 @@ public class CloopCommand extends Command {
|
||||||
}
|
}
|
||||||
case "remove" -> {
|
case "remove" -> {
|
||||||
try {
|
try {
|
||||||
final int index = Integer.parseInt(args[1]);
|
final int index = context.getInteger(true);
|
||||||
bot.cloop.remove(index);
|
bot.cloop.remove(index);
|
||||||
|
|
||||||
return Component.translatable(
|
return Component.translatable(
|
||||||
|
@ -61,7 +57,7 @@ public class CloopCommand extends Command {
|
||||||
Component.text(index).color(ColorUtilities.getColorByString(bot.config.colorPalette.number))
|
Component.text(index).color(ColorUtilities.getColorByString(bot.config.colorPalette.number))
|
||||||
).color(ColorUtilities.getColorByString(bot.config.colorPalette.defaultColor));
|
).color(ColorUtilities.getColorByString(bot.config.colorPalette.defaultColor));
|
||||||
} catch (IndexOutOfBoundsException | IllegalArgumentException | NullPointerException ignored) {
|
} catch (IndexOutOfBoundsException | IllegalArgumentException | NullPointerException ignored) {
|
||||||
return Component.text("Invalid index").color(NamedTextColor.RED);
|
throw new CommandException(Component.text("Invalid index"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
case "clear" -> {
|
case "clear" -> {
|
||||||
|
@ -95,7 +91,7 @@ public class CloopCommand extends Command {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
default -> {
|
default -> {
|
||||||
return Component.text("Invalid action").color(NamedTextColor.RED);
|
throw new CommandException(Component.text("Invalid action"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,6 +5,7 @@ import com.github.steveice10.opennbt.tag.builtin.StringTag;
|
||||||
import land.chipmunk.chayapak.chomens_bot.Bot;
|
import land.chipmunk.chayapak.chomens_bot.Bot;
|
||||||
import land.chipmunk.chayapak.chomens_bot.command.Command;
|
import land.chipmunk.chayapak.chomens_bot.command.Command;
|
||||||
import land.chipmunk.chayapak.chomens_bot.command.CommandContext;
|
import land.chipmunk.chayapak.chomens_bot.command.CommandContext;
|
||||||
|
import land.chipmunk.chayapak.chomens_bot.command.CommandException;
|
||||||
import land.chipmunk.chayapak.chomens_bot.command.TrustLevel;
|
import land.chipmunk.chayapak.chomens_bot.command.TrustLevel;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
import net.kyori.adventure.text.JoinConfiguration;
|
import net.kyori.adventure.text.JoinConfiguration;
|
||||||
|
@ -18,7 +19,7 @@ public class CommandBlockCommand extends Command {
|
||||||
super(
|
super(
|
||||||
"cb",
|
"cb",
|
||||||
"Executes a command in the command core and return its output",
|
"Executes a command in the command core and return its output",
|
||||||
new String[] { "<{command}>" },
|
new String[] { "<command>" },
|
||||||
new String[] { "cmd", "commandblock", "run" },
|
new String[] { "cmd", "commandblock", "run" },
|
||||||
TrustLevel.PUBLIC,
|
TrustLevel.PUBLIC,
|
||||||
false
|
false
|
||||||
|
@ -26,10 +27,10 @@ public class CommandBlockCommand extends Command {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Component execute(CommandContext context, String[] args, String[] fullArgs) {
|
public Component execute(CommandContext context) throws CommandException {
|
||||||
final Bot bot = context.bot;
|
final Bot bot = context.bot;
|
||||||
|
|
||||||
final CompletableFuture<CompoundTag> future = bot.core.runTracked(String.join(" ", args));
|
final CompletableFuture<CompoundTag> future = bot.core.runTracked(context.getString(true, true));
|
||||||
|
|
||||||
if (future == null) return null;
|
if (future == null) return null;
|
||||||
|
|
||||||
|
|
|
@ -3,13 +3,13 @@ package land.chipmunk.chayapak.chomens_bot.commands;
|
||||||
import land.chipmunk.chayapak.chomens_bot.Bot;
|
import land.chipmunk.chayapak.chomens_bot.Bot;
|
||||||
import land.chipmunk.chayapak.chomens_bot.command.Command;
|
import land.chipmunk.chayapak.chomens_bot.command.Command;
|
||||||
import land.chipmunk.chayapak.chomens_bot.command.CommandContext;
|
import land.chipmunk.chayapak.chomens_bot.command.CommandContext;
|
||||||
|
import land.chipmunk.chayapak.chomens_bot.command.CommandException;
|
||||||
import land.chipmunk.chayapak.chomens_bot.command.TrustLevel;
|
import land.chipmunk.chayapak.chomens_bot.command.TrustLevel;
|
||||||
import land.chipmunk.chayapak.chomens_bot.util.ColorUtilities;
|
import land.chipmunk.chayapak.chomens_bot.util.ColorUtilities;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
import net.kyori.adventure.text.format.NamedTextColor;
|
import net.kyori.adventure.text.format.NamedTextColor;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class ConsoleCommand extends Command {
|
public class ConsoleCommand extends Command {
|
||||||
|
@ -18,7 +18,7 @@ public class ConsoleCommand extends Command {
|
||||||
"console",
|
"console",
|
||||||
"Controls stuff about console",
|
"Controls stuff about console",
|
||||||
new String[] {
|
new String[] {
|
||||||
"<ownerHash> server <{server}>",
|
"<ownerHash> server <server>",
|
||||||
"<ownerHash> logtoconsole <true|false>"
|
"<ownerHash> logtoconsole <true|false>"
|
||||||
},
|
},
|
||||||
new String[] {},
|
new String[] {},
|
||||||
|
@ -28,12 +28,12 @@ public class ConsoleCommand extends Command {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Component execute(CommandContext context, String[] args, String[] fullArgs) {
|
public Component execute(CommandContext context) throws CommandException {
|
||||||
final Bot bot = context.bot;
|
final Bot bot = context.bot;
|
||||||
|
|
||||||
if (args.length < 2) return Component.text("Not enough arguments").color(NamedTextColor.RED);
|
final String action = context.getString(false, true);
|
||||||
|
|
||||||
switch (args[0]) {
|
switch (action) {
|
||||||
case "server" -> {
|
case "server" -> {
|
||||||
final List<String> servers = new ArrayList<>();
|
final List<String> servers = new ArrayList<>();
|
||||||
|
|
||||||
|
@ -41,9 +41,9 @@ public class ConsoleCommand extends Command {
|
||||||
servers.add(eachBot.host + ":" + eachBot.port);
|
servers.add(eachBot.host + ":" + eachBot.port);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (Bot eachBot : bot.bots) {
|
final String server = context.getString(true, true);
|
||||||
final String server = String.join(" ", Arrays.copyOfRange(args, 1, args.length));
|
|
||||||
|
|
||||||
|
for (Bot eachBot : bot.bots) {
|
||||||
if (server.equalsIgnoreCase("all")) {
|
if (server.equalsIgnoreCase("all")) {
|
||||||
eachBot.console.consoleServer = "all";
|
eachBot.console.consoleServer = "all";
|
||||||
|
|
||||||
|
@ -60,12 +60,12 @@ public class ConsoleCommand extends Command {
|
||||||
|
|
||||||
context.sendOutput(Component.text("Set the console server to " + bot.console.consoleServer).color(ColorUtilities.getColorByString(bot.config.colorPalette.defaultColor)));
|
context.sendOutput(Component.text("Set the console server to " + bot.console.consoleServer).color(ColorUtilities.getColorByString(bot.config.colorPalette.defaultColor)));
|
||||||
} catch (ArrayIndexOutOfBoundsException e) {
|
} catch (ArrayIndexOutOfBoundsException e) {
|
||||||
return Component.text("Invalid server: " + server).color(NamedTextColor.RED);
|
throw new CommandException(Component.text("Invalid server: " + server));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
case "logtoconsole" -> {
|
case "logtoconsole" -> {
|
||||||
final boolean bool = Boolean.parseBoolean(args[1]);
|
final boolean bool = context.getBoolean(true);
|
||||||
|
|
||||||
bot.logger.logToConsole = bool;
|
bot.logger.logToConsole = bool;
|
||||||
|
|
||||||
|
|
|
@ -3,6 +3,7 @@ package land.chipmunk.chayapak.chomens_bot.commands;
|
||||||
import com.github.ricksbrown.cowsay.plugin.CowExecutor;
|
import com.github.ricksbrown.cowsay.plugin.CowExecutor;
|
||||||
import land.chipmunk.chayapak.chomens_bot.command.Command;
|
import land.chipmunk.chayapak.chomens_bot.command.Command;
|
||||||
import land.chipmunk.chayapak.chomens_bot.command.CommandContext;
|
import land.chipmunk.chayapak.chomens_bot.command.CommandContext;
|
||||||
|
import land.chipmunk.chayapak.chomens_bot.command.CommandException;
|
||||||
import land.chipmunk.chayapak.chomens_bot.command.TrustLevel;
|
import land.chipmunk.chayapak.chomens_bot.command.TrustLevel;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
|
|
||||||
|
@ -11,7 +12,7 @@ public class CowsayCommand extends Command {
|
||||||
super(
|
super(
|
||||||
"cowsay",
|
"cowsay",
|
||||||
"Moo",
|
"Moo",
|
||||||
new String[] { "<{message}>" },
|
new String[] { "<message>" },
|
||||||
new String[] {},
|
new String[] {},
|
||||||
TrustLevel.PUBLIC,
|
TrustLevel.PUBLIC,
|
||||||
false
|
false
|
||||||
|
@ -19,8 +20,8 @@ public class CowsayCommand extends Command {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Component execute(CommandContext context, String[] args, String[] fullArgs) {
|
public Component execute(CommandContext context) throws CommandException {
|
||||||
final String message = String.join(" ", args);
|
final String message = context.getString(true, true);
|
||||||
|
|
||||||
final CowExecutor cowExecutor = new CowExecutor();
|
final CowExecutor cowExecutor = new CowExecutor();
|
||||||
cowExecutor.setMessage(message);
|
cowExecutor.setMessage(message);
|
||||||
|
|
|
@ -22,7 +22,7 @@ public class DiscordCommand extends Command {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Component execute(CommandContext context, String[] args, String[] fullArgs) {
|
public Component execute(CommandContext context) {
|
||||||
final Bot bot = context.bot;
|
final Bot bot = context.bot;
|
||||||
|
|
||||||
final String link = bot.config.discord.inviteLink;
|
final String link = bot.config.discord.inviteLink;
|
||||||
|
|
|
@ -3,6 +3,7 @@ package land.chipmunk.chayapak.chomens_bot.commands;
|
||||||
import land.chipmunk.chayapak.chomens_bot.Bot;
|
import land.chipmunk.chayapak.chomens_bot.Bot;
|
||||||
import land.chipmunk.chayapak.chomens_bot.command.Command;
|
import land.chipmunk.chayapak.chomens_bot.command.Command;
|
||||||
import land.chipmunk.chayapak.chomens_bot.command.CommandContext;
|
import land.chipmunk.chayapak.chomens_bot.command.CommandContext;
|
||||||
|
import land.chipmunk.chayapak.chomens_bot.command.CommandException;
|
||||||
import land.chipmunk.chayapak.chomens_bot.command.TrustLevel;
|
import land.chipmunk.chayapak.chomens_bot.command.TrustLevel;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
|
|
||||||
|
@ -11,7 +12,7 @@ public class EchoCommand extends Command {
|
||||||
super(
|
super(
|
||||||
"echo",
|
"echo",
|
||||||
"Makes the bot say a message",
|
"Makes the bot say a message",
|
||||||
new String[] { "<{message}>" },
|
new String[] { "<message>" },
|
||||||
new String[] { "say" },
|
new String[] { "say" },
|
||||||
TrustLevel.PUBLIC,
|
TrustLevel.PUBLIC,
|
||||||
false
|
false
|
||||||
|
@ -19,10 +20,10 @@ public class EchoCommand extends Command {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Component execute(CommandContext context, String[] args, String[] fullArgs) {
|
public Component execute(CommandContext context) throws CommandException {
|
||||||
final Bot bot = context.bot;
|
final Bot bot = context.bot;
|
||||||
|
|
||||||
bot.chat.send(String.join(" ", args));
|
bot.chat.send(context.getString(true, true));
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,7 +19,7 @@ public class EndCommand extends Command {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Component execute(CommandContext context, String[] args, String[] fullArgs) {
|
public Component execute(CommandContext context) {
|
||||||
final Bot bot = context.bot;
|
final Bot bot = context.bot;
|
||||||
|
|
||||||
bot.session.disconnect("End command");
|
bot.session.disconnect("End command");
|
||||||
|
|
|
@ -3,13 +3,13 @@ package land.chipmunk.chayapak.chomens_bot.commands;
|
||||||
import land.chipmunk.chayapak.chomens_bot.Bot;
|
import land.chipmunk.chayapak.chomens_bot.Bot;
|
||||||
import land.chipmunk.chayapak.chomens_bot.command.Command;
|
import land.chipmunk.chayapak.chomens_bot.command.Command;
|
||||||
import land.chipmunk.chayapak.chomens_bot.command.CommandContext;
|
import land.chipmunk.chayapak.chomens_bot.command.CommandContext;
|
||||||
|
import land.chipmunk.chayapak.chomens_bot.command.CommandException;
|
||||||
import land.chipmunk.chayapak.chomens_bot.command.TrustLevel;
|
import land.chipmunk.chayapak.chomens_bot.command.TrustLevel;
|
||||||
import land.chipmunk.chayapak.chomens_bot.data.EvalOutput;
|
import land.chipmunk.chayapak.chomens_bot.data.EvalOutput;
|
||||||
import land.chipmunk.chayapak.chomens_bot.util.ColorUtilities;
|
import land.chipmunk.chayapak.chomens_bot.util.ColorUtilities;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
import net.kyori.adventure.text.format.NamedTextColor;
|
import net.kyori.adventure.text.format.NamedTextColor;
|
||||||
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.concurrent.CompletableFuture;
|
import java.util.concurrent.CompletableFuture;
|
||||||
|
|
||||||
public class EvalCommand extends Command {
|
public class EvalCommand extends Command {
|
||||||
|
@ -17,7 +17,7 @@ public class EvalCommand extends Command {
|
||||||
super(
|
super(
|
||||||
"eval",
|
"eval",
|
||||||
"Evaluate JavaScript codes",
|
"Evaluate JavaScript codes",
|
||||||
new String[] { "run <{code}>", "reset" },
|
new String[] { "run <code>", "reset" },
|
||||||
new String[] {},
|
new String[] {},
|
||||||
TrustLevel.PUBLIC,
|
TrustLevel.PUBLIC,
|
||||||
false
|
false
|
||||||
|
@ -25,16 +25,16 @@ public class EvalCommand extends Command {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Component execute(CommandContext context, String[] args, String[] fullArgs) {
|
public Component execute(CommandContext context) throws CommandException {
|
||||||
if (args.length < 1) return Component.text("Not enough arguments").color(NamedTextColor.RED);
|
|
||||||
|
|
||||||
final Bot bot = context.bot;
|
final Bot bot = context.bot;
|
||||||
|
|
||||||
if (!bot.eval.connected) return Component.text("Eval server is not online").color(NamedTextColor.RED);
|
if (!bot.eval.connected) throw new CommandException(Component.text("Eval server is not online"));
|
||||||
|
|
||||||
switch (args[0]) {
|
final String action = context.getString(false, true);
|
||||||
|
|
||||||
|
switch (action) {
|
||||||
case "run" -> {
|
case "run" -> {
|
||||||
final String command = String.join(" ", Arrays.copyOfRange(args, 1, args.length));
|
final String command = context.getString(true, true);
|
||||||
|
|
||||||
final CompletableFuture<EvalOutput> future = bot.eval.run(command);
|
final CompletableFuture<EvalOutput> future = bot.eval.run(command);
|
||||||
|
|
||||||
|
@ -51,7 +51,7 @@ public class EvalCommand extends Command {
|
||||||
return Component.text("Reset the eval worker").color(ColorUtilities.getColorByString(bot.config.colorPalette.defaultColor));
|
return Component.text("Reset the eval worker").color(ColorUtilities.getColorByString(bot.config.colorPalette.defaultColor));
|
||||||
}
|
}
|
||||||
default -> {
|
default -> {
|
||||||
return Component.text("Invalid action").color(NamedTextColor.RED);
|
throw new CommandException(Component.text("Invalid action"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,7 @@ import com.google.gson.JsonElement;
|
||||||
import land.chipmunk.chayapak.chomens_bot.Bot;
|
import land.chipmunk.chayapak.chomens_bot.Bot;
|
||||||
import land.chipmunk.chayapak.chomens_bot.command.Command;
|
import land.chipmunk.chayapak.chomens_bot.command.Command;
|
||||||
import land.chipmunk.chayapak.chomens_bot.command.CommandContext;
|
import land.chipmunk.chayapak.chomens_bot.command.CommandContext;
|
||||||
|
import land.chipmunk.chayapak.chomens_bot.command.CommandException;
|
||||||
import land.chipmunk.chayapak.chomens_bot.command.TrustLevel;
|
import land.chipmunk.chayapak.chomens_bot.command.TrustLevel;
|
||||||
import land.chipmunk.chayapak.chomens_bot.data.FilteredPlayer;
|
import land.chipmunk.chayapak.chomens_bot.data.FilteredPlayer;
|
||||||
import land.chipmunk.chayapak.chomens_bot.plugins.FilterPlugin;
|
import land.chipmunk.chayapak.chomens_bot.plugins.FilterPlugin;
|
||||||
|
@ -14,7 +15,6 @@ import net.kyori.adventure.text.JoinConfiguration;
|
||||||
import net.kyori.adventure.text.format.NamedTextColor;
|
import net.kyori.adventure.text.format.NamedTextColor;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class FilterCommand extends Command {
|
public class FilterCommand extends Command {
|
||||||
|
@ -23,10 +23,10 @@ public class FilterCommand extends Command {
|
||||||
"filter",
|
"filter",
|
||||||
"Filter players",
|
"Filter players",
|
||||||
new String[] {
|
new String[] {
|
||||||
"<hash> add <{player}>",
|
"<hash> add <player>",
|
||||||
"<hash> -ignorecase add <{player}>",
|
"<hash> -ignorecase add <player>",
|
||||||
"<hash> -regex add <{player}>",
|
"<hash> -regex add <player>",
|
||||||
"<hash> -ignorecase -regex add <{player}>",
|
"<hash> -ignorecase -regex add <player>",
|
||||||
"<hash> remove <index>",
|
"<hash> remove <index>",
|
||||||
"<hash> clear",
|
"<hash> clear",
|
||||||
"<hash> list"
|
"<hash> list"
|
||||||
|
@ -38,36 +38,37 @@ public class FilterCommand extends Command {
|
||||||
}
|
}
|
||||||
|
|
||||||
// most of these codes are from cloop and greplog
|
// most of these codes are from cloop and greplog
|
||||||
public Component execute(CommandContext context, String[] _args, String[] fullArgs) {
|
@Override
|
||||||
|
public Component execute(CommandContext context) throws CommandException {
|
||||||
final Bot bot = context.bot;
|
final Bot bot = context.bot;
|
||||||
|
|
||||||
boolean ignoreCase = false;
|
boolean ignoreCase = false;
|
||||||
boolean regex = false;
|
boolean regex = false;
|
||||||
|
|
||||||
String[] args = _args;
|
String action = context.getString(false, true);
|
||||||
|
|
||||||
// this is a mess
|
// this is a mess
|
||||||
if (_args[0].equals("-ignorecase")) {
|
if (action.equals("-ignorecase")) {
|
||||||
ignoreCase = true;
|
ignoreCase = true;
|
||||||
args = Arrays.copyOfRange(_args, 1, _args.length);
|
action = context.getString(false, true);
|
||||||
} else if (_args[0].equals("-regex")) {
|
} else if (action.equals("-regex")) {
|
||||||
regex = true;
|
regex = true;
|
||||||
args = Arrays.copyOfRange(_args, 1, _args.length);
|
action = context.getString(false, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_args.length > 1 && _args[1].equals("-ignorecase")) {
|
if (action.equals("-ignorecase")) {
|
||||||
ignoreCase = true;
|
ignoreCase = true;
|
||||||
args = Arrays.copyOfRange(_args, 2, _args.length);
|
action = context.getString(false, true);
|
||||||
} else if (_args.length > 1 && _args[1].equals("-regex")) {
|
} else if (action.equals("-regex")) {
|
||||||
regex = true;
|
regex = true;
|
||||||
args = Arrays.copyOfRange(_args, 2, _args.length);
|
action = context.getString(false, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
final Gson gson = new Gson();
|
final Gson gson = new Gson();
|
||||||
|
|
||||||
switch (args[0]) {
|
switch (action) {
|
||||||
case "add" -> {
|
case "add" -> {
|
||||||
final String player = String.join(" ", Arrays.copyOfRange(args, 1, args.length));
|
final String player = context.getString(true, true);
|
||||||
|
|
||||||
bot.filter.add(player, regex, ignoreCase);
|
bot.filter.add(player, regex, ignoreCase);
|
||||||
return Component.translatable(
|
return Component.translatable(
|
||||||
|
@ -77,7 +78,7 @@ public class FilterCommand extends Command {
|
||||||
}
|
}
|
||||||
case "remove" -> {
|
case "remove" -> {
|
||||||
try {
|
try {
|
||||||
final int index = Integer.parseInt(args[1]);
|
final int index = context.getInteger(true);
|
||||||
|
|
||||||
final FilteredPlayer removed = bot.filter.remove(index);
|
final FilteredPlayer removed = bot.filter.remove(index);
|
||||||
|
|
||||||
|
@ -86,7 +87,7 @@ public class FilterCommand extends Command {
|
||||||
Component.text(removed.playerName).color(ColorUtilities.getColorByString(bot.config.colorPalette.username))
|
Component.text(removed.playerName).color(ColorUtilities.getColorByString(bot.config.colorPalette.username))
|
||||||
).color(ColorUtilities.getColorByString(bot.config.colorPalette.defaultColor));
|
).color(ColorUtilities.getColorByString(bot.config.colorPalette.defaultColor));
|
||||||
} catch (IndexOutOfBoundsException | IllegalArgumentException | NullPointerException ignored) {
|
} catch (IndexOutOfBoundsException | IllegalArgumentException | NullPointerException ignored) {
|
||||||
return Component.text("Invalid index").color(NamedTextColor.RED);
|
throw new CommandException(Component.text("Invalid index"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
case "clear" -> {
|
case "clear" -> {
|
||||||
|
@ -122,7 +123,7 @@ public class FilterCommand extends Command {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
default -> {
|
default -> {
|
||||||
return Component.text("Invalid action").color(NamedTextColor.RED);
|
throw new CommandException(Component.text("Invalid action"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,7 @@ package land.chipmunk.chayapak.chomens_bot.commands;
|
||||||
import land.chipmunk.chayapak.chomens_bot.Bot;
|
import land.chipmunk.chayapak.chomens_bot.Bot;
|
||||||
import land.chipmunk.chayapak.chomens_bot.command.Command;
|
import land.chipmunk.chayapak.chomens_bot.command.Command;
|
||||||
import land.chipmunk.chayapak.chomens_bot.command.CommandContext;
|
import land.chipmunk.chayapak.chomens_bot.command.CommandContext;
|
||||||
|
import land.chipmunk.chayapak.chomens_bot.command.CommandException;
|
||||||
import land.chipmunk.chayapak.chomens_bot.command.TrustLevel;
|
import land.chipmunk.chayapak.chomens_bot.command.TrustLevel;
|
||||||
import land.chipmunk.chayapak.chomens_bot.plugins.CommandHandlerPlugin;
|
import land.chipmunk.chayapak.chomens_bot.plugins.CommandHandlerPlugin;
|
||||||
import land.chipmunk.chayapak.chomens_bot.util.ColorUtilities;
|
import land.chipmunk.chayapak.chomens_bot.util.ColorUtilities;
|
||||||
|
@ -31,17 +32,19 @@ public class HelpCommand extends Command {
|
||||||
private CommandContext context;
|
private CommandContext context;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Component execute(CommandContext context, String[] args, String[] fullArgs) {
|
public Component execute(CommandContext context) throws CommandException {
|
||||||
this.context = context;
|
this.context = context;
|
||||||
|
|
||||||
if (args.length == 0) {
|
final String commandName = context.getString(true, false);
|
||||||
|
|
||||||
|
if (commandName.isEmpty()) {
|
||||||
return sendCommandList();
|
return sendCommandList();
|
||||||
} else {
|
} else {
|
||||||
return sendUsages(context, args);
|
return sendUsages(context, commandName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public Component sendCommandList () {
|
public Component sendCommandList () throws CommandException {
|
||||||
final List<Component> list = new ArrayList<>();
|
final List<Component> list = new ArrayList<>();
|
||||||
list.addAll(getCommandListByTrustLevel(TrustLevel.PUBLIC));
|
list.addAll(getCommandListByTrustLevel(TrustLevel.PUBLIC));
|
||||||
list.addAll(getCommandListByTrustLevel(TrustLevel.TRUSTED));
|
list.addAll(getCommandListByTrustLevel(TrustLevel.TRUSTED));
|
||||||
|
@ -60,7 +63,7 @@ public class HelpCommand extends Command {
|
||||||
.append(Component.join(JoinConfiguration.separator(Component.space()), list));
|
.append(Component.join(JoinConfiguration.separator(Component.space()), list));
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<Component> getCommandListByTrustLevel(TrustLevel trustLevel) {
|
public List<Component> getCommandListByTrustLevel(TrustLevel trustLevel) throws CommandException {
|
||||||
final List<Component> list = new ArrayList<>();
|
final List<Component> list = new ArrayList<>();
|
||||||
|
|
||||||
List<String> commandNames = new ArrayList<>();
|
List<String> commandNames = new ArrayList<>();
|
||||||
|
@ -80,7 +83,7 @@ public class HelpCommand extends Command {
|
||||||
.color(getColorByTrustLevel(trustLevel))
|
.color(getColorByTrustLevel(trustLevel))
|
||||||
.hoverEvent(
|
.hoverEvent(
|
||||||
HoverEvent.showText(
|
HoverEvent.showText(
|
||||||
sendUsages(context, new String[] { name })
|
sendUsages(context, name)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
@ -97,20 +100,20 @@ public class HelpCommand extends Command {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
public Component sendUsages (CommandContext context, String[] args) {
|
public Component sendUsages (CommandContext context, String commandName) throws CommandException {
|
||||||
final Bot bot = context.bot;
|
final Bot bot = context.bot;
|
||||||
|
|
||||||
final String prefix = context.prefix;
|
final String prefix = context.prefix;
|
||||||
|
|
||||||
for (Command command : CommandHandlerPlugin.commands) {
|
for (Command command : CommandHandlerPlugin.commands) {
|
||||||
if (!command.name.equals(args[0]) && !Arrays.stream(command.aliases).toList().contains(args[0])) continue;
|
if (!command.name.equals(commandName) && !Arrays.stream(command.aliases).toList().contains(commandName)) continue;
|
||||||
|
|
||||||
final String commandName = command.name;
|
final String actualCommandName = command.name;
|
||||||
final List<Component> usages = new ArrayList<>();
|
final List<Component> usages = new ArrayList<>();
|
||||||
|
|
||||||
usages.add(
|
usages.add(
|
||||||
Component.empty()
|
Component.empty()
|
||||||
.append(Component.text(prefix + commandName).color(ColorUtilities.getColorByString(bot.config.colorPalette.secondary)))
|
.append(Component.text(prefix + actualCommandName).color(ColorUtilities.getColorByString(bot.config.colorPalette.secondary)))
|
||||||
.append(Component.text(
|
.append(Component.text(
|
||||||
(command.aliases.length > 0 && !command.aliases[0].equals("")) ?
|
(command.aliases.length > 0 && !command.aliases[0].equals("")) ?
|
||||||
" (" + String.join(", ", command.aliases) + ")" :
|
" (" + String.join(", ", command.aliases) + ")" :
|
||||||
|
@ -128,7 +131,7 @@ public class HelpCommand extends Command {
|
||||||
for (String usage : command.usages) {
|
for (String usage : command.usages) {
|
||||||
usages.add(
|
usages.add(
|
||||||
Component.empty()
|
Component.empty()
|
||||||
.append(Component.text(prefix + commandName).color(ColorUtilities.getColorByString(bot.config.colorPalette.secondary)))
|
.append(Component.text(prefix + actualCommandName).color(ColorUtilities.getColorByString(bot.config.colorPalette.secondary)))
|
||||||
.append(Component.text(" "))
|
.append(Component.text(" "))
|
||||||
.append(Component.text(usage).color(ColorUtilities.getColorByString(bot.config.colorPalette.string)))
|
.append(Component.text(usage).color(ColorUtilities.getColorByString(bot.config.colorPalette.string)))
|
||||||
);
|
);
|
||||||
|
@ -137,6 +140,6 @@ public class HelpCommand extends Command {
|
||||||
return Component.join(JoinConfiguration.separator(Component.newline()), usages);
|
return Component.join(JoinConfiguration.separator(Component.newline()), usages);
|
||||||
}
|
}
|
||||||
|
|
||||||
return Component.text("Unknown command").color(NamedTextColor.RED);
|
throw new CommandException(Component.text("Unknown command"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,7 @@ package land.chipmunk.chayapak.chomens_bot.commands;
|
||||||
import land.chipmunk.chayapak.chomens_bot.Bot;
|
import land.chipmunk.chayapak.chomens_bot.Bot;
|
||||||
import land.chipmunk.chayapak.chomens_bot.command.Command;
|
import land.chipmunk.chayapak.chomens_bot.command.Command;
|
||||||
import land.chipmunk.chayapak.chomens_bot.command.CommandContext;
|
import land.chipmunk.chayapak.chomens_bot.command.CommandContext;
|
||||||
|
import land.chipmunk.chayapak.chomens_bot.command.CommandException;
|
||||||
import land.chipmunk.chayapak.chomens_bot.command.TrustLevel;
|
import land.chipmunk.chayapak.chomens_bot.command.TrustLevel;
|
||||||
import land.chipmunk.chayapak.chomens_bot.util.ColorUtilities;
|
import land.chipmunk.chayapak.chomens_bot.util.ColorUtilities;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
|
@ -43,10 +44,12 @@ public class InfoCommand extends Command {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Component execute(CommandContext context, String[] args, String[] fullArgs) {
|
public Component execute(CommandContext context) throws CommandException {
|
||||||
final Bot bot = context.bot;
|
final Bot bot = context.bot;
|
||||||
|
|
||||||
switch (args[0]) {
|
final String action = context.getString(false, true);
|
||||||
|
|
||||||
|
switch (action) {
|
||||||
case "creator" -> {
|
case "creator" -> {
|
||||||
return Component.empty()
|
return Component.empty()
|
||||||
.append(Component.text("ChomeNS Bot ").color(ColorUtilities.getColorByString(bot.config.colorPalette.primary)))
|
.append(Component.text("ChomeNS Bot ").color(ColorUtilities.getColorByString(bot.config.colorPalette.primary)))
|
||||||
|
@ -194,7 +197,7 @@ public class InfoCommand extends Command {
|
||||||
).color(ColorUtilities.getColorByString(bot.config.colorPalette.defaultColor));
|
).color(ColorUtilities.getColorByString(bot.config.colorPalette.defaultColor));
|
||||||
}
|
}
|
||||||
default -> {
|
default -> {
|
||||||
return Component.text("Invalid action").color(NamedTextColor.RED);
|
throw new CommandException(Component.text("Invalid action"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,7 @@ package land.chipmunk.chayapak.chomens_bot.commands;
|
||||||
import land.chipmunk.chayapak.chomens_bot.Bot;
|
import land.chipmunk.chayapak.chomens_bot.Bot;
|
||||||
import land.chipmunk.chayapak.chomens_bot.command.Command;
|
import land.chipmunk.chayapak.chomens_bot.command.Command;
|
||||||
import land.chipmunk.chayapak.chomens_bot.command.CommandContext;
|
import land.chipmunk.chayapak.chomens_bot.command.CommandContext;
|
||||||
|
import land.chipmunk.chayapak.chomens_bot.command.CommandException;
|
||||||
import land.chipmunk.chayapak.chomens_bot.command.TrustLevel;
|
import land.chipmunk.chayapak.chomens_bot.command.TrustLevel;
|
||||||
import land.chipmunk.chayapak.chomens_bot.data.chat.PlayerEntry;
|
import land.chipmunk.chayapak.chomens_bot.data.chat.PlayerEntry;
|
||||||
import land.chipmunk.chayapak.chomens_bot.util.ColorUtilities;
|
import land.chipmunk.chayapak.chomens_bot.util.ColorUtilities;
|
||||||
|
@ -16,7 +17,7 @@ public class KickCommand extends Command {
|
||||||
super(
|
super(
|
||||||
"kick",
|
"kick",
|
||||||
"Kicks a player",
|
"Kicks a player",
|
||||||
new String[] { "<hash> <{player}>" },
|
new String[] { "<hash> <player>" },
|
||||||
new String[] {},
|
new String[] {},
|
||||||
TrustLevel.TRUSTED,
|
TrustLevel.TRUSTED,
|
||||||
false
|
false
|
||||||
|
@ -24,12 +25,12 @@ public class KickCommand extends Command {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Component execute(CommandContext context, String[] args, String[] fullArgs) {
|
public Component execute(CommandContext context) throws CommandException {
|
||||||
final Bot bot = context.bot;
|
final Bot bot = context.bot;
|
||||||
|
|
||||||
final PlayerEntry entry = bot.players.getEntry(String.join(" ", args));
|
final PlayerEntry entry = bot.players.getEntry(context.getString(true, true));
|
||||||
|
|
||||||
if (entry == null) return Component.text("Invalid player name").color(NamedTextColor.RED);
|
if (entry == null) throw new CommandException(Component.text("Invalid player name"));
|
||||||
|
|
||||||
final String name = entry.profile.getName();
|
final String name = entry.profile.getName();
|
||||||
final UUID uuid = entry.profile.getId();
|
final UUID uuid = entry.profile.getId();
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
package land.chipmunk.chayapak.chomens_bot.commands;
|
package land.chipmunk.chayapak.chomens_bot.commands;
|
||||||
|
|
||||||
import land.chipmunk.chayapak.chomens_bot.Bot;
|
import land.chipmunk.chayapak.chomens_bot.Bot;
|
||||||
import land.chipmunk.chayapak.chomens_bot.command.TrustLevel;
|
|
||||||
import land.chipmunk.chayapak.chomens_bot.data.chat.PlayerEntry;
|
|
||||||
import land.chipmunk.chayapak.chomens_bot.command.Command;
|
import land.chipmunk.chayapak.chomens_bot.command.Command;
|
||||||
import land.chipmunk.chayapak.chomens_bot.command.CommandContext;
|
import land.chipmunk.chayapak.chomens_bot.command.CommandContext;
|
||||||
|
import land.chipmunk.chayapak.chomens_bot.command.TrustLevel;
|
||||||
|
import land.chipmunk.chayapak.chomens_bot.data.chat.PlayerEntry;
|
||||||
import land.chipmunk.chayapak.chomens_bot.util.ColorUtilities;
|
import land.chipmunk.chayapak.chomens_bot.util.ColorUtilities;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
import net.kyori.adventure.text.JoinConfiguration;
|
import net.kyori.adventure.text.JoinConfiguration;
|
||||||
|
@ -28,7 +28,7 @@ public class ListCommand extends Command {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Component execute(CommandContext context, String[] args, String[] fullArgs) {
|
public Component execute(CommandContext context) {
|
||||||
final Bot bot = context.bot;
|
final Bot bot = context.bot;
|
||||||
|
|
||||||
final List<PlayerEntry> list = bot.players.list;
|
final List<PlayerEntry> list = bot.players.list;
|
||||||
|
|
|
@ -7,6 +7,7 @@ import com.google.gson.JsonElement;
|
||||||
import land.chipmunk.chayapak.chomens_bot.Bot;
|
import land.chipmunk.chayapak.chomens_bot.Bot;
|
||||||
import land.chipmunk.chayapak.chomens_bot.command.Command;
|
import land.chipmunk.chayapak.chomens_bot.command.Command;
|
||||||
import land.chipmunk.chayapak.chomens_bot.command.CommandContext;
|
import land.chipmunk.chayapak.chomens_bot.command.CommandContext;
|
||||||
|
import land.chipmunk.chayapak.chomens_bot.command.CommandException;
|
||||||
import land.chipmunk.chayapak.chomens_bot.command.TrustLevel;
|
import land.chipmunk.chayapak.chomens_bot.command.TrustLevel;
|
||||||
import land.chipmunk.chayapak.chomens_bot.data.Mail;
|
import land.chipmunk.chayapak.chomens_bot.data.Mail;
|
||||||
import land.chipmunk.chayapak.chomens_bot.data.chat.PlayerEntry;
|
import land.chipmunk.chayapak.chomens_bot.data.chat.PlayerEntry;
|
||||||
|
@ -26,7 +27,6 @@ import org.joda.time.format.DateTimeFormatter;
|
||||||
|
|
||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.concurrent.CompletableFuture;
|
import java.util.concurrent.CompletableFuture;
|
||||||
|
|
||||||
|
@ -35,7 +35,7 @@ public class MailCommand extends Command {
|
||||||
super(
|
super(
|
||||||
"mail",
|
"mail",
|
||||||
"Sends a mail",
|
"Sends a mail",
|
||||||
new String[] { "send <player> <{message}>", "sendselecteditem <player>", "read" },
|
new String[] { "send <player> <message>", "sendselecteditem <player>", "read" },
|
||||||
new String[] {},
|
new String[] {},
|
||||||
TrustLevel.PUBLIC,
|
TrustLevel.PUBLIC,
|
||||||
false
|
false
|
||||||
|
@ -43,9 +43,7 @@ public class MailCommand extends Command {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Component execute(CommandContext context, String[] args, String[] fullArgs) {
|
public Component execute(CommandContext context) throws CommandException {
|
||||||
if (args.length < 1) return Component.text("Not enough arguments").color(NamedTextColor.RED);
|
|
||||||
|
|
||||||
final Bot bot = context.bot;
|
final Bot bot = context.bot;
|
||||||
|
|
||||||
final PlayerEntry sender = context.sender;
|
final PlayerEntry sender = context.sender;
|
||||||
|
@ -54,195 +52,191 @@ public class MailCommand extends Command {
|
||||||
|
|
||||||
// kinda messy ngl
|
// kinda messy ngl
|
||||||
|
|
||||||
bot.executorService.submit(() -> {
|
final String action = context.getString(false, true);
|
||||||
switch (args[0]) {
|
|
||||||
case "send" -> {
|
|
||||||
int senderMailsSentTotal = 0;
|
|
||||||
for (JsonElement mailElement : MailPlugin.mails) {
|
|
||||||
final Mail mail = gson.fromJson(mailElement, Mail.class);
|
|
||||||
|
|
||||||
if (mail.sentBy == null) continue;
|
switch (action) {
|
||||||
|
case "send" -> {
|
||||||
|
int senderMailsSentTotal = 0;
|
||||||
|
for (JsonElement mailElement : MailPlugin.mails) {
|
||||||
|
final Mail mail = gson.fromJson(mailElement, Mail.class);
|
||||||
|
|
||||||
if (!mail.sentBy.equals(sender.profile.getName())) continue;
|
if (mail.sentBy == null) continue;
|
||||||
senderMailsSentTotal++;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (senderMailsSentTotal > 256) {
|
if (!mail.sentBy.equals(sender.profile.getName())) continue;
|
||||||
context.sendOutput(Component.text("You are sending too many mails!").color(NamedTextColor.RED));
|
senderMailsSentTotal++;
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
bot.mail.send(
|
|
||||||
new Mail(
|
|
||||||
sender.profile.getName(),
|
|
||||||
args[1],
|
|
||||||
Instant.now().toEpochMilli(),
|
|
||||||
bot.host + ":" + bot.port,
|
|
||||||
String.join(" ", Arrays.copyOfRange(args, 2, args.length))
|
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
context.sendOutput(Component.text("Mail sent!").color(ColorUtilities.getColorByString(bot.config.colorPalette.defaultColor)));
|
|
||||||
}
|
}
|
||||||
case "sendselecteditem" -> {
|
|
||||||
int senderMailsSentTotal = 0;
|
|
||||||
for (JsonElement mailElement : MailPlugin.mails) {
|
|
||||||
final Mail mail = gson.fromJson(mailElement, Mail.class);
|
|
||||||
|
|
||||||
if (!mail.sentTo.equals(sender.profile.getName())) continue;
|
if (senderMailsSentTotal > 256) {
|
||||||
senderMailsSentTotal++;
|
throw new CommandException(Component.text("You are sending too many mails!"));
|
||||||
|
}
|
||||||
|
|
||||||
|
bot.mail.send(
|
||||||
|
new Mail(
|
||||||
|
sender.profile.getName(),
|
||||||
|
context.getString(true, true),
|
||||||
|
Instant.now().toEpochMilli(),
|
||||||
|
bot.host + ":" + bot.port,
|
||||||
|
context.getString(true, true)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
return Component.text("Mail sent!").color(ColorUtilities.getColorByString(bot.config.colorPalette.defaultColor));
|
||||||
|
}
|
||||||
|
case "sendselecteditem" -> {
|
||||||
|
int senderMailsSentTotal = 0;
|
||||||
|
for (JsonElement mailElement : MailPlugin.mails) {
|
||||||
|
final Mail mail = gson.fromJson(mailElement, Mail.class);
|
||||||
|
|
||||||
|
if (!mail.sentTo.equals(sender.profile.getName())) continue;
|
||||||
|
senderMailsSentTotal++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (senderMailsSentTotal > 256) {
|
||||||
|
throw new CommandException(Component.text("You are sending too many mails!"));
|
||||||
|
}
|
||||||
|
|
||||||
|
final CompletableFuture<CompoundTag> future = bot.core.runTracked(
|
||||||
|
"minecraft:data get entity " +
|
||||||
|
UUIDUtilities.selector(sender.profile.getId()) +
|
||||||
|
" SelectedItem.tag.message"
|
||||||
|
);
|
||||||
|
|
||||||
|
if (future == null) {
|
||||||
|
throw new CommandException(Component.text("There was an error while sending your mail"));
|
||||||
|
}
|
||||||
|
|
||||||
|
future.thenApply(tags -> {
|
||||||
|
if (!tags.contains("LastOutput") || !(tags.get("LastOutput") instanceof StringTag)) return tags;
|
||||||
|
|
||||||
|
final StringTag lastOutput = tags.get("LastOutput");
|
||||||
|
|
||||||
|
final Component output = GsonComponentSerializer.gson().deserialize(lastOutput.getValue());
|
||||||
|
|
||||||
|
final List<Component> children = output.children();
|
||||||
|
|
||||||
|
if (
|
||||||
|
children.size() > 0 &&
|
||||||
|
children.get(0).children().size() > 0 &&
|
||||||
|
((TranslatableComponent) children.get(0).children().get(0))
|
||||||
|
.key()
|
||||||
|
.equals("arguments.nbtpath.nothing_found")
|
||||||
|
) {
|
||||||
|
context.sendOutput(Component.text("Player has no `message` NBT tag in the selected item").color(NamedTextColor.RED));
|
||||||
|
return tags;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (senderMailsSentTotal > 256) {
|
final String value = ComponentUtilities.stringify(((TranslatableComponent) children.get(0)).args().get(1));
|
||||||
context.sendOutput(Component.text("You are sending too many mails!").color(NamedTextColor.RED));
|
|
||||||
|
|
||||||
return;
|
if (!value.startsWith("\"") && !value.endsWith("\"") && !value.startsWith("'") && !value.endsWith("'")) {
|
||||||
|
context.sendOutput(Component.text("`message` NBT is not a string").color(NamedTextColor.RED));
|
||||||
|
return tags;
|
||||||
}
|
}
|
||||||
|
|
||||||
final CompletableFuture<CompoundTag> future = bot.core.runTracked(
|
try {
|
||||||
"minecraft:data get entity " +
|
|
||||||
UUIDUtilities.selector(sender.profile.getId()) +
|
|
||||||
" SelectedItem.tag.message"
|
|
||||||
);
|
|
||||||
|
|
||||||
if (future == null) {
|
|
||||||
context.sendOutput(Component.text("There was an error while sending your mail").color(NamedTextColor.RED));
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
future.thenApply(tags -> {
|
|
||||||
if (!tags.contains("LastOutput") || !(tags.get("LastOutput") instanceof StringTag)) return tags;
|
|
||||||
|
|
||||||
final StringTag lastOutput = tags.get("LastOutput");
|
|
||||||
|
|
||||||
final Component output = GsonComponentSerializer.gson().deserialize(lastOutput.getValue());
|
|
||||||
|
|
||||||
final List<Component> children = output.children();
|
|
||||||
|
|
||||||
if (
|
|
||||||
children.size() > 0 &&
|
|
||||||
children.get(0).children().size() > 0 &&
|
|
||||||
((TranslatableComponent) children.get(0).children().get(0))
|
|
||||||
.key()
|
|
||||||
.equals("arguments.nbtpath.nothing_found")
|
|
||||||
) {
|
|
||||||
context.sendOutput(Component.text("Player has no `message` NBT tag in the selected item").color(NamedTextColor.RED));
|
|
||||||
return tags;
|
|
||||||
}
|
|
||||||
|
|
||||||
final String value = ComponentUtilities.stringify(((TranslatableComponent) children.get(0)).args().get(1));
|
|
||||||
|
|
||||||
if (!value.startsWith("\"") && !value.endsWith("\"") && !value.startsWith("'") && !value.endsWith("'")) {
|
|
||||||
context.sendOutput(Component.text("`message` NBT is not a string").color(NamedTextColor.RED));
|
|
||||||
return tags;
|
|
||||||
}
|
|
||||||
|
|
||||||
bot.mail.send(
|
bot.mail.send(
|
||||||
new Mail(
|
new Mail(
|
||||||
sender.profile.getName(),
|
sender.profile.getName(),
|
||||||
args[1],
|
context.getString(true, true),
|
||||||
Instant.now().toEpochMilli(),
|
Instant.now().toEpochMilli(),
|
||||||
bot.host + ":" + bot.port,
|
bot.host + ":" + bot.port,
|
||||||
value.substring(1).substring(0, value.length() - 2)
|
value.substring(1).substring(0, value.length() - 2)
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
} catch (CommandException e) {
|
||||||
context.sendOutput(
|
context.sendOutput(e.message.color(NamedTextColor.RED));
|
||||||
Component.text("Mail sent!").color(ColorUtilities.getColorByString(bot.config.colorPalette.defaultColor))
|
|
||||||
);
|
|
||||||
|
|
||||||
return tags;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
case "read" -> {
|
|
||||||
// TODO: use less for loops?
|
|
||||||
|
|
||||||
int senderMailSize = 0;
|
|
||||||
for (JsonElement mailElement : MailPlugin.mails) {
|
|
||||||
final Mail mail = gson.fromJson(mailElement, Mail.class);
|
|
||||||
|
|
||||||
if (!mail.sentTo.equals(sender.profile.getName())) continue;
|
|
||||||
senderMailSize++;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (senderMailSize == 0) {
|
context.sendOutput(
|
||||||
context.sendOutput(Component.text("You have no new mails").color(NamedTextColor.RED));
|
Component.text("Mail sent!").color(ColorUtilities.getColorByString(bot.config.colorPalette.defaultColor))
|
||||||
|
);
|
||||||
|
|
||||||
return;
|
return tags;
|
||||||
}
|
});
|
||||||
|
|
||||||
final List<Component> mailsComponent = new ArrayList<>();
|
|
||||||
|
|
||||||
int i = 1;
|
|
||||||
for (JsonElement mailElement : MailPlugin.mails) {
|
|
||||||
final Mail mail = gson.fromJson(mailElement, Mail.class);
|
|
||||||
|
|
||||||
if (!mail.sentTo.equals(sender.profile.getName())) continue;
|
|
||||||
|
|
||||||
final DateTimeFormatter formatter = DateTimeFormat.forPattern("MMMM d, YYYY, hh:mm:ss a Z");
|
|
||||||
final String formattedTime = formatter.print(mail.timeSent);
|
|
||||||
|
|
||||||
mailsComponent.add(
|
|
||||||
Component.translatable(
|
|
||||||
"""
|
|
||||||
%s %s Sent by: %s %s
|
|
||||||
Contents:
|
|
||||||
%s""",
|
|
||||||
Component.text(i).color(ColorUtilities.getColorByString(bot.config.colorPalette.number)),
|
|
||||||
Component.text("-").color(NamedTextColor.DARK_GRAY),
|
|
||||||
|
|
||||||
Component.text(mail.sentBy).color(ColorUtilities.getColorByString(bot.config.colorPalette.username)),
|
|
||||||
Component
|
|
||||||
.text("[Hover here for more info]")
|
|
||||||
.color(NamedTextColor.GREEN)
|
|
||||||
.hoverEvent(
|
|
||||||
HoverEvent.showText(
|
|
||||||
Component.translatable(
|
|
||||||
"""
|
|
||||||
Time sent: %s
|
|
||||||
Server: %s""",
|
|
||||||
Component.text(formattedTime).color(ColorUtilities.getColorByString(bot.config.colorPalette.string)),
|
|
||||||
Component.text(mail.server).color(ColorUtilities.getColorByString(bot.config.colorPalette.string))
|
|
||||||
).color(NamedTextColor.GREEN)
|
|
||||||
)
|
|
||||||
),
|
|
||||||
Component.text(mail.contents).color(NamedTextColor.WHITE)
|
|
||||||
).color(NamedTextColor.GREEN)
|
|
||||||
);
|
|
||||||
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
|
|
||||||
final Component component = Component.empty()
|
|
||||||
.append(Component.text("Mails ").color(NamedTextColor.GREEN))
|
|
||||||
.append(Component.text("(").color(NamedTextColor.DARK_GRAY))
|
|
||||||
.append(Component.text(senderMailSize).color(NamedTextColor.GRAY))
|
|
||||||
.append(Component.text(")").color(NamedTextColor.DARK_GRAY))
|
|
||||||
.append(Component.newline())
|
|
||||||
.append(Component.join(JoinConfiguration.newlines(), mailsComponent));
|
|
||||||
|
|
||||||
if (context.inGame) {
|
|
||||||
bot.chat.tellraw(
|
|
||||||
component,
|
|
||||||
context.sender.profile.getId()
|
|
||||||
);
|
|
||||||
} else {
|
|
||||||
context.sendOutput(component);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (JsonElement mailElement : MailPlugin.mails.deepCopy()) {
|
|
||||||
final Mail mail = gson.fromJson(mailElement, Mail.class);
|
|
||||||
|
|
||||||
if (mail.sentTo.equals(sender.profile.getName())) MailPlugin.mails.remove(mailElement);
|
|
||||||
}
|
|
||||||
|
|
||||||
PersistentDataUtilities.put("mails", MailPlugin.mails);
|
|
||||||
}
|
|
||||||
default -> context.sendOutput(Component.text("Invalid action").color(NamedTextColor.RED));
|
|
||||||
}
|
}
|
||||||
});
|
case "read" -> {
|
||||||
|
// TODO: use less for loops?
|
||||||
|
|
||||||
|
int senderMailSize = 0;
|
||||||
|
for (JsonElement mailElement : MailPlugin.mails) {
|
||||||
|
final Mail mail = gson.fromJson(mailElement, Mail.class);
|
||||||
|
|
||||||
|
if (!mail.sentTo.equals(sender.profile.getName())) continue;
|
||||||
|
senderMailSize++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (senderMailSize == 0) {
|
||||||
|
throw new CommandException(Component.text("You have no new mails"));
|
||||||
|
}
|
||||||
|
|
||||||
|
final List<Component> mailsComponent = new ArrayList<>();
|
||||||
|
|
||||||
|
int i = 1;
|
||||||
|
for (JsonElement mailElement : MailPlugin.mails) {
|
||||||
|
final Mail mail = gson.fromJson(mailElement, Mail.class);
|
||||||
|
|
||||||
|
if (!mail.sentTo.equals(sender.profile.getName())) continue;
|
||||||
|
|
||||||
|
final DateTimeFormatter formatter = DateTimeFormat.forPattern("MMMM d, YYYY, hh:mm:ss a Z");
|
||||||
|
final String formattedTime = formatter.print(mail.timeSent);
|
||||||
|
|
||||||
|
mailsComponent.add(
|
||||||
|
Component.translatable(
|
||||||
|
"""
|
||||||
|
%s %s Sent by: %s %s
|
||||||
|
Contents:
|
||||||
|
%s""",
|
||||||
|
Component.text(i).color(ColorUtilities.getColorByString(bot.config.colorPalette.number)),
|
||||||
|
Component.text("-").color(NamedTextColor.DARK_GRAY),
|
||||||
|
|
||||||
|
Component.text(mail.sentBy).color(ColorUtilities.getColorByString(bot.config.colorPalette.username)),
|
||||||
|
Component
|
||||||
|
.text("[Hover here for more info]")
|
||||||
|
.color(NamedTextColor.GREEN)
|
||||||
|
.hoverEvent(
|
||||||
|
HoverEvent.showText(
|
||||||
|
Component.translatable(
|
||||||
|
"""
|
||||||
|
Time sent: %s
|
||||||
|
Server: %s""",
|
||||||
|
Component.text(formattedTime).color(ColorUtilities.getColorByString(bot.config.colorPalette.string)),
|
||||||
|
Component.text(mail.server).color(ColorUtilities.getColorByString(bot.config.colorPalette.string))
|
||||||
|
).color(NamedTextColor.GREEN)
|
||||||
|
)
|
||||||
|
),
|
||||||
|
Component.text(mail.contents).color(NamedTextColor.WHITE)
|
||||||
|
).color(NamedTextColor.GREEN)
|
||||||
|
);
|
||||||
|
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
|
||||||
|
final Component component = Component.empty()
|
||||||
|
.append(Component.text("Mails ").color(NamedTextColor.GREEN))
|
||||||
|
.append(Component.text("(").color(NamedTextColor.DARK_GRAY))
|
||||||
|
.append(Component.text(senderMailSize).color(NamedTextColor.GRAY))
|
||||||
|
.append(Component.text(")").color(NamedTextColor.DARK_GRAY))
|
||||||
|
.append(Component.newline())
|
||||||
|
.append(Component.join(JoinConfiguration.newlines(), mailsComponent));
|
||||||
|
|
||||||
|
if (context.inGame) {
|
||||||
|
bot.chat.tellraw(
|
||||||
|
component,
|
||||||
|
context.sender.profile.getId()
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
context.sendOutput(component);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (JsonElement mailElement : MailPlugin.mails.deepCopy()) {
|
||||||
|
final Mail mail = gson.fromJson(mailElement, Mail.class);
|
||||||
|
|
||||||
|
if (mail.sentTo.equals(sender.profile.getName())) MailPlugin.mails.remove(mailElement);
|
||||||
|
}
|
||||||
|
|
||||||
|
PersistentDataUtilities.put("mails", MailPlugin.mails);
|
||||||
|
}
|
||||||
|
default -> context.sendOutput(Component.text("Invalid action").color(NamedTextColor.RED));
|
||||||
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,6 +4,7 @@ import land.chipmunk.chayapak.chomens_bot.Bot;
|
||||||
import land.chipmunk.chayapak.chomens_bot.Main;
|
import land.chipmunk.chayapak.chomens_bot.Main;
|
||||||
import land.chipmunk.chayapak.chomens_bot.command.Command;
|
import land.chipmunk.chayapak.chomens_bot.command.Command;
|
||||||
import land.chipmunk.chayapak.chomens_bot.command.CommandContext;
|
import land.chipmunk.chayapak.chomens_bot.command.CommandContext;
|
||||||
|
import land.chipmunk.chayapak.chomens_bot.command.CommandException;
|
||||||
import land.chipmunk.chayapak.chomens_bot.command.TrustLevel;
|
import land.chipmunk.chayapak.chomens_bot.command.TrustLevel;
|
||||||
import land.chipmunk.chayapak.chomens_bot.plugins.MusicPlayerPlugin;
|
import land.chipmunk.chayapak.chomens_bot.plugins.MusicPlayerPlugin;
|
||||||
import land.chipmunk.chayapak.chomens_bot.song.Instrument;
|
import land.chipmunk.chayapak.chomens_bot.song.Instrument;
|
||||||
|
@ -37,10 +38,10 @@ public class MusicCommand extends Command {
|
||||||
"music",
|
"music",
|
||||||
"Plays music",
|
"Plays music",
|
||||||
new String[] {
|
new String[] {
|
||||||
"play <{song|URL}>",
|
"play <song|URL>",
|
||||||
"stop",
|
"stop",
|
||||||
"loop <current|all|off>",
|
"loop <current|all|off>",
|
||||||
"list [{directory}]",
|
"list [directory]",
|
||||||
"skip",
|
"skip",
|
||||||
"nowplaying",
|
"nowplaying",
|
||||||
"queue",
|
"queue",
|
||||||
|
@ -61,26 +62,26 @@ public class MusicCommand extends Command {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Component execute(CommandContext context, String[] args, String[] fullArgs) {
|
public Component execute(CommandContext context) throws CommandException {
|
||||||
if (args.length < 1) return Component.text("Not enough arguments").color(NamedTextColor.RED);
|
|
||||||
|
|
||||||
ratelimit++;
|
ratelimit++;
|
||||||
|
|
||||||
if (ratelimit > 10) return null;
|
if (ratelimit > 10) return null;
|
||||||
|
|
||||||
|
final String action = context.getString(false, true);
|
||||||
|
|
||||||
root = MusicPlayerPlugin.SONG_DIR;
|
root = MusicPlayerPlugin.SONG_DIR;
|
||||||
return switch (args[0]) {
|
return switch (action) {
|
||||||
case "play", "playurl", "playnbs", "playnbsurl" -> play(context, args);
|
case "play", "playurl", "playnbs", "playnbsurl" -> play(context);
|
||||||
case "stop" -> stop(context);
|
case "stop" -> stop(context);
|
||||||
case "loop" -> loop(context, args);
|
case "loop" -> loop(context);
|
||||||
case "list" -> list(context, args);
|
case "list" -> list(context);
|
||||||
case "skip" -> skip(context);
|
case "skip" -> skip(context);
|
||||||
case "nowplaying" -> nowplaying(context);
|
case "nowplaying" -> nowplaying(context);
|
||||||
case "queue" -> queue(context);
|
case "queue" -> queue(context);
|
||||||
case "goto" -> goTo(context, args);
|
case "goto" -> goTo(context);
|
||||||
case "pitch" -> pitch(context, args);
|
case "pitch" -> pitch(context);
|
||||||
case "speed" -> speed(context, args);
|
case "speed" -> speed(context);
|
||||||
case "noteinstrument" -> noteInstrument(context, args);
|
case "noteinstrument" -> noteInstrument(context);
|
||||||
case "pause", "resume" -> pause(context);
|
case "pause", "resume" -> pause(context);
|
||||||
case "info" -> info(context);
|
case "info" -> info(context);
|
||||||
case "testsong" -> testSong(context);
|
case "testsong" -> testSong(context);
|
||||||
|
@ -88,22 +89,22 @@ public class MusicCommand extends Command {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
public Component play (CommandContext context, String[] args) {
|
public Component play (CommandContext context) throws CommandException {
|
||||||
final MusicPlayerPlugin player = context.bot.music;
|
final MusicPlayerPlugin player = context.bot.music;
|
||||||
|
|
||||||
String _path;
|
String _path;
|
||||||
Path path;
|
Path path;
|
||||||
try {
|
try {
|
||||||
_path = String.join(" ", Arrays.copyOfRange(args, 1, args.length));
|
_path = context.getString(true, true);
|
||||||
|
|
||||||
if (_path.isBlank()) return Component.text("No song specified").color(NamedTextColor.RED);
|
// if (_path.isBlank()) throw new CommandException(Component.text("No song specified"));
|
||||||
|
|
||||||
path = Path.of(root.toString(), _path);
|
path = Path.of(root.toString(), _path);
|
||||||
|
|
||||||
if (path.toString().contains("http")) player.loadSong(new URL(_path));
|
if (path.toString().contains("http")) player.loadSong(new URL(_path));
|
||||||
else {
|
else {
|
||||||
// among us protection!!!11
|
// among us protection!!!11
|
||||||
if (!path.normalize().startsWith(root.toString())) return Component.text("no").color(NamedTextColor.RED);
|
if (!path.normalize().startsWith(root.toString())) throw new CommandException(Component.text("no"));
|
||||||
|
|
||||||
// ignore my ohio code for autocomplete
|
// ignore my ohio code for autocomplete
|
||||||
final String separator = File.separator; // how do i do this with the new Files?
|
final String separator = File.separator; // how do i do this with the new Files?
|
||||||
|
@ -118,7 +119,7 @@ public class MusicCommand extends Command {
|
||||||
|
|
||||||
final String[] songs = realPath.toFile().list();
|
final String[] songs = realPath.toFile().list();
|
||||||
|
|
||||||
if (songs == null) return Component.text("Directory does not exist").color(NamedTextColor.RED);
|
if (songs == null) throw new CommandException(Component.text("Directory does not exist"));
|
||||||
|
|
||||||
final String lowerCaseFile = pathSplitted[pathSplitted.length - 1].toLowerCase();
|
final String lowerCaseFile = pathSplitted[pathSplitted.length - 1].toLowerCase();
|
||||||
|
|
||||||
|
@ -140,11 +141,11 @@ public class MusicCommand extends Command {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (MalformedURLException e) {
|
} catch (MalformedURLException e) {
|
||||||
return Component.text("Invalid URL").color(NamedTextColor.RED);
|
throw new CommandException(Component.text("Invalid URL"));
|
||||||
} catch (IndexOutOfBoundsException e) {
|
} catch (IndexOutOfBoundsException e) {
|
||||||
return Component.text("Song not found").color(NamedTextColor.RED);
|
throw new CommandException(Component.text("Song not found"));
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
return Component.text(e.toString()).color(NamedTextColor.RED);
|
throw new CommandException(Component.text(e.toString()));
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
|
@ -158,58 +159,50 @@ public class MusicCommand extends Command {
|
||||||
return Component.text("Cleared the song queue").color(ColorUtilities.getColorByString(bot.config.colorPalette.defaultColor));
|
return Component.text("Cleared the song queue").color(ColorUtilities.getColorByString(bot.config.colorPalette.defaultColor));
|
||||||
}
|
}
|
||||||
|
|
||||||
public Component loop (CommandContext context, String[] args) {
|
public Component loop (CommandContext context) throws CommandException {
|
||||||
final Bot bot = context.bot;
|
final Bot bot = context.bot;
|
||||||
|
|
||||||
if (args.length < 2) return Component.text("Invalid loop").color(NamedTextColor.RED);
|
final Loop loop = context.getEnum(Loop.class);
|
||||||
|
|
||||||
Loop loop;
|
|
||||||
switch (args[1]) {
|
|
||||||
case "off" -> {
|
|
||||||
loop = Loop.OFF;
|
|
||||||
context.sendOutput(
|
|
||||||
Component.empty()
|
|
||||||
.append(Component.text("Looping is now "))
|
|
||||||
.append(Component.text("disabled").color(NamedTextColor.RED))
|
|
||||||
.color(ColorUtilities.getColorByString(bot.config.colorPalette.defaultColor))
|
|
||||||
);
|
|
||||||
}
|
|
||||||
case "current" -> {
|
|
||||||
loop = Loop.CURRENT;
|
|
||||||
context.sendOutput(
|
|
||||||
Component.empty()
|
|
||||||
.append(Component.text("Now looping "))
|
|
||||||
.append(Component.text(bot.music.currentSong.name).color(ColorUtilities.getColorByString(bot.config.colorPalette.secondary)))
|
|
||||||
.color(ColorUtilities.getColorByString(bot.config.colorPalette.defaultColor))
|
|
||||||
);
|
|
||||||
}
|
|
||||||
case "all" -> {
|
|
||||||
loop = Loop.ALL;
|
|
||||||
context.sendOutput(Component.text("Now looping every song").color(ColorUtilities.getColorByString(bot.config.colorPalette.defaultColor)));
|
|
||||||
}
|
|
||||||
default -> {
|
|
||||||
return Component.text("Invalid action").color(NamedTextColor.RED);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
bot.music.loop = loop;
|
bot.music.loop = loop;
|
||||||
|
|
||||||
return null;
|
switch (loop) {
|
||||||
|
case OFF -> {
|
||||||
|
return Component.empty()
|
||||||
|
.append(Component.text("Looping is now "))
|
||||||
|
.append(Component.text("disabled").color(NamedTextColor.RED))
|
||||||
|
.color(ColorUtilities.getColorByString(bot.config.colorPalette.defaultColor));
|
||||||
|
}
|
||||||
|
case CURRENT -> {
|
||||||
|
return Component.empty()
|
||||||
|
.append(Component.text("Now looping "))
|
||||||
|
.append(Component.text(bot.music.currentSong.name).color(ColorUtilities.getColorByString(bot.config.colorPalette.secondary)))
|
||||||
|
.color(ColorUtilities.getColorByString(bot.config.colorPalette.defaultColor));
|
||||||
|
}
|
||||||
|
case ALL -> {
|
||||||
|
return Component.text("Now looping every song").color(ColorUtilities.getColorByString(bot.config.colorPalette.defaultColor));
|
||||||
|
}
|
||||||
|
default -> {
|
||||||
|
throw new CommandException(Component.text("Invalid action"));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public Component list (CommandContext context, String[] args) {
|
public Component list (CommandContext context) throws CommandException {
|
||||||
final Bot bot = context.bot;
|
final Bot bot = context.bot;
|
||||||
|
|
||||||
final String prefix = context.prefix;
|
final String prefix = context.prefix;
|
||||||
|
|
||||||
final Path path = (args.length < 2) ?
|
final String stringPathIfExists = context.getString(true, false);
|
||||||
|
|
||||||
|
final Path path = (stringPathIfExists.isEmpty()) ?
|
||||||
root :
|
root :
|
||||||
Path.of(
|
Path.of(
|
||||||
root.toString(),
|
root.toString(),
|
||||||
String.join(" ", Arrays.copyOfRange(args, 1, args.length))
|
stringPathIfExists
|
||||||
);
|
);
|
||||||
|
|
||||||
if (!path.normalize().startsWith(root.toString())) return Component.text("no").color(NamedTextColor.RED);
|
if (!path.normalize().startsWith(root.toString())) throw new CommandException(Component.text("no"));
|
||||||
|
|
||||||
try (DirectoryStream<Path> stream = Files.newDirectoryStream(path)) {
|
try (DirectoryStream<Path> stream = Files.newDirectoryStream(path)) {
|
||||||
final List<Path> paths = new ArrayList<>();
|
final List<Path> paths = new ArrayList<>();
|
||||||
|
@ -238,7 +231,7 @@ public class MusicCommand extends Command {
|
||||||
location = Paths.get(""); // wtf mabe
|
location = Paths.get(""); // wtf mabe
|
||||||
}
|
}
|
||||||
|
|
||||||
final String joinedPath = (args.length < 2) ? eachPath.getFileName().toString() : Paths.get(location.getFileName().toString(), eachPath.getFileName().toString()).toString();
|
final String joinedPath = stringPathIfExists.isEmpty() ? eachPath.getFileName().toString() : Paths.get(location.getFileName().toString(), eachPath.getFileName().toString()).toString();
|
||||||
|
|
||||||
fullList.add(
|
fullList.add(
|
||||||
Component
|
Component
|
||||||
|
@ -269,7 +262,7 @@ public class MusicCommand extends Command {
|
||||||
list.clear();
|
list.clear();
|
||||||
}
|
}
|
||||||
} catch (NoSuchFileException e) {
|
} catch (NoSuchFileException e) {
|
||||||
return Component.text("Directory doesn't exist").color(NamedTextColor.RED);
|
throw new CommandException(Component.text("Directory doesn't exist"));
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
@ -277,10 +270,10 @@ public class MusicCommand extends Command {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Component skip (CommandContext context) {
|
public Component skip (CommandContext context) throws CommandException {
|
||||||
final Bot bot = context.bot;
|
final Bot bot = context.bot;
|
||||||
final MusicPlayerPlugin music = bot.music;
|
final MusicPlayerPlugin music = bot.music;
|
||||||
if (music.currentSong == null) return Component.text("No song is currently playing").color(NamedTextColor.RED);
|
if (music.currentSong == null) throw new CommandException(Component.text("No song is currently playing"));
|
||||||
|
|
||||||
context.sendOutput(
|
context.sendOutput(
|
||||||
Component.empty()
|
Component.empty()
|
||||||
|
@ -294,10 +287,10 @@ public class MusicCommand extends Command {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Component nowplaying (CommandContext context) {
|
public Component nowplaying (CommandContext context) throws CommandException {
|
||||||
final Bot bot = context.bot;
|
final Bot bot = context.bot;
|
||||||
final Song song = bot.music.currentSong;
|
final Song song = bot.music.currentSong;
|
||||||
if (song == null) return Component.text("No song is currently playing").color(NamedTextColor.RED);
|
if (song == null) throw new CommandException(Component.text("No song is currently playing"));
|
||||||
|
|
||||||
return Component.empty()
|
return Component.empty()
|
||||||
.append(Component.text("Now playing "))
|
.append(Component.text("Now playing "))
|
||||||
|
@ -323,17 +316,17 @@ public class MusicCommand extends Command {
|
||||||
}
|
}
|
||||||
|
|
||||||
// lazy fix for java using "goto" as keyword real
|
// lazy fix for java using "goto" as keyword real
|
||||||
public Component goTo (CommandContext context, String[] args) {
|
public Component goTo (CommandContext context) throws CommandException {
|
||||||
final Bot bot = context.bot;
|
final Bot bot = context.bot;
|
||||||
final Song currentSong = bot.music.currentSong;
|
final Song currentSong = bot.music.currentSong;
|
||||||
|
|
||||||
final String input = String.join(" ", Arrays.copyOfRange(args, 1, args.length));
|
final String input = context.getString(true, true);
|
||||||
|
|
||||||
final long timestamp = TimestampUtilities.parseTimestamp(input);
|
final long timestamp = TimestampUtilities.parseTimestamp(input);
|
||||||
|
|
||||||
if (currentSong == null) return Component.text("No song is currently playing").color(NamedTextColor.RED);
|
if (currentSong == null) throw new CommandException(Component.text("No song is currently playing"));
|
||||||
|
|
||||||
if (timestamp < 0 || timestamp > currentSong.length) return Component.text("Invalid timestamp").color(NamedTextColor.RED);
|
if (timestamp < 0 || timestamp > currentSong.length) throw new CommandException(Component.text("Invalid timestamp"));
|
||||||
|
|
||||||
currentSong.setTime(timestamp);
|
currentSong.setTime(timestamp);
|
||||||
|
|
||||||
|
@ -343,15 +336,10 @@ public class MusicCommand extends Command {
|
||||||
.color(ColorUtilities.getColorByString(bot.config.colorPalette.defaultColor));
|
.color(ColorUtilities.getColorByString(bot.config.colorPalette.defaultColor));
|
||||||
}
|
}
|
||||||
|
|
||||||
public Component pitch (CommandContext context, String[] args) {
|
public Component pitch (CommandContext context) throws CommandException {
|
||||||
final Bot bot = context.bot;
|
final Bot bot = context.bot;
|
||||||
|
|
||||||
float pitch;
|
final float pitch = context.getFloat(true);
|
||||||
try {
|
|
||||||
pitch = Float.parseFloat(args[1]);
|
|
||||||
} catch (IllegalArgumentException ignored) {
|
|
||||||
return Component.text("Invalid pitch").color(NamedTextColor.RED);
|
|
||||||
}
|
|
||||||
|
|
||||||
bot.music.pitch = pitch;
|
bot.music.pitch = pitch;
|
||||||
|
|
||||||
|
@ -361,18 +349,13 @@ public class MusicCommand extends Command {
|
||||||
.color(ColorUtilities.getColorByString(bot.config.colorPalette.defaultColor));
|
.color(ColorUtilities.getColorByString(bot.config.colorPalette.defaultColor));
|
||||||
}
|
}
|
||||||
|
|
||||||
public Component speed (CommandContext context, String[] args) {
|
public Component speed (CommandContext context) throws CommandException {
|
||||||
final Bot bot = context.bot;
|
final Bot bot = context.bot;
|
||||||
final Song currentSong = bot.music.currentSong;
|
final Song currentSong = bot.music.currentSong;
|
||||||
|
|
||||||
float speed;
|
final float speed = context.getFloat(true);
|
||||||
try {
|
|
||||||
speed = Float.parseFloat(args[1]);
|
|
||||||
} catch (IllegalArgumentException ignored) {
|
|
||||||
return Component.text("Invalid speed").color(NamedTextColor.RED);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (speed > 5) return Component.text("Too fast").color(NamedTextColor.RED);
|
if (speed > 5) throw new CommandException(Component.text("Too fast!"));
|
||||||
|
|
||||||
long oldTime = -1;
|
long oldTime = -1;
|
||||||
|
|
||||||
|
@ -388,10 +371,10 @@ public class MusicCommand extends Command {
|
||||||
.color(ColorUtilities.getColorByString(bot.config.colorPalette.defaultColor));
|
.color(ColorUtilities.getColorByString(bot.config.colorPalette.defaultColor));
|
||||||
}
|
}
|
||||||
|
|
||||||
public Component noteInstrument (CommandContext context, String[] args) {
|
public Component noteInstrument (CommandContext context) throws CommandException {
|
||||||
final Bot bot = context.bot;
|
final Bot bot = context.bot;
|
||||||
|
|
||||||
final String instrument = args[1];
|
final String instrument = context.getString(true, true);
|
||||||
|
|
||||||
bot.music.instrument = instrument;
|
bot.music.instrument = instrument;
|
||||||
|
|
||||||
|
@ -405,11 +388,11 @@ public class MusicCommand extends Command {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public Component pause (CommandContext context) {
|
public Component pause (CommandContext context) throws CommandException {
|
||||||
final Bot bot = context.bot;
|
final Bot bot = context.bot;
|
||||||
final Song currentSong = bot.music.currentSong;
|
final Song currentSong = bot.music.currentSong;
|
||||||
|
|
||||||
if (currentSong == null) return Component.text("No song is currently playing").color(NamedTextColor.RED);
|
if (currentSong == null) throw new CommandException(Component.text("No song is currently playing"));
|
||||||
|
|
||||||
if (currentSong.paused) {
|
if (currentSong.paused) {
|
||||||
currentSong.play();
|
currentSong.play();
|
||||||
|
@ -420,11 +403,11 @@ public class MusicCommand extends Command {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public Component info (CommandContext context) {
|
public Component info (CommandContext context) throws CommandException {
|
||||||
final Bot bot = context.bot;
|
final Bot bot = context.bot;
|
||||||
final Song currentSong = bot.music.currentSong;
|
final Song currentSong = bot.music.currentSong;
|
||||||
|
|
||||||
if (currentSong == null) return Component.text("No song is currently playing").color(NamedTextColor.RED);
|
if (currentSong == null) throw new CommandException(Component.text("No song is currently playing"));
|
||||||
|
|
||||||
// ig very code yup
|
// ig very code yup
|
||||||
final String title = currentSong.originalName;
|
final String title = currentSong.originalName;
|
||||||
|
|
|
@ -3,6 +3,7 @@ package land.chipmunk.chayapak.chomens_bot.commands;
|
||||||
import land.chipmunk.chayapak.chomens_bot.Bot;
|
import land.chipmunk.chayapak.chomens_bot.Bot;
|
||||||
import land.chipmunk.chayapak.chomens_bot.command.Command;
|
import land.chipmunk.chayapak.chomens_bot.command.Command;
|
||||||
import land.chipmunk.chayapak.chomens_bot.command.CommandContext;
|
import land.chipmunk.chayapak.chomens_bot.command.CommandContext;
|
||||||
|
import land.chipmunk.chayapak.chomens_bot.command.CommandException;
|
||||||
import land.chipmunk.chayapak.chomens_bot.command.TrustLevel;
|
import land.chipmunk.chayapak.chomens_bot.command.TrustLevel;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
import net.kyori.adventure.text.event.ClickEvent;
|
import net.kyori.adventure.text.event.ClickEvent;
|
||||||
|
@ -16,7 +17,7 @@ public class NetMessageCommand extends Command {
|
||||||
super(
|
super(
|
||||||
"netmsg",
|
"netmsg",
|
||||||
"Broadcasts a message to all of the servers that the bot is connected",
|
"Broadcasts a message to all of the servers that the bot is connected",
|
||||||
new String[] { "<{message}>" },
|
new String[] { "<message>" },
|
||||||
new String[] { "networkmessage", "irc" },
|
new String[] { "networkmessage", "irc" },
|
||||||
TrustLevel.PUBLIC,
|
TrustLevel.PUBLIC,
|
||||||
false
|
false
|
||||||
|
@ -24,7 +25,7 @@ public class NetMessageCommand extends Command {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Component execute(CommandContext context, String[] args, String[] fullArgs) {
|
public Component execute(CommandContext context) throws CommandException {
|
||||||
final Bot bot = context.bot;
|
final Bot bot = context.bot;
|
||||||
final List<Bot> bots = bot.bots;
|
final List<Bot> bots = bot.bots;
|
||||||
|
|
||||||
|
@ -47,7 +48,7 @@ public class NetMessageCommand extends Command {
|
||||||
Component.text(" "),
|
Component.text(" "),
|
||||||
context.sender.displayName == null ? Component.text(context.sender.profile.getName()).color(NamedTextColor.GRAY) : context.sender.displayName.color(NamedTextColor.GRAY),
|
context.sender.displayName == null ? Component.text(context.sender.profile.getName()).color(NamedTextColor.GRAY) : context.sender.displayName.color(NamedTextColor.GRAY),
|
||||||
Component.text(" "),
|
Component.text(" "),
|
||||||
Component.text(String.join(" ", args)).color(NamedTextColor.GRAY)
|
Component.text(context.getString(true, true)).color(NamedTextColor.GRAY)
|
||||||
).color(NamedTextColor.DARK_GRAY);
|
).color(NamedTextColor.DARK_GRAY);
|
||||||
|
|
||||||
for (Bot eachBot : bots) {
|
for (Bot eachBot : bots) {
|
||||||
|
|
|
@ -3,6 +3,7 @@ package land.chipmunk.chayapak.chomens_bot.commands;
|
||||||
import land.chipmunk.chayapak.chomens_bot.Bot;
|
import land.chipmunk.chayapak.chomens_bot.Bot;
|
||||||
import land.chipmunk.chayapak.chomens_bot.command.Command;
|
import land.chipmunk.chayapak.chomens_bot.command.Command;
|
||||||
import land.chipmunk.chayapak.chomens_bot.command.CommandContext;
|
import land.chipmunk.chayapak.chomens_bot.command.CommandContext;
|
||||||
|
import land.chipmunk.chayapak.chomens_bot.command.CommandException;
|
||||||
import land.chipmunk.chayapak.chomens_bot.command.TrustLevel;
|
import land.chipmunk.chayapak.chomens_bot.command.TrustLevel;
|
||||||
import land.chipmunk.chayapak.chomens_bot.data.chat.PlayerEntry;
|
import land.chipmunk.chayapak.chomens_bot.data.chat.PlayerEntry;
|
||||||
import land.chipmunk.chayapak.chomens_bot.util.ColorUtilities;
|
import land.chipmunk.chayapak.chomens_bot.util.ColorUtilities;
|
||||||
|
@ -14,7 +15,7 @@ public class PCrashCommand extends Command {
|
||||||
super(
|
super(
|
||||||
"pcrash",
|
"pcrash",
|
||||||
"Crashes a player using particle",
|
"Crashes a player using particle",
|
||||||
new String[] { "<hash> <{player}>" },
|
new String[] { "<hash> <player>" },
|
||||||
new String[] { "particlecrash" },
|
new String[] { "particlecrash" },
|
||||||
TrustLevel.TRUSTED,
|
TrustLevel.TRUSTED,
|
||||||
false
|
false
|
||||||
|
@ -22,14 +23,12 @@ public class PCrashCommand extends Command {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Component execute(CommandContext context, String[] args, String[] fullArgs) {
|
public Component execute(CommandContext context) throws CommandException {
|
||||||
if (args.length == 0) return Component.text("Not enough arguments").color(NamedTextColor.RED);
|
|
||||||
|
|
||||||
final Bot bot = context.bot;
|
final Bot bot = context.bot;
|
||||||
|
|
||||||
final PlayerEntry player = bot.players.getEntry(args[0]);
|
final PlayerEntry player = bot.players.getEntry(context.getString(true, true));
|
||||||
|
|
||||||
if (player == null) return Component.text("Invalid player name").color(NamedTextColor.RED);
|
if (player == null) throw new CommandException(Component.text("Invalid player name"));
|
||||||
|
|
||||||
bot.exploits.pcrash(player.profile.getId());
|
bot.exploits.pcrash(player.profile.getId());
|
||||||
|
|
||||||
|
|
|
@ -3,6 +3,7 @@ package land.chipmunk.chayapak.chomens_bot.commands;
|
||||||
import land.chipmunk.chayapak.chomens_bot.Bot;
|
import land.chipmunk.chayapak.chomens_bot.Bot;
|
||||||
import land.chipmunk.chayapak.chomens_bot.command.Command;
|
import land.chipmunk.chayapak.chomens_bot.command.Command;
|
||||||
import land.chipmunk.chayapak.chomens_bot.command.CommandContext;
|
import land.chipmunk.chayapak.chomens_bot.command.CommandContext;
|
||||||
|
import land.chipmunk.chayapak.chomens_bot.command.CommandException;
|
||||||
import land.chipmunk.chayapak.chomens_bot.command.TrustLevel;
|
import land.chipmunk.chayapak.chomens_bot.command.TrustLevel;
|
||||||
import land.chipmunk.chayapak.chomens_bot.data.chat.PlayerEntry;
|
import land.chipmunk.chayapak.chomens_bot.data.chat.PlayerEntry;
|
||||||
import land.chipmunk.chayapak.chomens_bot.util.ColorUtilities;
|
import land.chipmunk.chayapak.chomens_bot.util.ColorUtilities;
|
||||||
|
@ -23,14 +24,14 @@ public class RandomTeleportCommand extends Command {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Component execute(CommandContext context, String[] args, String[] fullArgs) {
|
public Component execute(CommandContext context) throws CommandException {
|
||||||
final Bot bot = context.bot;
|
final Bot bot = context.bot;
|
||||||
|
|
||||||
final PlayerEntry sender = context.sender;
|
final PlayerEntry sender = context.sender;
|
||||||
|
|
||||||
final int positionX = MathUtilities.between(-1_000_000, 1_000_000);
|
final int positionX = MathUtilities.between(-1_000_000, 1_000_000);
|
||||||
final int positionZ = MathUtilities.between(-1_000_000, 1_000_000);
|
final int positionZ = MathUtilities.between(-1_000_000, 1_000_000);
|
||||||
final String stringPosition = positionX + " 100 " + positionZ; // is harding the y to 100 a great idea?
|
final String stringPosition = positionX + " 100 " + positionZ; // is hardcoding the y to 100 a great idea?
|
||||||
|
|
||||||
bot.core.run("essentials:teleport " + sender.profile.getIdAsString() + " " + stringPosition);
|
bot.core.run("essentials:teleport " + sender.profile.getIdAsString() + " " + stringPosition);
|
||||||
|
|
||||||
|
|
|
@ -19,7 +19,7 @@ public class RefillCoreCommand extends Command {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Component execute(CommandContext context, String[] args, String[] fullArgs) {
|
public Component execute(CommandContext context) {
|
||||||
final Bot bot = context.bot;
|
final Bot bot = context.bot;
|
||||||
|
|
||||||
bot.core.reset();
|
bot.core.reset();
|
||||||
|
|
|
@ -18,7 +18,7 @@ public class ScreenshareCommand { // extends Command {
|
||||||
// }
|
// }
|
||||||
|
|
||||||
// @Override
|
// @Override
|
||||||
// public Component execute(CommandContext context, String[] args, String[] fullArgs) {
|
// public Component execute(CommandContext context) throws CommandException {
|
||||||
// final Bot bot = context.bot;
|
// final Bot bot = context.bot;
|
||||||
//
|
//
|
||||||
// try {
|
// try {
|
||||||
|
@ -66,11 +66,11 @@ public class ScreenshareCommand { // extends Command {
|
||||||
// .color(ColorUtilities.getColorByString(bot.config.colorPalette.defaultColor));
|
// .color(ColorUtilities.getColorByString(bot.config.colorPalette.defaultColor));
|
||||||
// }
|
// }
|
||||||
// default -> {
|
// default -> {
|
||||||
// return Component.text("Invalid action").color(NamedTextColor.RED);
|
// throw new CommandException(Component.text("Invalid action"));
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
// } catch (NumberFormatException e) {
|
// } catch (NumberFormatException e) {
|
||||||
// return Component.text("Invalid integer").color(NamedTextColor.RED);
|
// throw new CommandException(Component.text("Invalid integer"));
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,7 @@ package land.chipmunk.chayapak.chomens_bot.commands;
|
||||||
import land.chipmunk.chayapak.chomens_bot.Bot;
|
import land.chipmunk.chayapak.chomens_bot.Bot;
|
||||||
import land.chipmunk.chayapak.chomens_bot.command.Command;
|
import land.chipmunk.chayapak.chomens_bot.command.Command;
|
||||||
import land.chipmunk.chayapak.chomens_bot.command.CommandContext;
|
import land.chipmunk.chayapak.chomens_bot.command.CommandContext;
|
||||||
|
import land.chipmunk.chayapak.chomens_bot.command.CommandException;
|
||||||
import land.chipmunk.chayapak.chomens_bot.command.TrustLevel;
|
import land.chipmunk.chayapak.chomens_bot.command.TrustLevel;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
import net.kyori.adventure.text.format.NamedTextColor;
|
import net.kyori.adventure.text.format.NamedTextColor;
|
||||||
|
@ -16,7 +17,7 @@ public class ServerEvalCommand extends Command {
|
||||||
super(
|
super(
|
||||||
"servereval",
|
"servereval",
|
||||||
"Evaluate codes using LuaJ",
|
"Evaluate codes using LuaJ",
|
||||||
new String[] { "<ownerHash> <{code}>" },
|
new String[] { "<ownerHash> <code>" },
|
||||||
new String[] {},
|
new String[] {},
|
||||||
TrustLevel.OWNER,
|
TrustLevel.OWNER,
|
||||||
false
|
false
|
||||||
|
@ -24,7 +25,7 @@ public class ServerEvalCommand extends Command {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Component execute(CommandContext context, String[] args, String[] fullArgs) {
|
public Component execute(CommandContext context) throws CommandException {
|
||||||
try {
|
try {
|
||||||
final Bot bot = context.bot;
|
final Bot bot = context.bot;
|
||||||
|
|
||||||
|
@ -34,13 +35,13 @@ public class ServerEvalCommand extends Command {
|
||||||
globals.set("class", CoerceJavaToLua.coerce(Class.class));
|
globals.set("class", CoerceJavaToLua.coerce(Class.class));
|
||||||
globals.set("context", CoerceJavaToLua.coerce(context));
|
globals.set("context", CoerceJavaToLua.coerce(context));
|
||||||
|
|
||||||
LuaValue chunk = globals.load(String.join(" ", args));
|
LuaValue chunk = globals.load(context.getString(true, true));
|
||||||
|
|
||||||
final LuaValue output = chunk.call();
|
final LuaValue output = chunk.call();
|
||||||
|
|
||||||
return Component.text(output.toString()).color(NamedTextColor.GREEN);
|
return Component.text(output.toString()).color(NamedTextColor.GREEN);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
return Component.text(e.toString()).color(NamedTextColor.RED);
|
throw new CommandException(Component.text(e.toString()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,7 @@ package land.chipmunk.chayapak.chomens_bot.commands;
|
||||||
import land.chipmunk.chayapak.chomens_bot.Bot;
|
import land.chipmunk.chayapak.chomens_bot.Bot;
|
||||||
import land.chipmunk.chayapak.chomens_bot.command.Command;
|
import land.chipmunk.chayapak.chomens_bot.command.Command;
|
||||||
import land.chipmunk.chayapak.chomens_bot.command.CommandContext;
|
import land.chipmunk.chayapak.chomens_bot.command.CommandContext;
|
||||||
|
import land.chipmunk.chayapak.chomens_bot.command.CommandException;
|
||||||
import land.chipmunk.chayapak.chomens_bot.command.TrustLevel;
|
import land.chipmunk.chayapak.chomens_bot.command.TrustLevel;
|
||||||
import land.chipmunk.chayapak.chomens_bot.util.ColorUtilities;
|
import land.chipmunk.chayapak.chomens_bot.util.ColorUtilities;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
|
@ -21,10 +22,12 @@ public class TPSBarCommand extends Command {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Component execute(CommandContext context, String[] args, String[] fullArgs) {
|
public Component execute(CommandContext context) throws CommandException {
|
||||||
final Bot bot = context.bot;
|
final Bot bot = context.bot;
|
||||||
|
|
||||||
switch (args[0]) {
|
final String action = context.getString(false, true);
|
||||||
|
|
||||||
|
switch (action) {
|
||||||
case "on" -> {
|
case "on" -> {
|
||||||
bot.tps.on();
|
bot.tps.on();
|
||||||
return Component.empty()
|
return Component.empty()
|
||||||
|
@ -40,7 +43,7 @@ public class TPSBarCommand extends Command {
|
||||||
.color(ColorUtilities.getColorByString(bot.config.colorPalette.defaultColor));
|
.color(ColorUtilities.getColorByString(bot.config.colorPalette.defaultColor));
|
||||||
}
|
}
|
||||||
default -> {
|
default -> {
|
||||||
return Component.text("Invalid action").color(NamedTextColor.RED);
|
throw new CommandException(Component.text("Invalid action"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,7 @@ package land.chipmunk.chayapak.chomens_bot.commands;
|
||||||
|
|
||||||
import land.chipmunk.chayapak.chomens_bot.command.Command;
|
import land.chipmunk.chayapak.chomens_bot.command.Command;
|
||||||
import land.chipmunk.chayapak.chomens_bot.command.CommandContext;
|
import land.chipmunk.chayapak.chomens_bot.command.CommandContext;
|
||||||
|
import land.chipmunk.chayapak.chomens_bot.command.CommandException;
|
||||||
import land.chipmunk.chayapak.chomens_bot.command.TrustLevel;
|
import land.chipmunk.chayapak.chomens_bot.command.TrustLevel;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
import net.kyori.adventure.text.format.NamedTextColor;
|
import net.kyori.adventure.text.format.NamedTextColor;
|
||||||
|
@ -11,7 +12,7 @@ public class TestCommand extends Command {
|
||||||
super(
|
super(
|
||||||
"test",
|
"test",
|
||||||
"Tests if the bot is working",
|
"Tests if the bot is working",
|
||||||
new String[] { "[{args}]" },
|
new String[] { "[args]" },
|
||||||
new String[] {},
|
new String[] {},
|
||||||
TrustLevel.PUBLIC,
|
TrustLevel.PUBLIC,
|
||||||
false
|
false
|
||||||
|
@ -19,13 +20,13 @@ public class TestCommand extends Command {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Component execute(CommandContext context, String[] args, String[] fullArgs) {
|
public Component execute(CommandContext context) throws CommandException {
|
||||||
return Component.translatable(
|
return Component.translatable(
|
||||||
"Hello, World! Username: %s, Sender UUID: %s, Prefix: %s, Args: %s",
|
"Hello, World! Username: %s, Sender UUID: %s, Prefix: %s, Args: %s",
|
||||||
Component.text(context.sender.profile.getName()),
|
Component.text(context.sender.profile.getName()),
|
||||||
Component.text(context.sender.profile.getIdAsString()),
|
Component.text(context.sender.profile.getIdAsString()),
|
||||||
Component.text(context.prefix),
|
Component.text(context.prefix),
|
||||||
Component.text(String.join(", ", args))
|
Component.text(context.getString(true, false))
|
||||||
).color(NamedTextColor.GREEN);
|
).color(NamedTextColor.GREEN);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,7 @@ package land.chipmunk.chayapak.chomens_bot.commands;
|
||||||
import land.chipmunk.chayapak.chomens_bot.Bot;
|
import land.chipmunk.chayapak.chomens_bot.Bot;
|
||||||
import land.chipmunk.chayapak.chomens_bot.command.Command;
|
import land.chipmunk.chayapak.chomens_bot.command.Command;
|
||||||
import land.chipmunk.chayapak.chomens_bot.command.CommandContext;
|
import land.chipmunk.chayapak.chomens_bot.command.CommandContext;
|
||||||
|
import land.chipmunk.chayapak.chomens_bot.command.CommandException;
|
||||||
import land.chipmunk.chayapak.chomens_bot.command.TrustLevel;
|
import land.chipmunk.chayapak.chomens_bot.command.TrustLevel;
|
||||||
import land.chipmunk.chayapak.chomens_bot.util.ColorUtilities;
|
import land.chipmunk.chayapak.chomens_bot.util.ColorUtilities;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
|
@ -25,16 +26,16 @@ public class TimeCommand extends Command {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Component execute(CommandContext context, String[] args, String[] fullArgs) {
|
public Component execute(CommandContext context) throws CommandException {
|
||||||
final Bot bot = context.bot;
|
final Bot bot = context.bot;
|
||||||
|
|
||||||
final String timezone = args[0];
|
final String timezone = context.getString(true, true);
|
||||||
|
|
||||||
DateTimeZone zone;
|
DateTimeZone zone;
|
||||||
try {
|
try {
|
||||||
zone = DateTimeZone.forID(timezone);
|
zone = DateTimeZone.forID(timezone);
|
||||||
} catch (IllegalArgumentException ignored) {
|
} catch (IllegalArgumentException ignored) {
|
||||||
return Component.text("Invalid timezone (case-sensitive)").color(NamedTextColor.RED);
|
throw new CommandException(Component.text("Invalid timezone (case-sensitive)"));
|
||||||
}
|
}
|
||||||
|
|
||||||
final DateTime dateTime = new DateTime(zone);
|
final DateTime dateTime = new DateTime(zone);
|
||||||
|
|
|
@ -6,6 +6,7 @@ import com.google.gson.JsonObject;
|
||||||
import land.chipmunk.chayapak.chomens_bot.Bot;
|
import land.chipmunk.chayapak.chomens_bot.Bot;
|
||||||
import land.chipmunk.chayapak.chomens_bot.command.Command;
|
import land.chipmunk.chayapak.chomens_bot.command.Command;
|
||||||
import land.chipmunk.chayapak.chomens_bot.command.CommandContext;
|
import land.chipmunk.chayapak.chomens_bot.command.CommandContext;
|
||||||
|
import land.chipmunk.chayapak.chomens_bot.command.CommandException;
|
||||||
import land.chipmunk.chayapak.chomens_bot.command.TrustLevel;
|
import land.chipmunk.chayapak.chomens_bot.command.TrustLevel;
|
||||||
import land.chipmunk.chayapak.chomens_bot.util.ColorUtilities;
|
import land.chipmunk.chayapak.chomens_bot.util.ColorUtilities;
|
||||||
import land.chipmunk.chayapak.chomens_bot.util.HttpUtilities;
|
import land.chipmunk.chayapak.chomens_bot.util.HttpUtilities;
|
||||||
|
@ -15,14 +16,13 @@ import net.kyori.adventure.text.format.NamedTextColor;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.net.URLEncoder;
|
import java.net.URLEncoder;
|
||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
import java.util.Arrays;
|
|
||||||
|
|
||||||
public class TranslateCommand extends Command {
|
public class TranslateCommand extends Command {
|
||||||
public TranslateCommand () {
|
public TranslateCommand () {
|
||||||
super(
|
super(
|
||||||
"translate",
|
"translate",
|
||||||
"Translates a message using Google Translate",
|
"Translates a message using Google Translate",
|
||||||
new String[] { "<fromLanguage> <toLanguage> <{message}>" },
|
new String[] { "<fromLanguage> <toLanguage> <message>" },
|
||||||
new String[] {},
|
new String[] {},
|
||||||
TrustLevel.PUBLIC,
|
TrustLevel.PUBLIC,
|
||||||
false
|
false
|
||||||
|
@ -30,13 +30,13 @@ public class TranslateCommand extends Command {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Component execute(CommandContext context, String[] args, String[] fullArgs) {
|
public Component execute(CommandContext context) throws CommandException {
|
||||||
final Bot bot = context.bot;
|
final Bot bot = context.bot;
|
||||||
|
|
||||||
final String from = args[0];
|
final String from = context.getString(false, true);
|
||||||
final String to = args[1];
|
final String to = context.getString(false, true);
|
||||||
|
|
||||||
final String message = String.join(" ", Arrays.copyOfRange(args, 2, args.length));
|
final String message = context.getString(true, true);
|
||||||
|
|
||||||
final Gson gson = new Gson();
|
final Gson gson = new Gson();
|
||||||
|
|
||||||
|
|
|
@ -3,6 +3,7 @@ package land.chipmunk.chayapak.chomens_bot.commands;
|
||||||
import land.chipmunk.chayapak.chomens_bot.Bot;
|
import land.chipmunk.chayapak.chomens_bot.Bot;
|
||||||
import land.chipmunk.chayapak.chomens_bot.command.Command;
|
import land.chipmunk.chayapak.chomens_bot.command.Command;
|
||||||
import land.chipmunk.chayapak.chomens_bot.command.CommandContext;
|
import land.chipmunk.chayapak.chomens_bot.command.CommandContext;
|
||||||
|
import land.chipmunk.chayapak.chomens_bot.command.CommandException;
|
||||||
import land.chipmunk.chayapak.chomens_bot.command.TrustLevel;
|
import land.chipmunk.chayapak.chomens_bot.command.TrustLevel;
|
||||||
import land.chipmunk.chayapak.chomens_bot.data.chat.PlayerEntry;
|
import land.chipmunk.chayapak.chomens_bot.data.chat.PlayerEntry;
|
||||||
import land.chipmunk.chayapak.chomens_bot.util.ColorUtilities;
|
import land.chipmunk.chayapak.chomens_bot.util.ColorUtilities;
|
||||||
|
@ -16,7 +17,7 @@ public class UUIDCommand extends Command {
|
||||||
super(
|
super(
|
||||||
"uuid",
|
"uuid",
|
||||||
"Shows your UUID or other player's UUID",
|
"Shows your UUID or other player's UUID",
|
||||||
new String[] { "[{username}]" },
|
new String[] { "[username]" },
|
||||||
new String[] {},
|
new String[] {},
|
||||||
TrustLevel.PUBLIC,
|
TrustLevel.PUBLIC,
|
||||||
false
|
false
|
||||||
|
@ -24,13 +25,15 @@ public class UUIDCommand extends Command {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Component execute(CommandContext context, String[] args, String[] fullArgs) {
|
public Component execute(CommandContext context) throws CommandException {
|
||||||
final Bot bot = context.bot;
|
final Bot bot = context.bot;
|
||||||
|
|
||||||
if (args.length > 0) {
|
final String player = context.getString(true, false);
|
||||||
final PlayerEntry entry = bot.players.getEntry(String.join(" ", args));
|
|
||||||
|
|
||||||
if (entry == null) return Component.text("Invalid player name").color(NamedTextColor.RED);
|
if (!player.isEmpty()) {
|
||||||
|
final PlayerEntry entry = bot.players.getEntry(player);
|
||||||
|
|
||||||
|
if (entry == null) throw new CommandException(Component.text("Invalid player name"));
|
||||||
|
|
||||||
final String name = entry.profile.getName();
|
final String name = entry.profile.getName();
|
||||||
final String uuid = entry.profile.getIdAsString();
|
final String uuid = entry.profile.getIdAsString();
|
||||||
|
|
|
@ -6,10 +6,7 @@ import com.google.gson.JsonElement;
|
||||||
import com.google.gson.JsonObject;
|
import com.google.gson.JsonObject;
|
||||||
import land.chipmunk.chayapak.chomens_bot.Bot;
|
import land.chipmunk.chayapak.chomens_bot.Bot;
|
||||||
import land.chipmunk.chayapak.chomens_bot.Main;
|
import land.chipmunk.chayapak.chomens_bot.Main;
|
||||||
import land.chipmunk.chayapak.chomens_bot.command.Command;
|
import land.chipmunk.chayapak.chomens_bot.command.*;
|
||||||
import land.chipmunk.chayapak.chomens_bot.command.CommandContext;
|
|
||||||
import land.chipmunk.chayapak.chomens_bot.command.DiscordCommandContext;
|
|
||||||
import land.chipmunk.chayapak.chomens_bot.command.TrustLevel;
|
|
||||||
import land.chipmunk.chayapak.chomens_bot.util.ColorUtilities;
|
import land.chipmunk.chayapak.chomens_bot.util.ColorUtilities;
|
||||||
import land.chipmunk.chayapak.chomens_bot.util.HttpUtilities;
|
import land.chipmunk.chayapak.chomens_bot.util.HttpUtilities;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
|
@ -32,7 +29,7 @@ public class UrbanCommand extends Command {
|
||||||
super(
|
super(
|
||||||
"urban",
|
"urban",
|
||||||
"Urban Dictionary in Minecraft",
|
"Urban Dictionary in Minecraft",
|
||||||
new String[] { "<{term}>" },
|
new String[] { "<term>" },
|
||||||
new String[] {},
|
new String[] {},
|
||||||
TrustLevel.PUBLIC,
|
TrustLevel.PUBLIC,
|
||||||
false
|
false
|
||||||
|
@ -41,14 +38,14 @@ public class UrbanCommand extends Command {
|
||||||
Main.executor.scheduleAtFixedRate(() -> requestsPerSecond = 0, 0, 1, TimeUnit.SECONDS);
|
Main.executor.scheduleAtFixedRate(() -> requestsPerSecond = 0, 0, 1, TimeUnit.SECONDS);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Component execute (CommandContext context, String[] args, String[] fullArgs) {
|
public Component execute (CommandContext context) throws CommandException {
|
||||||
if (requestsPerSecond > 3) return Component.text("Too many requests").color(NamedTextColor.RED);
|
if (requestsPerSecond > 3) throw new CommandException(Component.text("Too many requests"));
|
||||||
|
|
||||||
final Bot bot = context.bot;
|
final Bot bot = context.bot;
|
||||||
|
|
||||||
final boolean discord = context instanceof DiscordCommandContext;
|
final boolean discord = context instanceof DiscordCommandContext;
|
||||||
|
|
||||||
final String term = String.join(" ", args);
|
final String term = context.getString(true, true);
|
||||||
|
|
||||||
final Gson gson = new Gson();
|
final Gson gson = new Gson();
|
||||||
|
|
||||||
|
|
|
@ -3,6 +3,7 @@ package land.chipmunk.chayapak.chomens_bot.commands;
|
||||||
import land.chipmunk.chayapak.chomens_bot.Bot;
|
import land.chipmunk.chayapak.chomens_bot.Bot;
|
||||||
import land.chipmunk.chayapak.chomens_bot.command.Command;
|
import land.chipmunk.chayapak.chomens_bot.command.Command;
|
||||||
import land.chipmunk.chayapak.chomens_bot.command.CommandContext;
|
import land.chipmunk.chayapak.chomens_bot.command.CommandContext;
|
||||||
|
import land.chipmunk.chayapak.chomens_bot.command.CommandException;
|
||||||
import land.chipmunk.chayapak.chomens_bot.command.TrustLevel;
|
import land.chipmunk.chayapak.chomens_bot.command.TrustLevel;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
import net.kyori.adventure.text.format.NamedTextColor;
|
import net.kyori.adventure.text.format.NamedTextColor;
|
||||||
|
@ -20,13 +21,13 @@ public class ValidateCommand extends Command {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Component execute(CommandContext context, String[] args, String[] fullArgs) {
|
public Component execute(CommandContext context) throws CommandException {
|
||||||
final Bot bot = context.bot;
|
final Bot bot = context.bot;
|
||||||
|
|
||||||
final String hash = fullArgs[0];
|
final String hash = context.fullArgs[0];
|
||||||
|
|
||||||
if (bot.hashing.isCorrectHash(hash, context.splitInput[0], context.sender)) return Component.text("Valid hash").color(NamedTextColor.GREEN);
|
if (bot.hashing.isCorrectHash(hash, context.commandName, context.sender)) return Component.text("Valid hash").color(NamedTextColor.GREEN);
|
||||||
else if (bot.hashing.isCorrectOwnerHash(hash, context.splitInput[0], context.sender)) return Component.text("Valid OwnerHash").color(NamedTextColor.GREEN);
|
else if (bot.hashing.isCorrectOwnerHash(hash, context.commandName, context.sender)) return Component.text("Valid OwnerHash").color(NamedTextColor.GREEN);
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,6 +5,7 @@ import com.google.gson.JsonObject;
|
||||||
import land.chipmunk.chayapak.chomens_bot.Bot;
|
import land.chipmunk.chayapak.chomens_bot.Bot;
|
||||||
import land.chipmunk.chayapak.chomens_bot.command.Command;
|
import land.chipmunk.chayapak.chomens_bot.command.Command;
|
||||||
import land.chipmunk.chayapak.chomens_bot.command.CommandContext;
|
import land.chipmunk.chayapak.chomens_bot.command.CommandContext;
|
||||||
|
import land.chipmunk.chayapak.chomens_bot.command.CommandException;
|
||||||
import land.chipmunk.chayapak.chomens_bot.command.TrustLevel;
|
import land.chipmunk.chayapak.chomens_bot.command.TrustLevel;
|
||||||
import land.chipmunk.chayapak.chomens_bot.util.ColorUtilities;
|
import land.chipmunk.chayapak.chomens_bot.util.ColorUtilities;
|
||||||
import land.chipmunk.chayapak.chomens_bot.util.HttpUtilities;
|
import land.chipmunk.chayapak.chomens_bot.util.HttpUtilities;
|
||||||
|
@ -24,17 +25,17 @@ public class WeatherCommand extends Command {
|
||||||
super(
|
super(
|
||||||
"weather",
|
"weather",
|
||||||
"Shows the weather in a place",
|
"Shows the weather in a place",
|
||||||
new String[] { "<{location}>" },
|
new String[] { "<location>" },
|
||||||
new String[] {},
|
new String[] {},
|
||||||
TrustLevel.PUBLIC,
|
TrustLevel.PUBLIC,
|
||||||
false
|
false
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Component execute (CommandContext context, String[] args, String[] fullArgs) {
|
public Component execute (CommandContext context) throws CommandException {
|
||||||
final Bot bot = context.bot;
|
final Bot bot = context.bot;
|
||||||
|
|
||||||
final String location = String.join(" ", args);
|
final String location = context.getString(true, true);
|
||||||
|
|
||||||
final Gson gson = new Gson();
|
final Gson gson = new Gson();
|
||||||
|
|
||||||
|
@ -107,7 +108,7 @@ public class WeatherCommand extends Command {
|
||||||
Component.text(time).color(ColorUtilities.getColorByString(bot.config.colorPalette.string))
|
Component.text(time).color(ColorUtilities.getColorByString(bot.config.colorPalette.string))
|
||||||
).color(ColorUtilities.getColorByString(bot.config.colorPalette.defaultColor));
|
).color(ColorUtilities.getColorByString(bot.config.colorPalette.defaultColor));
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
return Component.text("Location \"" + location + "\" not found").color(NamedTextColor.RED);
|
throw new CommandException(Component.text("Location \"" + location + "\" not found"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,6 +5,7 @@ import com.google.gson.JsonObject;
|
||||||
import land.chipmunk.chayapak.chomens_bot.Bot;
|
import land.chipmunk.chayapak.chomens_bot.Bot;
|
||||||
import land.chipmunk.chayapak.chomens_bot.command.Command;
|
import land.chipmunk.chayapak.chomens_bot.command.Command;
|
||||||
import land.chipmunk.chayapak.chomens_bot.command.CommandContext;
|
import land.chipmunk.chayapak.chomens_bot.command.CommandContext;
|
||||||
|
import land.chipmunk.chayapak.chomens_bot.command.CommandException;
|
||||||
import land.chipmunk.chayapak.chomens_bot.command.TrustLevel;
|
import land.chipmunk.chayapak.chomens_bot.command.TrustLevel;
|
||||||
import land.chipmunk.chayapak.chomens_bot.util.HttpUtilities;
|
import land.chipmunk.chayapak.chomens_bot.util.HttpUtilities;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
|
@ -20,17 +21,17 @@ public class WikipediaCommand extends Command {
|
||||||
super(
|
super(
|
||||||
"wikipedia",
|
"wikipedia",
|
||||||
"Wikipedia in Minecraft",
|
"Wikipedia in Minecraft",
|
||||||
new String[] { "<{page}>" },
|
new String[] { "<page>" },
|
||||||
new String[] { "wiki" },
|
new String[] { "wiki" },
|
||||||
TrustLevel.PUBLIC,
|
TrustLevel.PUBLIC,
|
||||||
false
|
false
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Component execute (CommandContext context, String[] args, String[] fullArgs) {
|
public Component execute (CommandContext context) throws CommandException {
|
||||||
final Bot bot = context.bot;
|
final Bot bot = context.bot;
|
||||||
|
|
||||||
final String page = String.join(" ", args);
|
final String page = context.getString(true, true);
|
||||||
|
|
||||||
final Gson gson = new Gson();
|
final Gson gson = new Gson();
|
||||||
|
|
||||||
|
|
|
@ -58,9 +58,11 @@ public class ChatCommandHandlerPlugin extends ChatPlugin.Listener {
|
||||||
|
|
||||||
final PlayerCommandContext context = new PlayerCommandContext(bot, displayName, prefix, "@a", message.sender);
|
final PlayerCommandContext context = new PlayerCommandContext(bot, displayName, prefix, "@a", message.sender);
|
||||||
|
|
||||||
final Component output = bot.commandHandler.executeCommand(commandString, context, null);
|
bot.executorService.submit(() -> {
|
||||||
|
final Component output = bot.commandHandler.executeCommand(commandString, context, null);
|
||||||
|
|
||||||
if (output != null) context.sendOutput(output);
|
if (output != null) context.sendOutput(output);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public void commandSpyMessageReceived (PlayerEntry sender, String command) {
|
public void commandSpyMessageReceived (PlayerEntry sender, String command) {
|
||||||
|
@ -90,8 +92,10 @@ public class ChatCommandHandlerPlugin extends ChatPlugin.Listener {
|
||||||
|
|
||||||
final PlayerCommandContext context = new PlayerCommandContext(bot, displayName, prefix, selector, sender);
|
final PlayerCommandContext context = new PlayerCommandContext(bot, displayName, prefix, selector, sender);
|
||||||
|
|
||||||
final Component output = bot.commandHandler.executeCommand(commandString, context, null);
|
bot.executorService.submit(() -> {
|
||||||
|
final Component output = bot.commandHandler.executeCommand(commandString, context, null);
|
||||||
|
|
||||||
if (output != null) context.sendOutput(output);
|
if (output != null) context.sendOutput(output);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -100,24 +100,13 @@ public class CommandHandlerPlugin {
|
||||||
|
|
||||||
final TrustLevel trustLevel = command.trustLevel;
|
final TrustLevel trustLevel = command.trustLevel;
|
||||||
|
|
||||||
final String[] fullArgs = Arrays.copyOfRange(splitInput, 1, splitInput.length);
|
|
||||||
|
|
||||||
// TODO: improve these minimum args and maximum args stuff, the current one really sucks.,.,
|
|
||||||
final int shortestUsageIndex = getShortestUsageIndex(command.usages);
|
|
||||||
final int longestUsageIndex = getLongestUsageIndex(command.usages);
|
|
||||||
final String shortestUsage = shortestUsageIndex == 0 && command.usages.length == 0 ? "" : command.usages[shortestUsageIndex];
|
|
||||||
final String longestUsage = longestUsageIndex == 0 && command.usages.length == 0 ? "" : command.usages[longestUsageIndex];
|
|
||||||
|
|
||||||
final int minimumArgs = getMinimumArgs(shortestUsage, inGame, command.trustLevel);
|
|
||||||
final int maximumArgs = getMaximumArgs(longestUsage, inGame, command.trustLevel);
|
|
||||||
if (fullArgs.length < minimumArgs) return Component.text("Excepted minimum of " + minimumArgs + " argument(s), got " + fullArgs.length).color(NamedTextColor.RED);
|
|
||||||
if (fullArgs.length > maximumArgs && !longestUsage.contains("{")) return Component.text("Too many arguments, expected " + maximumArgs + " max").color(NamedTextColor.RED);
|
|
||||||
|
|
||||||
if (trustLevel != TrustLevel.PUBLIC && splitInput.length < 2 && inGame) return Component.text("Please provide a hash").color(NamedTextColor.RED);
|
if (trustLevel != TrustLevel.PUBLIC && splitInput.length < 2 && inGame) return Component.text("Please provide a hash").color(NamedTextColor.RED);
|
||||||
|
|
||||||
String userHash = "";
|
String userHash = "";
|
||||||
if (trustLevel != TrustLevel.PUBLIC && inGame) userHash = splitInput[1];
|
if (trustLevel != TrustLevel.PUBLIC && inGame) userHash = splitInput[1];
|
||||||
|
|
||||||
|
final String[] fullArgs = Arrays.copyOfRange(splitInput, 1, splitInput.length);
|
||||||
|
|
||||||
final String[] args = Arrays.copyOfRange(splitInput, (trustLevel != TrustLevel.PUBLIC && inGame) ? 2 : 1, splitInput.length);
|
final String[] args = Arrays.copyOfRange(splitInput, (trustLevel != TrustLevel.PUBLIC && inGame) ? 2 : 1, splitInput.length);
|
||||||
|
|
||||||
if (command.trustLevel != TrustLevel.PUBLIC && !console) {
|
if (command.trustLevel != TrustLevel.PUBLIC && !console) {
|
||||||
|
@ -157,11 +146,15 @@ public class CommandHandlerPlugin {
|
||||||
|
|
||||||
if (!console && command.consoleOnly) return Component.text("This command can only be ran via console").color(NamedTextColor.RED);
|
if (!console && command.consoleOnly) return Component.text("This command can only be ran via console").color(NamedTextColor.RED);
|
||||||
|
|
||||||
context.splitInput = splitInput;
|
// should these be here?
|
||||||
|
context.fullArgs = fullArgs;
|
||||||
|
context.args = args;
|
||||||
context.commandName = command.name;
|
context.commandName = command.name;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
return command.execute(context, args, fullArgs);
|
return command.execute(context);
|
||||||
|
} catch (CommandException e) {
|
||||||
|
return e.message.color(NamedTextColor.RED);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
|
|
||||||
|
@ -176,7 +169,8 @@ public class CommandHandlerPlugin {
|
||||||
.text(stackTrace)
|
.text(stackTrace)
|
||||||
.color(NamedTextColor.RED)
|
.color(NamedTextColor.RED)
|
||||||
)
|
)
|
||||||
);
|
)
|
||||||
|
.color(NamedTextColor.RED);
|
||||||
} else {
|
} else {
|
||||||
return Component.text(stackTrace).color(NamedTextColor.RED);
|
return Component.text(stackTrace).color(NamedTextColor.RED);
|
||||||
}
|
}
|
||||||
|
@ -197,66 +191,4 @@ public class CommandHandlerPlugin {
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private int getLongestUsageIndex(String[] usages) {
|
|
||||||
int longestIndex = 0;
|
|
||||||
int maxLength = 0;
|
|
||||||
|
|
||||||
final int usagesSize = usages.length;
|
|
||||||
|
|
||||||
for (int i = 0; i < usagesSize; i++) {
|
|
||||||
String[] args = usages[i].split("\\s+");
|
|
||||||
if (args.length > maxLength) {
|
|
||||||
longestIndex = i;
|
|
||||||
maxLength = args.length;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return longestIndex;
|
|
||||||
}
|
|
||||||
|
|
||||||
private int getShortestUsageIndex(String[] usages) {
|
|
||||||
int shortestIndex = 0;
|
|
||||||
int minLength = Integer.MAX_VALUE;
|
|
||||||
|
|
||||||
final int usagesSize = usages.length;
|
|
||||||
|
|
||||||
for (int i = 0; i < usagesSize; i++) {
|
|
||||||
String[] args = usages[i].split("\\s+");
|
|
||||||
if (args.length < minLength) {
|
|
||||||
shortestIndex = i;
|
|
||||||
minLength = args.length;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return shortestIndex;
|
|
||||||
}
|
|
||||||
|
|
||||||
private int getMinimumArgs(String usage, boolean inGame, TrustLevel trustLevel) {
|
|
||||||
int count = 0;
|
|
||||||
|
|
||||||
final int usageLength = usage.length();
|
|
||||||
|
|
||||||
for (int i = 0; i < usageLength; i++) {
|
|
||||||
if (usage.charAt(i) == '<') {
|
|
||||||
count++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (usage.contains("<hash>")) count--; // bad fix?
|
|
||||||
if ((!inGame && trustLevel != TrustLevel.PUBLIC)) count--;
|
|
||||||
return count;
|
|
||||||
}
|
|
||||||
|
|
||||||
private int getMaximumArgs(String usage, boolean inGame, TrustLevel trustLevel) {
|
|
||||||
int count = 0;
|
|
||||||
|
|
||||||
final int usageLength = usage.length();
|
|
||||||
|
|
||||||
for (int i = 0; i < usageLength; i++) {
|
|
||||||
if (usage.charAt(i) == '<' || usage.charAt(i) == '[') {
|
|
||||||
count++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!inGame && trustLevel != TrustLevel.PUBLIC) count++;
|
|
||||||
return count;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue