From ee72f8824b1efd8278d983a5d411b3305914619b Mon Sep 17 00:00:00 2001 From: YouHaveTrouble Date: Tue, 8 Jul 2025 20:00:25 +0200 Subject: [PATCH] create api http server --- .../java/me/youhavetrouble/inviter/Main.java | 58 ++++++++++++++++++- .../inviter/http/ApiServer.java | 21 +++++++ 2 files changed, 76 insertions(+), 3 deletions(-) create mode 100644 src/main/java/me/youhavetrouble/inviter/http/ApiServer.java diff --git a/src/main/java/me/youhavetrouble/inviter/Main.java b/src/main/java/me/youhavetrouble/inviter/Main.java index 5a5d878..3b79653 100644 --- a/src/main/java/me/youhavetrouble/inviter/Main.java +++ b/src/main/java/me/youhavetrouble/inviter/Main.java @@ -1,5 +1,6 @@ package me.youhavetrouble.inviter; +import me.youhavetrouble.inviter.http.ApiServer; import me.youhavetrouble.inviter.storage.MemoryStorage; import me.youhavetrouble.inviter.storage.Storage; import net.dv8tion.jda.api.JDA; @@ -9,20 +10,65 @@ import net.dv8tion.jda.api.utils.cache.CacheFlag; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.io.IOException; import java.util.Set; public class Main { - private static final Logger LOGGER = LoggerFactory.getLogger("Inviter"); + public static final Logger LOGGER = LoggerFactory.getLogger("Inviter"); private static JDA jda; - private static Storage storage; + private static ApiServer apiServer; public static void main(String[] args) throws InterruptedException { String token = System.getenv("DISCORD_TOKEN"); + if (token == null || token.isEmpty()) { + LOGGER.error("Discord token is not set. Please set the DISCORD_TOKEN environment variable."); + System.exit(1); + } + + String hostname = "127.0.0.1"; + int port = 8080; // Default port + + for (String arg : args) { + String[] parts = arg.split("=", 2); + if (parts.length < 2) { + LOGGER.error("Invalid argument format: {}", arg); + System.exit(1); + } + + String key = parts[0]; + String value = parts[1]; + + switch (key) { + case "hostname": + if (value.isEmpty()) { + LOGGER.error("Hostname cannot be empty."); + System.exit(1); + } + hostname = value; + break; + case "port": + try { + port = Integer.parseInt(value); + if (port <= 0 || port > 65535) { + LOGGER.error("Port must be a valid number between 1 and 65535."); + System.exit(1); + } + } catch (NumberFormatException e) { + LOGGER.error("Invalid port number: {}", value, e); + System.exit(1); + } + break; + default: + LOGGER.warn("Unknown argument: {}", key); + break; + } + } + jda = JDABuilder.create( token, Set.of(GatewayIntent.GUILD_INVITES) @@ -42,8 +88,14 @@ public class Main { storage = new MemoryStorage(jda); - LOGGER.info("Welcome to the Inviter Application!"); + try { + apiServer = new ApiServer(hostname, port); + } catch (IOException e) { + LOGGER.error("Failed to start the API server on {}:{}", hostname, port, e); + System.exit(1); + } + LOGGER.info("Welcome to the Inviter Application!"); } } diff --git a/src/main/java/me/youhavetrouble/inviter/http/ApiServer.java b/src/main/java/me/youhavetrouble/inviter/http/ApiServer.java new file mode 100644 index 0000000..fdda9c4 --- /dev/null +++ b/src/main/java/me/youhavetrouble/inviter/http/ApiServer.java @@ -0,0 +1,21 @@ +package me.youhavetrouble.inviter.http; + +import com.sun.net.httpserver.HttpServer; +import me.youhavetrouble.inviter.Main; + +import java.io.IOException; +import java.net.InetSocketAddress; +import java.util.concurrent.Executors; + +public class ApiServer { + + private final HttpServer server; + + public ApiServer(String hostname, int port) throws IllegalArgumentException, IOException { + server = HttpServer.create(new InetSocketAddress(hostname, port), 0); + server.setExecutor(Executors.newVirtualThreadPerTaskExecutor()); + server.start(); + Main.LOGGER.info("Http API server started on {}:{}", hostname, port); + } + +}