Compare commits
	
		
			3 Commits
		
	
	
		
			432db43bf5
			...
			9d3a6b8b85
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 9d3a6b8b85 | |||
| 1cb6cd0e05 | |||
| a5e1230fc6 | 
| @@ -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 { | ||||||
|      |      | ||||||
| } | } | ||||||
|   | |||||||
| @@ -27,8 +27,8 @@ public record ExecutableSlashCommandDefinition( | |||||||
|         ExecutableSlashCommandDefinition other = (ExecutableSlashCommandDefinition) o; |         ExecutableSlashCommandDefinition other = (ExecutableSlashCommandDefinition) o; | ||||||
|         boolean equals = false; |         boolean equals = false; | ||||||
|  |  | ||||||
|         if (this.applicationCommand() != null && other.subCommandGroup() != null) |         if (this.applicationCommand() != null && other.applicationCommand() != null) | ||||||
|             equals = this.applicationCommand.name().equals(other.applicationCommand().name()); |             equals = this.applicationCommand().name().equals(other.applicationCommand().name()); | ||||||
|  |  | ||||||
|         if (this.subCommandGroup() != null && other.subCommandGroup() != null) |         if (this.subCommandGroup() != null && other.subCommandGroup() != null) | ||||||
|             equals = this.subCommandGroup().name().equals(other.subCommandGroup().name()); |             equals = this.subCommandGroup().name().equals(other.subCommandGroup().name()); | ||||||
|   | |||||||
| @@ -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(); | ||||||
|         } |         } | ||||||
|   | |||||||
| @@ -0,0 +1,23 @@ | |||||||
|  | package net.tomatentum.marinara.test; | ||||||
|  |  | ||||||
|  | import static org.junit.jupiter.api.Assertions.assertTrue; | ||||||
|  |  | ||||||
|  | import org.junit.jupiter.api.Test; | ||||||
|  |  | ||||||
|  | import net.tomatentum.marinara.Marinara; | ||||||
|  | import net.tomatentum.marinara.test.mocks.AutocompleteInteractionMock; | ||||||
|  | import net.tomatentum.marinara.test.mocks.DiscordApiMock; | ||||||
|  | import net.tomatentum.marinara.wrapper.LibraryWrapper; | ||||||
|  | import net.tomatentum.marinara.wrapper.javacord.JavacordWrapper; | ||||||
|  |  | ||||||
|  | public class AutoCompleteTest { | ||||||
|  |      | ||||||
|  |     @Test | ||||||
|  |     public void testAutocomplete() { | ||||||
|  |         LibraryWrapper wrapper = new JavacordWrapper(new DiscordApiMock()); //null okay as we don't use the discord API in this test. | ||||||
|  |         Marinara marinara = Marinara.load(wrapper); | ||||||
|  |         marinara.getRegistry().addInteractions(new TestAutocomplete()); | ||||||
|  |         wrapper.handleInteraction(new AutocompleteInteractionMock()); | ||||||
|  |         assertTrue(AutocompleteInteractionMock.didAutocompleteRun); | ||||||
|  |     } | ||||||
|  | } | ||||||
| @@ -0,0 +1,23 @@ | |||||||
|  | package net.tomatentum.marinara.test; | ||||||
|  |  | ||||||
|  | import static org.junit.jupiter.api.Assertions.assertEquals; | ||||||
|  |  | ||||||
|  | import java.util.Collections; | ||||||
|  |  | ||||||
|  | import org.javacord.api.interaction.AutocompleteInteraction; | ||||||
|  |  | ||||||
|  | import net.tomatentum.marinara.interaction.InteractionHandler; | ||||||
|  | import net.tomatentum.marinara.interaction.annotation.AutoComplete; | ||||||
|  | import net.tomatentum.marinara.interaction.commands.annotation.SlashCommand; | ||||||
|  |  | ||||||
|  | public class TestAutocomplete implements InteractionHandler { | ||||||
|  |      | ||||||
|  |     @SlashCommand(name = "test") | ||||||
|  |     @AutoComplete | ||||||
|  |     public void autocomplete(AutocompleteInteraction context, String value) { | ||||||
|  |         System.out.println("Success!"); | ||||||
|  |         assertEquals(value, "test"); | ||||||
|  |         context.respondWithChoices(Collections.emptyList()); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  | } | ||||||
| @@ -0,0 +1,179 @@ | |||||||
|  | package net.tomatentum.marinara.test.mocks; | ||||||
|  |  | ||||||
|  | import java.util.ArrayList; | ||||||
|  | import java.util.EnumSet; | ||||||
|  | import java.util.List; | ||||||
|  | import java.util.Optional; | ||||||
|  | import java.util.concurrent.CompletableFuture; | ||||||
|  |  | ||||||
|  | import org.javacord.api.DiscordApi; | ||||||
|  | import org.javacord.api.entity.channel.TextChannel; | ||||||
|  | import org.javacord.api.entity.message.component.HighLevelComponent; | ||||||
|  | import org.javacord.api.entity.permission.PermissionType; | ||||||
|  | import org.javacord.api.entity.server.Server; | ||||||
|  | import org.javacord.api.entity.user.User; | ||||||
|  | import org.javacord.api.interaction.AutocompleteInteraction; | ||||||
|  | import org.javacord.api.interaction.DiscordLocale; | ||||||
|  | import org.javacord.api.interaction.InteractionType; | ||||||
|  | import org.javacord.api.interaction.SlashCommandInteractionOption; | ||||||
|  | import org.javacord.api.interaction.SlashCommandOptionChoice; | ||||||
|  | import org.javacord.api.interaction.callback.InteractionFollowupMessageBuilder; | ||||||
|  | import org.javacord.api.interaction.callback.InteractionImmediateResponseBuilder; | ||||||
|  | import org.javacord.api.interaction.callback.InteractionOriginalResponseUpdater; | ||||||
|  |  | ||||||
|  | public class AutocompleteInteractionMock implements AutocompleteInteraction { | ||||||
|  |  | ||||||
|  |     public static boolean didAutocompleteRun = false; | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public String getFullCommandName() { | ||||||
|  |         return "test"; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public long getCommandId() { | ||||||
|  |         // TODO Auto-generated method stub | ||||||
|  |         throw new UnsupportedOperationException("Unimplemented method 'getCommandId'"); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public String getCommandIdAsString() { | ||||||
|  |         // TODO Auto-generated method stub | ||||||
|  |         throw new UnsupportedOperationException("Unimplemented method 'getCommandIdAsString'"); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public String getCommandName() { | ||||||
|  |         return "test"; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public Optional<Long> getRegisteredCommandServerId() { | ||||||
|  |         // TODO Auto-generated method stub | ||||||
|  |         throw new UnsupportedOperationException("Unimplemented method 'getRegisteredCommandServerId'"); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public long getApplicationId() { | ||||||
|  |         // TODO Auto-generated method stub | ||||||
|  |         throw new UnsupportedOperationException("Unimplemented method 'getApplicationId'"); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public InteractionType getType() { | ||||||
|  |         return InteractionType.APPLICATION_COMMAND_AUTOCOMPLETE; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public InteractionImmediateResponseBuilder createImmediateResponder() { | ||||||
|  |         // TODO Auto-generated method stub | ||||||
|  |         throw new UnsupportedOperationException("Unimplemented method 'createImmediateResponder'"); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public CompletableFuture<InteractionOriginalResponseUpdater> respondLater() { | ||||||
|  |         // TODO Auto-generated method stub | ||||||
|  |         throw new UnsupportedOperationException("Unimplemented method 'respondLater'"); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public CompletableFuture<InteractionOriginalResponseUpdater> respondLater(boolean ephemeral) { | ||||||
|  |         // TODO Auto-generated method stub | ||||||
|  |         throw new UnsupportedOperationException("Unimplemented method 'respondLater'"); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public CompletableFuture<Void> respondWithModal(String customId, String title, | ||||||
|  |             List<HighLevelComponent> components) { | ||||||
|  |         // TODO Auto-generated method stub | ||||||
|  |         throw new UnsupportedOperationException("Unimplemented method 'respondWithModal'"); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public InteractionFollowupMessageBuilder createFollowupMessageBuilder() { | ||||||
|  |         // TODO Auto-generated method stub | ||||||
|  |         throw new UnsupportedOperationException("Unimplemented method 'createFollowupMessageBuilder'"); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public Optional<Server> getServer() { | ||||||
|  |         // TODO Auto-generated method stub | ||||||
|  |         throw new UnsupportedOperationException("Unimplemented method 'getServer'"); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public Optional<TextChannel> getChannel() { | ||||||
|  |         // TODO Auto-generated method stub | ||||||
|  |         throw new UnsupportedOperationException("Unimplemented method 'getChannel'"); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public User getUser() { | ||||||
|  |         // TODO Auto-generated method stub | ||||||
|  |         throw new UnsupportedOperationException("Unimplemented method 'getUser'"); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public String getToken() { | ||||||
|  |         // TODO Auto-generated method stub | ||||||
|  |         throw new UnsupportedOperationException("Unimplemented method 'getToken'"); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public int getVersion() { | ||||||
|  |         // TODO Auto-generated method stub | ||||||
|  |         throw new UnsupportedOperationException("Unimplemented method 'getVersion'"); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public DiscordLocale getLocale() { | ||||||
|  |         // TODO Auto-generated method stub | ||||||
|  |         throw new UnsupportedOperationException("Unimplemented method 'getLocale'"); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public Optional<DiscordLocale> getServerLocale() { | ||||||
|  |         // TODO Auto-generated method stub | ||||||
|  |         throw new UnsupportedOperationException("Unimplemented method 'getServerLocale'"); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public Optional<EnumSet<PermissionType>> getBotPermissions() { | ||||||
|  |         // TODO Auto-generated method stub | ||||||
|  |         throw new UnsupportedOperationException("Unimplemented method 'getBotPermissions'"); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public DiscordApi getApi() { | ||||||
|  |         // TODO Auto-generated method stub | ||||||
|  |         throw new UnsupportedOperationException("Unimplemented method 'getApi'"); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public long getId() { | ||||||
|  |         // TODO Auto-generated method stub | ||||||
|  |         throw new UnsupportedOperationException("Unimplemented method 'getId'"); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public List<SlashCommandInteractionOption> getOptions() { | ||||||
|  |         return new ArrayList<>(); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public List<SlashCommandInteractionOption> getArguments() { | ||||||
|  |         return new ArrayList<>(); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public CompletableFuture<Void> respondWithChoices(List<SlashCommandOptionChoice> choices) { | ||||||
|  |         didAutocompleteRun = true; | ||||||
|  |         return CompletableFuture.completedFuture(null); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public SlashCommandInteractionOption getFocusedOption() { | ||||||
|  |         return new SlashCommandInteractionOptionMock(); | ||||||
|  |     } | ||||||
|  |      | ||||||
|  | } | ||||||
| @@ -41,52 +41,52 @@ public class SlashCommandInteractionOptionMock implements SlashCommandInteractio | |||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public Optional<Long> getLongValue() { |     public Optional<Long> getLongValue() { | ||||||
|         throw new UnsupportedOperationException("Unimplemented method 'getLongValue'"); |         return Optional.empty(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public Optional<Boolean> getBooleanValue() { |     public Optional<Boolean> getBooleanValue() { | ||||||
|         throw new UnsupportedOperationException("Unimplemented method 'getBooleanValue'"); |         return Optional.empty(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public Optional<User> getUserValue() { |     public Optional<User> getUserValue() { | ||||||
|         throw new UnsupportedOperationException("Unimplemented method 'getUserValue'"); |         return Optional.empty(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public Optional<CompletableFuture<User>> requestUserValue() { |     public Optional<CompletableFuture<User>> requestUserValue() { | ||||||
|         throw new UnsupportedOperationException("Unimplemented method 'requestUserValue'"); |         return Optional.empty(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public Optional<ServerChannel> getChannelValue() { |     public Optional<ServerChannel> getChannelValue() { | ||||||
|         throw new UnsupportedOperationException("Unimplemented method 'getChannelValue'"); |         return Optional.empty(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public Optional<Attachment> getAttachmentValue() { |     public Optional<Attachment> getAttachmentValue() { | ||||||
|         throw new UnsupportedOperationException("Unimplemented method 'getAttachmentValue'"); |         return Optional.empty(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public Optional<Role> getRoleValue() { |     public Optional<Role> getRoleValue() { | ||||||
|         throw new UnsupportedOperationException("Unimplemented method 'getRoleValue'"); |         return Optional.empty(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public Optional<Mentionable> getMentionableValue() { |     public Optional<Mentionable> getMentionableValue() { | ||||||
|         throw new UnsupportedOperationException("Unimplemented method 'getMentionableValue'"); |         return Optional.empty(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public Optional<Double> getDecimalValue() { |     public Optional<Double> getDecimalValue() { | ||||||
|         throw new UnsupportedOperationException("Unimplemented method 'getDecimalValue'"); |         return Optional.empty(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public Optional<CompletableFuture<Mentionable>> requestMentionableValue() { |     public Optional<CompletableFuture<Mentionable>> requestMentionableValue() { | ||||||
|         throw new UnsupportedOperationException("Unimplemented method 'requestMentionableValue'"); |         return Optional.empty(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user