diff --git a/src/main/java/com/alttd/config/SettingsConfig.java b/src/main/java/com/alttd/config/SettingsConfig.java index cc788e0..7736298 100644 --- a/src/main/java/com/alttd/config/SettingsConfig.java +++ b/src/main/java/com/alttd/config/SettingsConfig.java @@ -16,10 +16,12 @@ public class SettingsConfig extends AbstractConfig { // SETTINGS public static String TOKEN = "token"; + public static String KANBOARD_TOKEN = "kanboard-token"; public static boolean DEBUG = false; private void loadSettings() { TOKEN = settingsConfig.getString("settings.token", TOKEN); + KANBOARD_TOKEN = settingsConfig.getString("settings.kanboard-token", KANBOARD_TOKEN); DEBUG = settingsConfig.getBoolean("settings.debug", DEBUG); } diff --git a/src/main/java/com/alttd/listeners/JDAListener.java b/src/main/java/com/alttd/listeners/JDAListener.java index 917861e..ede699f 100644 --- a/src/main/java/com/alttd/listeners/JDAListener.java +++ b/src/main/java/com/alttd/listeners/JDAListener.java @@ -36,12 +36,13 @@ public class JDAListener extends ListenerAdapter { Logger.altitudeLogs.info("JDA ready to register commands."); LockedChannel lockedChannel = new LockedChannel(); ButtonManager buttonManager = new ButtonManager(); + TagAdded tagAdded = new TagAdded(); AppealRepost appealRepost = new AppealRepost(buttonManager); ModalManager modalManager = new ModalManager(buttonManager); ContextMenuManager contextMenuManager = new ContextMenuManager(modalManager); SelectMenuManager selectMenuManager = new SelectMenuManager(); CommandManager commandManager = new CommandManager(jda, modalManager, contextMenuManager, lockedChannel, selectMenuManager, buttonManager); - jda.addEventListener(buttonManager, modalManager, commandManager, contextMenuManager, lockedChannel, appealRepost, selectMenuManager); + jda.addEventListener(buttonManager, tagAdded, modalManager, commandManager, contextMenuManager, lockedChannel, appealRepost, selectMenuManager); PollQueries.loadPolls(buttonManager); new Timer().scheduleAtFixedRate(new PollTimerTask(jda, Logger.altitudeLogs), TimeUnit.MINUTES.toMillis(1), TimeUnit.MINUTES.toMillis(5)); startSchedulers(); diff --git a/src/main/java/com/alttd/listeners/TagAdded.java b/src/main/java/com/alttd/listeners/TagAdded.java new file mode 100644 index 0000000..63db373 --- /dev/null +++ b/src/main/java/com/alttd/listeners/TagAdded.java @@ -0,0 +1,70 @@ +package com.alttd.listeners; + +import com.alttd.config.SettingsConfig; +import com.alttd.util.Logger; +import net.dv8tion.jda.api.entities.Message; +import net.dv8tion.jda.api.entities.channel.concrete.ThreadChannel; +import net.dv8tion.jda.api.events.channel.forum.ForumTagAddEvent; +import net.dv8tion.jda.api.hooks.ListenerAdapter; + +import java.io.IOException; +import java.net.URI; +import java.net.URISyntaxException; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; + +public class TagAdded extends ListenerAdapter { + + public void tagAdded(ForumTagAddEvent event) { + if (event.getTag().getIdLong() != 0L) {//TODO add tag id + return; + } + if (!(event.getChannel() instanceof ThreadChannel threadChannel)) { + return; + } + threadChannel.retrieveStartMessage().queue(this::forwardMessageToKanboard, error -> { + Logger.altitudeLogs.error(error); + }); + } + + //TODO move to its own util class + public void forwardMessageToKanboard(Message message) { + String contentDisplay = message.getContentDisplay(); + HttpClient client = HttpClient.newHttpClient(); + HttpRequest request; + try { + String jsonPayload = String.format("{" + + "\"title\": \"%s\"," + + "\"description\": \"%s\"," + + "\"project_id\": \"%d\"" + + "}", "New Task" /*TODO config*/, contentDisplay, 3/*TODO config*/); + + request = HttpRequest.newBuilder() + .uri(new URI("https://kanboard.alttd.com/jsonrpc.php")) //TODO correct URL + .header("Content-Type", "application/json") + .setHeader("Authorization", SettingsConfig.KANBOARD_TOKEN) + .POST(HttpRequest.BodyPublishers.ofString(jsonPayload)) + .build(); + } catch (URISyntaxException e) { + Logger.altitudeLogs.error(e); + //TODO handle better + return; + } + + HttpResponse response; + try { + response = client.send(request, HttpResponse.BodyHandlers.ofString()); + } catch (InterruptedException | IOException e) { + Logger.altitudeLogs.error(e); + return; + } + + if (response.statusCode() == 200) { + Logger.altitudeLogs.info(response.body()); + } else { + Logger.altitudeLogs.error(String.format("Invalid response [%s]", response.body())); + } + } + +}