Add Choices and Autocomplete #8

Open
tueem wants to merge 9 commits from feat/choices into dev
3 changed files with 34 additions and 24 deletions
Showing only changes of commit 1cb6cd0e05 - Show all commits

@ -1,5 +1,12 @@
package net.tomatentum.marinara.interaction.annotation; package net.tomatentum.marinara.interaction.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface AutoComplete { public @interface AutoComplete {
} }

@ -4,6 +4,7 @@ import org.javacord.api.interaction.AutocompleteInteraction;
import org.javacord.api.interaction.ButtonInteraction; import org.javacord.api.interaction.ButtonInteraction;
import org.javacord.api.interaction.SlashCommandInteraction; import org.javacord.api.interaction.SlashCommandInteraction;
import org.javacord.api.interaction.SlashCommandInteractionOption; import org.javacord.api.interaction.SlashCommandInteractionOption;
import org.javacord.api.interaction.SlashCommandOptionType;
import net.tomatentum.marinara.wrapper.ContextObjectProvider; import net.tomatentum.marinara.wrapper.ContextObjectProvider;
@ -26,7 +27,8 @@ public class JavacordContextObjectProvider implements ContextObjectProvider {
} }
private Object getOptionValue(SlashCommandInteractionOption option) { private Object getOptionValue(SlashCommandInteractionOption option) {
switch (getOptionType(option)) { SlashCommandOptionType type = getOptionType(option);
switch (type) {
case ATTACHMENT: case ATTACHMENT:
return option.getAttachmentValue().get(); return option.getAttachmentValue().get();
case BOOLEAN: case BOOLEAN:
@ -38,40 +40,40 @@ public class JavacordContextObjectProvider implements ContextObjectProvider {
case LONG: case LONG:
return option.getLongValue().get(); return option.getLongValue().get();
case MENTIONABLE: case MENTIONABLE:
return option.getMentionableValue().get(); return option.requestMentionableValue().get();
case ROLE: case ROLE:
return option.getRoleValue().get(); return option.getRoleValue().get();
case STRING: case STRING:
return option.getStringValue().get(); return option.getStringValue().get();
case USER: case USER:
return option.getUserValue().get(); return option.requestUserValue().get();
default: default:
return null; return null;
} }
} }
private org.javacord.api.interaction.SlashCommandOptionType getOptionType(SlashCommandInteractionOption option) { private SlashCommandOptionType getOptionType(SlashCommandInteractionOption option) {
if (option.getAttachmentValue().isPresent()) if (option.getAttachmentValue().isPresent())
return org.javacord.api.interaction.SlashCommandOptionType.ATTACHMENT; return SlashCommandOptionType.ATTACHMENT;
if (option.getBooleanValue().isPresent()) if (option.getBooleanValue().isPresent())
return org.javacord.api.interaction.SlashCommandOptionType.BOOLEAN; return SlashCommandOptionType.BOOLEAN;
if (option.getChannelValue().isPresent()) if (option.getChannelValue().isPresent())
return org.javacord.api.interaction.SlashCommandOptionType.CHANNEL; return SlashCommandOptionType.CHANNEL;
if (option.getDecimalValue().isPresent()) if (option.getDecimalValue().isPresent())
return org.javacord.api.interaction.SlashCommandOptionType.DECIMAL; return SlashCommandOptionType.DECIMAL;
if (option.getLongValue().isPresent()) if (option.getLongValue().isPresent())
return org.javacord.api.interaction.SlashCommandOptionType.LONG; return SlashCommandOptionType.LONG;
if (option.getMentionableValue().isPresent()) if (option.requestMentionableValue().isPresent())
return org.javacord.api.interaction.SlashCommandOptionType.MENTIONABLE; return SlashCommandOptionType.MENTIONABLE;
if (option.getRoleValue().isPresent()) if (option.getRoleValue().isPresent())
return org.javacord.api.interaction.SlashCommandOptionType.ROLE; return SlashCommandOptionType.ROLE;
if (option.getStringValue().isPresent()) if (option.getStringValue().isPresent())
return org.javacord.api.interaction.SlashCommandOptionType.ATTACHMENT; return SlashCommandOptionType.STRING;
if (option.getUserValue().isPresent()) if (option.requestUserValue().isPresent())
return org.javacord.api.interaction.SlashCommandOptionType.USER; return SlashCommandOptionType.USER;
return org.javacord.api.interaction.SlashCommandOptionType.UNKNOWN; return SlashCommandOptionType.UNKNOWN;
} }
@Override @Override

@ -42,13 +42,12 @@ public class JavacordWrapper extends LibraryWrapper {
@Override @Override
public InteractionType getInteractionType(Class<?> clazz) { public InteractionType getInteractionType(Class<?> clazz) {
if (AutocompleteInteraction.class.isAssignableFrom(clazz))
return InteractionType.AUTOCOMPLETE;
if (ApplicationCommandInteraction.class.isAssignableFrom(clazz)) if (ApplicationCommandInteraction.class.isAssignableFrom(clazz))
return InteractionType.COMMAND; return InteractionType.COMMAND;
if (ButtonInteraction.class.isAssignableFrom(clazz)) if (ButtonInteraction.class.isAssignableFrom(clazz))
return InteractionType.BUTTON; return InteractionType.BUTTON;
if (AutocompleteInteraction.class.isAssignableFrom(clazz))
return InteractionType.AUTOCOMPLETE;
return null; return null;
} }
@ -83,11 +82,13 @@ public class JavacordWrapper extends LibraryWrapper {
List<SlashCommandInteractionOption> options = interaction.getOptions(); List<SlashCommandInteractionOption> options = interaction.getOptions();
try { try {
builder.setApplicationCommand(TypeFactory.annotation(SlashCommand.class, Map.of("name", interaction.getCommandName()))); builder.setApplicationCommand(TypeFactory.annotation(SlashCommand.class, Map.of("name", interaction.getCommandName())));
if (!options.isEmpty()) {
if (!options.getFirst().getArguments().isEmpty()) { if (!options.getFirst().getArguments().isEmpty()) {
builder.setSubCommandGroup(TypeFactory.annotation(SubCommandGroup.class, Map.of("name", options.getFirst().getName()))); builder.setSubCommandGroup(TypeFactory.annotation(SubCommandGroup.class, Map.of("name", options.getFirst().getName())));
builder.setSubCommand(TypeFactory.annotation(SubCommand.class, Map.of("name", options.getFirst().getOptions().getFirst().getName()))); builder.setSubCommand(TypeFactory.annotation(SubCommand.class, Map.of("name", options.getFirst().getOptions().getFirst().getName())));
}else }else
builder.setSubCommand(TypeFactory.annotation(SubCommand.class, Map.of("name", options.getFirst().getName()))); builder.setSubCommand(TypeFactory.annotation(SubCommand.class, Map.of("name", options.getFirst().getName())));
}
} catch (AnnotationFormatException e) { } catch (AnnotationFormatException e) {
e.printStackTrace(); e.printStackTrace();
} }