From 247f217e2ea72bde65a84a759dc7fe7df8b12eb4 Mon Sep 17 00:00:00 2001 From: anthorob Date: Thu, 21 Nov 2024 01:33:55 -0500 Subject: [PATCH] Implement built-in tasks, improve message commands with arguments, fix command context in DM, better help message --- .../context/MessageCommandContext.java | 33 ++++++++++------- .../core/tasks/AbstractBuiltInTask.java | 36 +++++++++++++++++++ .../core/tasks/AbstractPersistableTask.java | 2 +- .../core/tasks/AbstractTask.java | 5 +++ .../netneutrality/tasks/ButtonTask.java | 13 ------- .../bobert/netneutrality/tasks/EmojiTask.java | 13 ------- .../bobert/netneutrality/tasks/ModalTask.java | 23 ++++++------ .../tasks/music/AddAllTracksTask.java | 5 ++- .../tasks/music/CancelLoadTask.java | 4 +-- 9 files changed, 78 insertions(+), 56 deletions(-) create mode 100644 src/main/java/me/bobert/netneutrality/core/tasks/AbstractBuiltInTask.java diff --git a/src/main/java/me/bobert/netneutrality/context/MessageCommandContext.java b/src/main/java/me/bobert/netneutrality/context/MessageCommandContext.java index bf8d75a..f59e823 100644 --- a/src/main/java/me/bobert/netneutrality/context/MessageCommandContext.java +++ b/src/main/java/me/bobert/netneutrality/context/MessageCommandContext.java @@ -14,7 +14,9 @@ import net.dv8tion.jda.api.interactions.components.LayoutComponent; import net.dv8tion.jda.api.interactions.modals.Modal; import net.dv8tion.jda.api.utils.messages.MessageCreateData; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.concurrent.TimeUnit; import java.util.function.Consumer; @@ -23,7 +25,7 @@ public class MessageCommandContext extends CommandContext { private final Message message; public MessageCommandContext(MessageReceivedEvent event) { - super(event.getJDA(), event.getGuild(), event.getChannel(), event.getMember(), event.getAuthor()); + super(event.getJDA(), event.isFromGuild() ? event.getGuild() : null, event.getChannel(), event.getMember(), event.getAuthor()); this.event = event; this.message = event.getMessage(); } @@ -34,24 +36,31 @@ public class MessageCommandContext extends CommandContext { } public String getArgument(int index) { - return getArgs()[index]; + return getArgs().get(index); } - public String[] getArgs() { - String msg = message.getContentDisplay().trim(); - msg = msg.substring(Settings.getInstance().get("NETNEUTRALITY_BOT_PREFIX", "$").length()).trim(); - String cmd = msg.split(" ", 2)[0]; - String[] args = msg.replaceFirst("(" + cmd + ")(\\s+)?", "").split(" "); + public Map getArgs() { + Map args = new HashMap<>(); - if (args.length == 1 && args[0].isEmpty()) - args = new String[0]; + String msg = message.getContentDisplay().trim(); + msg = msg.substring(Settings.getInstance().getPrefix().length()).trim(); + String cmd = msg.split(" ", 2)[0]; + + String[] array = msg.replaceFirst("(" + cmd + ")(\\s+)?", "").split(" "); + for (int i = 0; i < array.length; i++) { + args.put(i, array[i]); + } + + if (args.size() == 1 && args.get(0).isEmpty()) { + args.remove(0); + } return args; } public String getMessageText() { String msg = message.getContentDisplay().trim(); - msg = msg.substring(Settings.getInstance().get("NETNEUTRALITY_BOT_PREFIX", "$").length()).trim(); + msg = msg.substring(Settings.getInstance().getPrefix().length()).trim(); String cmd = msg.split(" ", 2)[0]; return msg.replaceFirst("(" + cmd + ")( )?", ""); @@ -123,7 +132,7 @@ public class MessageCommandContext extends CommandContext { @Override public String parseCommandName() { String rawMessage = message.getContentDisplay().trim(); - String prefix = Settings.getInstance().get("NETNEUTRALITY_BOT_PREFIX", "$"); + String prefix = Settings.getInstance().getPrefix(); if (rawMessage.startsWith(prefix)) { rawMessage = rawMessage.replaceFirst(String.format("^[%s\\s]{1,}", prefix), "").trim(); @@ -137,7 +146,7 @@ public class MessageCommandContext extends CommandContext { @Override public String getSubCommand() { - if (getArgs().length > 0) { + if (!getArgs().isEmpty()) { return getArgument(0); } diff --git a/src/main/java/me/bobert/netneutrality/core/tasks/AbstractBuiltInTask.java b/src/main/java/me/bobert/netneutrality/core/tasks/AbstractBuiltInTask.java new file mode 100644 index 0000000..ae3e4eb --- /dev/null +++ b/src/main/java/me/bobert/netneutrality/core/tasks/AbstractBuiltInTask.java @@ -0,0 +1,36 @@ +package me.bobert.netneutrality.core.tasks; +/* + * Copyright (c) anthorob + * + * https://discord.gg/qUa6zNFZsd + */ + +import me.bobert.netneutrality.core.context.CommandContext; + +public abstract class AbstractBuiltInTask extends AbstractTask implements BuiltInTask { + + @Override + public String getName() { + return getId(); + } + + @Override + public boolean isInsertable() { + return true; + } + + @Override + public boolean oneshot() { + return false; + } + + @Override + public boolean isExpired() { + return false; + } + + @Override + public void replyToInteraction(CommandContext context) { + // Task is loaded at runtime, this will never be called + } +} diff --git a/src/main/java/me/bobert/netneutrality/core/tasks/AbstractPersistableTask.java b/src/main/java/me/bobert/netneutrality/core/tasks/AbstractPersistableTask.java index 0edcbee..dc71c77 100644 --- a/src/main/java/me/bobert/netneutrality/core/tasks/AbstractPersistableTask.java +++ b/src/main/java/me/bobert/netneutrality/core/tasks/AbstractPersistableTask.java @@ -27,7 +27,7 @@ public abstract class AbstractPersistableTask extends AbstractTask implements Pe @Override public void replyToInteraction(CommandContext context) { - + // Task loaded from database, this will never be called } @Override diff --git a/src/main/java/me/bobert/netneutrality/core/tasks/AbstractTask.java b/src/main/java/me/bobert/netneutrality/core/tasks/AbstractTask.java index 6da8833..56e1bfd 100644 --- a/src/main/java/me/bobert/netneutrality/core/tasks/AbstractTask.java +++ b/src/main/java/me/bobert/netneutrality/core/tasks/AbstractTask.java @@ -25,6 +25,11 @@ public abstract class AbstractTask implements Task { return creationTime; } + @Override + public TaskButtonCreator createButton() { + return new TaskButtonCreator(getId()); + } + @Override public boolean equals(Object o) { if (this == o) return true; diff --git a/src/main/java/me/bobert/netneutrality/tasks/ButtonTask.java b/src/main/java/me/bobert/netneutrality/tasks/ButtonTask.java index 64132eb..03bf819 100644 --- a/src/main/java/me/bobert/netneutrality/tasks/ButtonTask.java +++ b/src/main/java/me/bobert/netneutrality/tasks/ButtonTask.java @@ -5,8 +5,6 @@ package me.bobert.netneutrality.tasks; * https://discord.gg/qUa6zNFZsd */ -import me.bobert.netneutrality.context.tasks.ButtonTaskContext; -import me.bobert.netneutrality.core.context.TaskContext; import me.bobert.netneutrality.core.tasks.AbstractTask; import java.time.OffsetDateTime; @@ -20,17 +18,6 @@ public abstract class ButtonTask extends AbstractTask { return id.toString(); } - @Override - public void execute(TaskContext context) { - if (context instanceof ButtonTaskContext) { - execute((ButtonTaskContext) context); - } else { - throw new IllegalArgumentException("Invalid context for this task"); - } - } - - public abstract void execute(ButtonTaskContext context); - @Override public boolean oneshot() { return true; diff --git a/src/main/java/me/bobert/netneutrality/tasks/EmojiTask.java b/src/main/java/me/bobert/netneutrality/tasks/EmojiTask.java index a953d24..75a1487 100644 --- a/src/main/java/me/bobert/netneutrality/tasks/EmojiTask.java +++ b/src/main/java/me/bobert/netneutrality/tasks/EmojiTask.java @@ -5,8 +5,6 @@ package me.bobert.netneutrality.tasks; * https://discord.gg/qUa6zNFZsd */ -import me.bobert.netneutrality.context.tasks.EmojiTaskContext; -import me.bobert.netneutrality.core.context.TaskContext; import me.bobert.netneutrality.core.tasks.AbstractPersistableTask; public abstract class EmojiTask extends AbstractPersistableTask { @@ -30,15 +28,4 @@ public abstract class EmojiTask extends AbstractPersistableTask { public String getId() { return String.format("%s:%s", getGuildId(), getMessageId()); } - - @Override - public void execute(TaskContext context) { - if (context instanceof EmojiTaskContext) { - execute((EmojiTaskContext) context); - } else { - throw new IllegalArgumentException("Invalid context for this task"); - } - } - - public abstract void execute(EmojiTaskContext context); } diff --git a/src/main/java/me/bobert/netneutrality/tasks/ModalTask.java b/src/main/java/me/bobert/netneutrality/tasks/ModalTask.java index 6b6813b..b55fc10 100644 --- a/src/main/java/me/bobert/netneutrality/tasks/ModalTask.java +++ b/src/main/java/me/bobert/netneutrality/tasks/ModalTask.java @@ -5,11 +5,12 @@ package me.bobert.netneutrality.tasks; * https://discord.gg/qUa6zNFZsd */ -import me.bobert.netneutrality.context.tasks.ModalTaskContext; import me.bobert.netneutrality.core.context.TaskContext; import me.bobert.netneutrality.core.tasks.AbstractTask; +import net.dv8tion.jda.api.interactions.modals.ModalMapping; import java.time.OffsetDateTime; +import java.util.List; import java.util.UUID; public abstract class ModalTask extends AbstractTask { @@ -20,17 +21,6 @@ public abstract class ModalTask extends AbstractTask { return id.toString(); } - @Override - public void execute(TaskContext context) { - if (context instanceof ModalTaskContext) { - execute((ModalTaskContext) context); - } else { - throw new IllegalArgumentException("Invalid context for this task"); - } - } - - public abstract void execute(ModalTaskContext context); - @Override public boolean oneshot() { return true; @@ -40,4 +30,13 @@ public abstract class ModalTask extends AbstractTask { public boolean isExpired() { return getCreationTime().plusMinutes(5).isBefore(OffsetDateTime.now()); } + + public ModalMapping getValue(String key, TaskContext context) { + List mappings = (List) context.getContextData("values"); + return mappings.stream() + .filter(o -> o instanceof ModalMapping) + .map(o -> (ModalMapping) o) + .filter(mapping -> mapping.getId().equals(key)) + .findFirst().orElse(null); + } } diff --git a/src/main/java/me/bobert/netneutrality/tasks/music/AddAllTracksTask.java b/src/main/java/me/bobert/netneutrality/tasks/music/AddAllTracksTask.java index b225e3f..91114da 100644 --- a/src/main/java/me/bobert/netneutrality/tasks/music/AddAllTracksTask.java +++ b/src/main/java/me/bobert/netneutrality/tasks/music/AddAllTracksTask.java @@ -6,12 +6,11 @@ package me.bobert.netneutrality.tasks.music; */ import com.sedmelluq.discord.lavaplayer.track.AudioTrack; -import me.bobert.netneutrality.context.tasks.ButtonTaskContext; import me.bobert.netneutrality.core.context.CommandContext; +import me.bobert.netneutrality.core.context.TaskContext; import me.bobert.netneutrality.core.tasks.trait.WithParent; import me.bobert.netneutrality.music.MusicManager; import me.bobert.netneutrality.music.SourceFinder; -import me.bobert.netneutrality.music.TrackScheduler; import me.bobert.netneutrality.tasks.ButtonTask; import me.bobert.netneutrality.utils.MessageFunction; import me.bobert.netneutrality.utils.MusicUtils; @@ -39,7 +38,7 @@ public class AddAllTracksTask extends ButtonTask implements WithParent