Skip to content

Commit b8edd25

Browse files
authored
Implement find tricks (#23)
* Impl. find tricks * fix no tricks found not showing up, also add !trick alias
1 parent 02f6576 commit b8edd25

2 files changed

Lines changed: 43 additions & 1 deletion

File tree

src/main/java/org/mangorage/mangobot/modules/tricks/TrickCMDType.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ public enum TrickCMDType {
99
LIST("-l", "-list"),
1010
TRANSFER("-t", "-transfer"),
1111
LOCK("-lock"),
12+
FIND("-f", "-find"),
1213
NONE();
1314

1415
private String[] strings;

src/main/java/org/mangorage/mangobot/modules/tricks/TrickCommand.java

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
import java.util.Set;
4343
import java.util.concurrent.ConcurrentHashMap;
4444
import java.util.concurrent.TimeUnit;
45+
import java.util.stream.Collectors;
4546

4647
public class TrickCommand implements IBasicCommand {
4748
private static final boolean ALLOW_SCRIPT_TRICKS = true;
@@ -497,13 +498,40 @@ public CommandResult execute(Message message, Arguments args) {
497498
}
498499
} else if (type == TrickCMDType.TRANSFER) {
499500
// TODO: Add transfer ability...
501+
} else if (type == TrickCMDType.FIND) {
502+
var tricks = getTricksForGuild(guildID);
503+
if (trickID == null) trickID = ".*"; // Match any on error
504+
String finalTrickID = trickID;
505+
tricks = tricks.stream().filter((trick) ->
506+
trick.getTrickID().contains(finalTrickID)
507+
|| trick.getTrickID().matches(finalTrickID)).collect(Collectors.toList());
508+
MessageChannelUnion channel = message.getChannel();
509+
if (!tricks.isEmpty()) {
510+
PagedList<String> trickList = createTricks(guildID, tricks);
511+
channel.sendMessage("""
512+
Finding matching tricks...
513+
""").queue((m -> {
514+
PAGES.put(m.getId(), trickList);
515+
TaskScheduler.getExecutor().schedule(new RunnableTask<>(m, (d) -> removeTricksList(d.get())), 10, TimeUnit.MINUTES);
516+
updateTrickListMessage(trickList, m, true);
517+
})
518+
);
519+
520+
521+
} else {
522+
channel.sendMessage("""
523+
No matching tricks found
524+
""").queue();
525+
}
526+
return CommandResult.PASS;
500527
}
501528

502529
/*
503530
!trick -s trickID
504531
!trick -r trickID
505532
!trick -i trickID
506533
!trick -l <10>
534+
!trick -f <trickname or regex>
507535
508536
!trick -e trickID -suppress -content Hello There!
509537
!trick -e trickID -script msg.reply(''Hello!');
@@ -568,7 +596,7 @@ public String commandId() {
568596

569597
@Override
570598
public List<String> commandAliases() {
571-
return CommandAlias.create(this, "tricks", "tr");
599+
return CommandAlias.create(this, "tricks", "tr", "trick");
572600
}
573601

574602
@Override
@@ -602,6 +630,10 @@ public String usage() {
602630
603631
## How to show a list of tricks:
604632
`!tricks -l 10`
633+
634+
## How to find tricks:
635+
`!tricks -f installerlogs`
636+
`!tricks -f create.*`
605637
""";
606638
}
607639

@@ -658,6 +690,15 @@ private PagedList<String> createTricks(long guildID, int entries) {
658690
return tricks;
659691
}
660692

693+
private PagedList<String> createTricks(long guildID, List<Trick> tricks) {
694+
PagedList<String> trickList = new PagedList<>();
695+
696+
Object[] LIST = tricks.stream().map(Trick::getTrickID).toArray();
697+
trickList.rebuild(Arrays.copyOf(LIST, LIST.length, String[].class), tricks.size());
698+
699+
return trickList;
700+
}
701+
661702
public void onButton(DiscordEvent<ButtonInteractionEvent> event) {
662703
var interaction = event.getInstance();
663704

0 commit comments

Comments
 (0)