diff --git a/src/main/java/org/mangorage/mangobot/modules/tricks/TrickCMDType.java b/src/main/java/org/mangorage/mangobot/modules/tricks/TrickCMDType.java index b1e23c6..8559926 100644 --- a/src/main/java/org/mangorage/mangobot/modules/tricks/TrickCMDType.java +++ b/src/main/java/org/mangorage/mangobot/modules/tricks/TrickCMDType.java @@ -9,6 +9,7 @@ public enum TrickCMDType { LIST("-l", "-list"), TRANSFER("-t", "-transfer"), LOCK("-lock"), + FIND("-f", "-find"), NONE(); private String[] strings; diff --git a/src/main/java/org/mangorage/mangobot/modules/tricks/TrickCommand.java b/src/main/java/org/mangorage/mangobot/modules/tricks/TrickCommand.java index a555323..2ee8df4 100644 --- a/src/main/java/org/mangorage/mangobot/modules/tricks/TrickCommand.java +++ b/src/main/java/org/mangorage/mangobot/modules/tricks/TrickCommand.java @@ -42,6 +42,7 @@ import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; public class TrickCommand implements IBasicCommand { private static final boolean ALLOW_SCRIPT_TRICKS = true; @@ -497,6 +498,32 @@ public CommandResult execute(Message message, Arguments args) { } } else if (type == TrickCMDType.TRANSFER) { // TODO: Add transfer ability... + } else if (type == TrickCMDType.FIND) { + var tricks = getTricksForGuild(guildID); + if (trickID == null) trickID = ".*"; // Match any on error + String finalTrickID = trickID; + tricks = tricks.stream().filter((trick) -> + trick.getTrickID().contains(finalTrickID) + || trick.getTrickID().matches(finalTrickID)).collect(Collectors.toList()); + MessageChannelUnion channel = message.getChannel(); + if (!tricks.isEmpty()) { + PagedList trickList = createTricks(guildID, tricks); + channel.sendMessage(""" + Finding matching tricks... + """).queue((m -> { + PAGES.put(m.getId(), trickList); + TaskScheduler.getExecutor().schedule(new RunnableTask<>(m, (d) -> removeTricksList(d.get())), 10, TimeUnit.MINUTES); + updateTrickListMessage(trickList, m, true); + }) + ); + + + } else { + channel.sendMessage(""" + No matching tricks found + """).queue(); + } + return CommandResult.PASS; } /* @@ -504,6 +531,7 @@ public CommandResult execute(Message message, Arguments args) { !trick -r trickID !trick -i trickID !trick -l <10> + !trick -f !trick -e trickID -suppress -content Hello There! !trick -e trickID -script msg.reply(''Hello!'); @@ -568,7 +596,7 @@ public String commandId() { @Override public List commandAliases() { - return CommandAlias.create(this, "tricks", "tr"); + return CommandAlias.create(this, "tricks", "tr", "trick"); } @Override @@ -602,6 +630,10 @@ public String usage() { ## How to show a list of tricks: `!tricks -l 10` + + ## How to find tricks: + `!tricks -f installerlogs` + `!tricks -f create.*` """; } @@ -658,6 +690,15 @@ private PagedList createTricks(long guildID, int entries) { return tricks; } + private PagedList createTricks(long guildID, List tricks) { + PagedList trickList = new PagedList<>(); + + Object[] LIST = tricks.stream().map(Trick::getTrickID).toArray(); + trickList.rebuild(Arrays.copyOf(LIST, LIST.length, String[].class), tricks.size()); + + return trickList; + } + public void onButton(DiscordEvent event) { var interaction = event.getInstance();