|
42 | 42 | import java.util.Set; |
43 | 43 | import java.util.concurrent.ConcurrentHashMap; |
44 | 44 | import java.util.concurrent.TimeUnit; |
| 45 | +import java.util.stream.Collectors; |
45 | 46 |
|
46 | 47 | public class TrickCommand implements IBasicCommand { |
47 | 48 | private static final boolean ALLOW_SCRIPT_TRICKS = true; |
@@ -497,13 +498,40 @@ public CommandResult execute(Message message, Arguments args) { |
497 | 498 | } |
498 | 499 | } else if (type == TrickCMDType.TRANSFER) { |
499 | 500 | // 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; |
500 | 527 | } |
501 | 528 |
|
502 | 529 | /* |
503 | 530 | !trick -s trickID |
504 | 531 | !trick -r trickID |
505 | 532 | !trick -i trickID |
506 | 533 | !trick -l <10> |
| 534 | + !trick -f <trickname or regex> |
507 | 535 |
|
508 | 536 | !trick -e trickID -suppress -content Hello There! |
509 | 537 | !trick -e trickID -script msg.reply(''Hello!'); |
@@ -568,7 +596,7 @@ public String commandId() { |
568 | 596 |
|
569 | 597 | @Override |
570 | 598 | public List<String> commandAliases() { |
571 | | - return CommandAlias.create(this, "tricks", "tr"); |
| 599 | + return CommandAlias.create(this, "tricks", "tr", "trick"); |
572 | 600 | } |
573 | 601 |
|
574 | 602 | @Override |
@@ -602,6 +630,10 @@ public String usage() { |
602 | 630 | |
603 | 631 | ## How to show a list of tricks: |
604 | 632 | `!tricks -l 10` |
| 633 | + |
| 634 | + ## How to find tricks: |
| 635 | + `!tricks -f installerlogs` |
| 636 | + `!tricks -f create.*` |
605 | 637 | """; |
606 | 638 | } |
607 | 639 |
|
@@ -658,6 +690,15 @@ private PagedList<String> createTricks(long guildID, int entries) { |
658 | 690 | return tricks; |
659 | 691 | } |
660 | 692 |
|
| 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 | + |
661 | 702 | public void onButton(DiscordEvent<ButtonInteractionEvent> event) { |
662 | 703 | var interaction = event.getInstance(); |
663 | 704 |
|
|
0 commit comments