Skip to content

Commit deb8ac8

Browse files
committed
Refactoring
1 parent fe0240a commit deb8ac8

File tree

1 file changed

+47
-30
lines changed

1 file changed

+47
-30
lines changed

core/src/main/java/com/javadiscord/jdi/core/interaction/InteractionEventHandler.java

Lines changed: 47 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -45,44 +45,61 @@ public void onInteractionCreate(Interaction interaction, Guild guild) {
4545
Class<?> handler = reflectiveSlashCommandClassMethod.clazz();
4646
Method method = reflectiveSlashCommandClassMethod.method();
4747

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);
7149

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);
7952
}
8053

8154
} catch (Exception e) {
8255
LOGGER.error("Failed to invoke handler for /{}", command, e);
8356
}
8457
}
8558

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+
86103
private void injectComponents(Object object) {
87104
ReflectiveSlashCommandLoader reflectiveSlashCommandLoader =
88105
ReflectiveLoader.proxy(slashCommandLoader, ReflectiveSlashCommandLoader.class);

0 commit comments

Comments
 (0)