Implement built-in tasks, improve message commands with arguments, fix command context in DM, better help message
This commit is contained in:
1 parent
c98d47b5ca
commit
247f217e2e
9 files changed
+78
-56
No files matched your search
@@ -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<Integer, String> getArgs() {
|
||||
Map<Integer, String> 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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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<LoadPlayl
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute(ButtonTaskContext context) {
|
||||
public void execute(TaskContext context) {
|
||||
MusicManager manager = MusicManager.get(context.getGuild());
|
||||
Member member = context.getGuildUser();
|
||||
|
||||
|
||||
@@ -5,8 +5,8 @@ package me.bobert.netneutrality.tasks.music;
|
||||
* https://discord.gg/qUa6zNFZsd
|
||||
*/
|
||||
|
||||
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.NotAcknowledgeable;
|
||||
import me.bobert.netneutrality.core.tasks.trait.WithParent;
|
||||
import me.bobert.netneutrality.tasks.ButtonTask;
|
||||
@@ -39,7 +39,7 @@ public class CancelLoadTask extends ButtonTask implements WithParent<LoadPlaylis
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute(ButtonTaskContext context) {
|
||||
public void execute(TaskContext context) {
|
||||
// Interaction will get removed after execution
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user