Skip to content

Commit

Permalink
feat: adding return option
Browse files Browse the repository at this point in the history
  • Loading branch information
yaansz committed Aug 23, 2024
1 parent 3868f12 commit e114892
Show file tree
Hide file tree
Showing 7 changed files with 65 additions and 16 deletions.
2 changes: 1 addition & 1 deletion src/main/java/com/softawii/Main.java
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ public static void main(String[] args) throws InterruptedException, NoSuchMethod
JDABuilder builder = JDABuilder.createDefault(token);
JDA JDA = builder.build();

boolean reset = true;
boolean reset = false;
CurupiraBoot curupira = new CurupiraBoot(JDA, context, reset, pkg);

JDA.awaitReady();
Expand Down
16 changes: 13 additions & 3 deletions src/main/java/com/softawii/curupira/example/Foo.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,10 @@
import net.dv8tion.jda.api.entities.channel.unions.MessageChannelUnion;
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
import net.dv8tion.jda.api.interactions.commands.OptionType;
import net.dv8tion.jda.api.utils.messages.MessagePollBuilder;
import net.dv8tion.jda.api.utils.messages.MessagePollData;

@DiscordController(value = "bar", description = "foo foo foo", parent = "foo")
@DiscordController(value = "bar", description = "foo foo foo", parent = "fuo")
public class Foo {

@DiscordCommand(name = "baz", description = "baz baz baz")
Expand All @@ -23,10 +25,18 @@ public void baz(SlashCommandInteractionEvent event,
}

@DiscordCommand(name = "qux", description = "qux qux qux")
public void qux(SlashCommandInteractionEvent event,
public String qux(SlashCommandInteractionEvent event,
@RequestInfo Member member,
@DiscordParameter(name = "hello", description = "channel to send hello") MessageChannelUnion channel) {
channel.sendMessage("hello chat").queue();
event.reply("sent").setEphemeral(true).queue();
return "Hello " + member.getEffectiveName();
}

@DiscordCommand(name = "charlie", description = "charlie charlie charlie")
public MessagePollData charlie(
@RequestInfo Member member,
@DiscordParameter(name = "poll", description = "pool name") String name) {

return MessagePollData.builder(name).addAnswer("yes").addAnswer("no").build();
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package com.softawii.curupira.v2.annotations;

import net.dv8tion.jda.api.interactions.DiscordLocale;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
Expand All @@ -8,9 +10,13 @@
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface DiscordController {

// Controller properties
String value() default "";
String parent() default "";
String description() default "";
boolean hidden() default false;
// I8n properties
String resource() default "";
DiscordLocale[] locales() default {};

}
13 changes: 6 additions & 7 deletions src/main/java/com/softawii/curupira/v2/core/CommandHandler.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,12 @@
import com.softawii.curupira.v2.annotations.DiscordCommand;
import com.softawii.curupira.v2.annotations.DiscordController;
import com.softawii.curupira.v2.annotations.DiscordParameter;
import com.softawii.curupira.v2.parser.DiscordToJavaParser;
import com.softawii.curupira.v2.parser.JavaToDiscordParser;
import net.dv8tion.jda.api.JDA;
import net.dv8tion.jda.api.events.interaction.command.GenericCommandInteractionEvent;
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
import net.dv8tion.jda.api.interactions.commands.CommandInteractionPayload;
import net.dv8tion.jda.api.interactions.commands.OptionType;
import net.dv8tion.jda.api.interactions.commands.build.OptionData;
import net.dv8tion.jda.api.interactions.commands.build.SubcommandData;
import net.dv8tion.jda.internal.interactions.CommandDataImpl;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

Expand All @@ -21,7 +17,6 @@
import java.lang.reflect.Parameter;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;

import static com.softawii.curupira.v2.parser.DiscordToJavaParser.getParameterFromEvent;

Expand Down Expand Up @@ -105,7 +100,11 @@ private Object[] getParameters(CommandInteractionPayload event) {
return parameters.toArray();
}

public void handle(GenericCommandInteractionEvent event) throws InvocationTargetException, IllegalAccessException {
method.invoke(instance, getParameters(event));
public void execute(GenericCommandInteractionEvent event) throws InvocationTargetException, IllegalAccessException {
Object result = method.invoke(instance, getParameters(event));
// something to reply
if(result != null) {
JavaToDiscordParser.responseFromCommandEvent(event, result);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
import com.softawii.curupira.v2.utils.ScanUtils;
import net.dv8tion.jda.api.JDA;
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
import net.dv8tion.jda.api.interactions.commands.build.CommandData;
import net.dv8tion.jda.api.interactions.commands.build.SubcommandData;
import net.dv8tion.jda.api.interactions.commands.build.SubcommandGroupData;
import net.dv8tion.jda.internal.interactions.CommandDataImpl;
Expand All @@ -18,7 +17,6 @@
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;

class CurupiraMapper {

Expand Down Expand Up @@ -47,8 +45,10 @@ public CurupiraMapper(JDA jda, ContextProvider context, boolean registerCommands

private void apply() {
if(registerCommandsToDiscord) {
for(Map.Entry<String, CommandDataImpl> entry : data.entrySet())
for(Map.Entry<String, CommandDataImpl> entry : data.entrySet()) {
this.logger.info("Apply command: {}", entry.getValue());
jda.upsertCommand(entry.getValue()).queue();
}
}
}

Expand Down Expand Up @@ -116,6 +116,7 @@ else if(name.length == 2) {
else if (name.length == 3) {
this.data.get(name[0]).getSubcommandGroups().stream().filter(group -> group.getName().equals(name[1])).findFirst().ifPresentOrElse(group -> {
SubcommandData subcommandData = new SubcommandData(name[2], commandInfo.description());
subcommandData.addOptions(handler.getOptions());
group.addSubcommands(subcommandData);
}, () -> {
SubcommandGroupData groupData = new SubcommandGroupData(name[1], controllerInfo.description());
Expand All @@ -132,7 +133,7 @@ public void slashCommandInteractionReceived(SlashCommandInteractionEvent event)
if(commands.containsKey(event.getFullCommandName())) {
CommandHandler handler = commands.get(event.getFullCommandName());
try {
handler.handle(event);
handler.execute(event);
} catch (InvocationTargetException | IllegalAccessException e) {
throw new RuntimeException(e);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import java.lang.reflect.Parameter;

public class DiscordToJavaParser {

public static Object getParameterFromEvent(CommandInteractionPayload event, Parameter parameter) {
if(parameter.getType().equals(SlashCommandInteractionEvent.class)) {
return event;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,20 @@
package com.softawii.curupira.v2.parser;

import net.dv8tion.jda.api.entities.Member;
import net.dv8tion.jda.api.entities.MessageEmbed;
import net.dv8tion.jda.api.entities.Role;
import net.dv8tion.jda.api.entities.User;
import net.dv8tion.jda.api.entities.channel.Channel;
import net.dv8tion.jda.api.entities.channel.unions.MessageChannelUnion;
import net.dv8tion.jda.api.events.interaction.command.GenericCommandInteractionEvent;
import net.dv8tion.jda.api.interactions.commands.OptionType;
import net.dv8tion.jda.api.interactions.modals.Modal;
import net.dv8tion.jda.api.utils.FileUpload;
import net.dv8tion.jda.api.utils.messages.MessageCreateData;
import net.dv8tion.jda.api.utils.messages.MessagePollData;

import java.util.Collection;
import java.util.List;

public class JavaToDiscordParser {

Expand Down Expand Up @@ -33,4 +42,27 @@ public static OptionType getTypeFromClass(Class clazz) {
} else
throw new RuntimeException("Type not supported");
}

public static void responseFromCommandEvent(GenericCommandInteractionEvent event, Object result) {
if(result instanceof String response) {
event.reply(response).queue();
} else if(result instanceof MessageCreateData message) {
event.reply(message).queue();
} else if(result instanceof Modal modal) {
event.replyModal(modal).queue();
} else if(result instanceof MessageEmbed embed) {
event.replyEmbeds(embed).queue();
} else if(result instanceof Collection<?> collection && collection.stream().findFirst().get() instanceof MessageEmbed) {
Collection<MessageEmbed> collectionEmbed = (Collection<MessageEmbed>) collection;
event.replyEmbeds(collectionEmbed).queue();
}
else if(result instanceof Collection<?> collection && collection.stream().findFirst().get() instanceof FileUpload) {
Collection<FileUpload> collectionFiles = (Collection<FileUpload>) collection;
event.replyFiles(collectionFiles).queue();
} else if(result instanceof MessagePollData poll) {
event.replyPoll(poll).queue();
} else {
throw new RuntimeException("Type not supported");
}
}
}

0 comments on commit e114892

Please sign in to comment.