@@ -45,44 +45,61 @@ public void onInteractionCreate(Interaction interaction, Guild guild) {
45
45
Class <?> handler = reflectiveSlashCommandClassMethod .clazz ();
46
46
Method method = reflectiveSlashCommandClassMethod .method ();
47
47
48
- List <Object > paramOrder = new ArrayList <>();
49
- Parameter [] parameters = method .getParameters ();
50
-
51
- for (Parameter parameter : parameters ) {
52
- if (parameter .getParameterizedType () == interaction .getClass ()) {
53
- paramOrder .add (interaction );
54
- } else if (parameter .getParameterizedType () == Discord .class ) {
55
- paramOrder .add (discord );
56
- } else if (parameter .getParameterizedType () == Guild .class ) {
57
- paramOrder .add (GatewayEventListener .getGuild (discord , interaction .guild ()));
58
- } else if (parameter .getParameterizedType () == SlashCommandEvent .class ) {
59
- paramOrder .add (new SlashCommandEvent (interaction , discord ));
60
- }
61
- }
62
-
63
- if (paramOrder .size () != method .getParameterCount ()) {
64
- throw new RuntimeException (
65
- "Bound "
66
- + paramOrder .size ()
67
- + " parameters but expected "
68
- + method .getParameterCount ()
69
- );
70
- }
48
+ List <Object > paramOrder = getOrderOfParameters (method , interaction );
71
49
72
- if (cachedInstances .containsKey (handler .getName ())) {
73
- method .invoke (cachedInstances .get (handler .getName ()), paramOrder .toArray ());
74
- } else {
75
- Object handlerInstance = handler .getDeclaredConstructor ().newInstance ();
76
- cachedInstances .put (handler .getName (), handlerInstance );
77
- injectComponents (handlerInstance );
78
- method .invoke (handlerInstance , paramOrder .toArray ());
50
+ if (validateParameterCount (method , paramOrder )) {
51
+ invokeHandler (handler , method , paramOrder );
79
52
}
80
53
81
54
} catch (Exception e ) {
82
55
LOGGER .error ("Failed to invoke handler for /{}" , command , e );
83
56
}
84
57
}
85
58
59
+ private List <Object > getOrderOfParameters (Method method , Interaction interaction ) {
60
+ List <Object > paramOrder = new ArrayList <>();
61
+ Parameter [] parameters = method .getParameters ();
62
+
63
+ for (Parameter parameter : parameters ) {
64
+ if (parameter .getParameterizedType () == interaction .getClass ()) {
65
+ paramOrder .add (interaction );
66
+ } else if (parameter .getParameterizedType () == Discord .class ) {
67
+ paramOrder .add (discord );
68
+ } else if (parameter .getParameterizedType () == Guild .class ) {
69
+ paramOrder .add (GatewayEventListener .getGuild (discord , interaction .guild ()));
70
+ } else if (parameter .getParameterizedType () == SlashCommandEvent .class ) {
71
+ paramOrder .add (new SlashCommandEvent (interaction , discord ));
72
+ }
73
+ }
74
+
75
+ return paramOrder ;
76
+ }
77
+
78
+ private boolean validateParameterCount (Method method , List <Object > paramOrder ) {
79
+ if (paramOrder .size () != method .getParameterCount ()) {
80
+ throw new RuntimeException (
81
+ "Bound " + paramOrder .size () + " parameters but expected "
82
+ + method .getParameterCount ()
83
+ );
84
+ }
85
+ return true ;
86
+ }
87
+
88
+ private void invokeHandler (
89
+ Class <?> handler ,
90
+ Method method ,
91
+ List <Object > paramOrder
92
+ ) throws Exception {
93
+ if (cachedInstances .containsKey (handler .getName ())) {
94
+ method .invoke (cachedInstances .get (handler .getName ()), paramOrder .toArray ());
95
+ } else {
96
+ Object handlerInstance = handler .getDeclaredConstructor ().newInstance ();
97
+ cachedInstances .put (handler .getName (), handlerInstance );
98
+ injectComponents (handlerInstance );
99
+ method .invoke (handlerInstance , paramOrder .toArray ());
100
+ }
101
+ }
102
+
86
103
private void injectComponents (Object object ) {
87
104
ReflectiveSlashCommandLoader reflectiveSlashCommandLoader =
88
105
ReflectiveLoader .proxy (slashCommandLoader , ReflectiveSlashCommandLoader .class );
0 commit comments