11package de .derioo .javautils .discord .command .reciever .predefined ;
22
33import com .cronutils .model .Cron ;
4+ import de .derioo .javautils .common .ReflectionsUtility ;
45import de .derioo .javautils .common .StringUtility ;
56import de .derioo .javautils .discord .command .CommandManager ;
67import de .derioo .javautils .discord .command .annotations .Argument ;
8+ import de .derioo .javautils .discord .command .parsed .ParsedArgument ;
79import de .derioo .javautils .discord .command .parsed .ParsedCommand ;
810import de .derioo .javautils .discord .command .parsed .parser .CronExtractor ;
911import de .derioo .javautils .discord .command .parsed .parser .DateExtractor ;
@@ -45,7 +47,7 @@ public boolean receive(MessageReceivedEvent event) {
4547
4648
4749 for (ParsedCommand .ParsedArgument argument : command .getArguments ()) {
48- Pair <Boolean , List <Object >> booleanListPair ;
50+ Pair <Boolean , List <ParsedArgument <?> >> booleanListPair ;
4951 try {
5052 booleanListPair = checkIfArgumentCouldMatch (argument , after );
5153 } catch (Exception e ) {
@@ -57,28 +59,20 @@ public boolean receive(MessageReceivedEvent event) {
5759 continue ;
5860 }
5961
60- List <Object > params = new ArrayList <>();
61- int argumentsCount = 0 ;
62- for (Parameter parameter : argument .getMethod ().getParameters ()) {
63- if (parameter .isAnnotationPresent (Argument .class )) {
64- params .add (booleanListPair .getSecond ().get (argumentsCount ++));
65- continue ;
66- }
67- if (parameter .getType ().isAssignableFrom (MessageReceivedEvent .class )) {
68- params .add (event );
69- continue ;
70- }
71- if (parameter .getType ().isAssignableFrom (ReceiveContext .class )) {
72- params .add (new ReceiveContext (command , args ));
73- continue ;
74- }
75- params .add (null );
76- }
7762 try {
78- argument .getMethod ().setAccessible (true );
79- argument .getMethod ().invoke (command .getCommand (), params .toArray (Object []::new ));
63+ List <Object > args = new ArrayList <>();
64+ args .add (new ReceiveContext (command , args ));
65+ args .add (event );
66+ args .addAll (booleanListPair .getSecond ());
67+ ReflectionsUtility
68+ .callMethod (argument .getMethod (), command .getCommand (), (o , parameter ) -> {
69+ if (!parameter .isAnnotationPresent (Argument .class )) return true ;
70+ if (!(o instanceof ParsedArgument <?> arg )) return true ;
71+ Argument annotation = parameter .getAnnotation (Argument .class );
72+ return arg .getArgument ().getType ().equals (annotation .type ()) && arg .getArgument ().getValue ().equals (annotation .value ());
73+ }, args );
8074 return true ;
81- } catch (IllegalAccessException | InvocationTargetException e ) {
75+ } catch (InvocationTargetException | IllegalAccessException e ) {
8276 throw new RuntimeException (e );
8377 }
8478 }
@@ -89,9 +83,9 @@ public boolean receive(MessageReceivedEvent event) {
8983
9084
9185 @ Contract ("_, _ -> new" )
92- private @ NotNull Pair <Boolean , List <Object >> checkIfArgumentCouldMatch (ParsedCommand .@ NotNull ParsedArgument argument , String after ) {
86+ private @ NotNull Pair <Boolean , List <ParsedArgument <?> >> checkIfArgumentCouldMatch (ParsedCommand .@ NotNull ParsedArgument argument , String after ) {
9387 boolean matches = true ;
94- List <Object > args = new ArrayList <>();
88+ List <ParsedArgument <?> > args = new ArrayList <>();
9589 String current = after ;
9690 for (ParsedCommand .ParsedSubArgument arg : argument .getSubArguments ()) {
9791 switch (arg .getType ()) {
@@ -100,41 +94,41 @@ public boolean receive(MessageReceivedEvent event) {
10094 Matcher matcher = pattern .matcher (current );
10195 String group = matcher .find () ? matcher .group () : "" ;
10296 if (!group .equals (arg .getValue ())) matches = false ;
103- args .add (group );
97+ args .add (new ParsedArgument . StringArgument ( group , arg ) );
10498 current = StringUtility .replaceFirst (current , group , "" ).trim ();
10599 }
106100 case REGEX -> {
107101 Pattern pattern = Pattern .compile (arg .getValue ());
108102 Matcher matcher = pattern .matcher (current );
109103 String group = matcher .find () ? matcher .group () : "" ;
110- args .add (group );
104+ args .add (new ParsedArgument . StringArgument ( group , arg ) );
111105 if (!group .equals (arg .getValue ())) matches = false ;
112106 current = StringUtility .replaceFirst (current , group , "" ).trim ();
113107 }
114108 case DATE -> {
115109 DateExtractor extractor = new DateExtractor ();
116110 Pair <String , Date > extract = extractor .extract (current );
117- args .add (extract .getSecond ());
111+ args .add (new ParsedArgument . DateArgument ( extract .getSecond (), arg ));
118112 current = StringUtility .replaceFirst (current , extract .getFirst (), "" ).trim ();
119113 }
120114 case CRON_JOB -> {
121115 CronExtractor extractor = new CronExtractor ();
122116 Pair <String , Cron > extract = extractor .extract (current );
123- args .add (extract .getSecond ());
117+ args .add (new ParsedArgument . CronArgument ( extract .getSecond (), arg ));
124118 current = StringUtility .replaceFirst (current , extract .getFirst (), "" ).trim ();
125119 }
126120 case STRING -> {
127121 Pattern pattern = Pattern .compile ("(^\\ S*)" );
128122 Matcher matcher = pattern .matcher (current );
129123 String group = matcher .find () ? matcher .group () : "" ;
130- args .add (group );
124+ args .add (new ParsedArgument . StringArgument ( group , arg ) );
131125 current = StringUtility .replaceFirst (current , group , "" ).trim ();
132126 }
133127 case GREEDY_STRING -> {
134128 Pattern pattern = Pattern .compile ("(^.*)" );
135129 Matcher matcher = pattern .matcher (current );
136130 String group = matcher .find () ? matcher .group () : "" ;
137- args .add (group );
131+ args .add (new ParsedArgument . StringArgument ( group , arg ) );
138132 current = StringUtility .replaceFirst (current , group , "" ).trim ();
139133 }
140134 }
0 commit comments