diff options
| -rw-r--r-- | src/main/java/com/pinapelz/Database.java | 31 | ||||
| -rw-r--r-- | src/main/java/com/pinapelz/FileSystem.java | 6 | ||||
| -rw-r--r-- | src/main/java/com/pinapelz/Main.java | 13 | ||||
| -rw-r--r-- | src/main/java/com/pinapelz/MessageListener.java | 6 | ||||
| -rw-r--r-- | src/main/java/com/pinapelz/Retriever.java | 34 | ||||
| -rw-r--r-- | src/main/java/com/pinapelz/frontend/App.kt | 20 |
6 files changed, 97 insertions, 13 deletions
diff --git a/src/main/java/com/pinapelz/Database.java b/src/main/java/com/pinapelz/Database.java index 41d5257..7116328 100644 --- a/src/main/java/com/pinapelz/Database.java +++ b/src/main/java/com/pinapelz/Database.java @@ -57,4 +57,35 @@ public class Database { ps.executeUpdate(); } + + public String[] getFileById(int fileId) { + String sql = """ + SELECT + disc_channel_id, + disc_message_id, + file_name + FROM files + WHERE file_id = ? + """; + + try (PreparedStatement ps = conn.prepareStatement(sql)) { + ps.setInt(1, fileId); + + try (ResultSet rs = ps.executeQuery()) { + if (!rs.next()) { + throw new RuntimeException("File not found for id=" + fileId); + } + + String channelId = rs.getString("disc_channel_id"); + String messageId = rs.getString("disc_message_id"); + String fileName = rs.getString("file_name"); + + return new String[]{ channelId, messageId, fileName }; + } + + } catch (SQLException e) { + throw new RuntimeException("Failed to fetch file metadata", e); + } + } + } diff --git a/src/main/java/com/pinapelz/FileSystem.java b/src/main/java/com/pinapelz/FileSystem.java index 61b1bd6..1f252a2 100644 --- a/src/main/java/com/pinapelz/FileSystem.java +++ b/src/main/java/com/pinapelz/FileSystem.java @@ -10,7 +10,11 @@ public class FileSystem { database = new Database(dbHost, dbUser, dbPass, dbName); } - public void createNewFile(String messageId, String channelId, String description, Message.Attachment attachment){ + public String[] getFileById(int fileId){ + return database.getFileById(fileId); + } + + public void createNewFile(String channelId, String messageId, String description, Message.Attachment attachment){ int fileSize = attachment.getSize(); String filename = attachment.getFileName(); String mimeType = attachment.getContentType(); diff --git a/src/main/java/com/pinapelz/Main.java b/src/main/java/com/pinapelz/Main.java index 9090160..40b0feb 100644 --- a/src/main/java/com/pinapelz/Main.java +++ b/src/main/java/com/pinapelz/Main.java @@ -1,6 +1,7 @@ package com.pinapelz; import io.github.cdimascio.dotenv.Dotenv; +import net.dv8tion.jda.api.JDA; import net.dv8tion.jda.api.JDABuilder; import net.dv8tion.jda.api.requests.GatewayIntent; @@ -9,6 +10,7 @@ import static com.pinapelz.frontend.AppKt.startFrontend; public class Main { private static final Dotenv dotenv = Dotenv.load(); + private static FileSystem fileSystem; public static String readSetting(String parameter) { String value = System.getenv(parameter); @@ -16,20 +18,21 @@ public class Main return dotenv.get(parameter); } - public static void startBot(){ + public static JDA startBot(){ String dbHost = readSetting("PGHOST"); String dbUser = readSetting("PGUSER"); String dbPass = readSetting("PGPASSWORD"); String dbName = readSetting("PGDATABASE"); - JDABuilder.createDefault(readSetting("BOT_TOKEN")) - .addEventListeners(new MessageListener(dbHost, dbUser, dbPass, dbName)) + fileSystem = new FileSystem(dbHost, dbUser, dbPass, dbName); + return JDABuilder.createDefault(readSetting("BOT_TOKEN")) + .addEventListeners(new MessageListener(fileSystem)) .enableIntents(GatewayIntent.MESSAGE_CONTENT) .build(); } public static void main(String[] args) throws Exception{ - startBot(); - startFrontend(); + JDA jda = startBot(); + startFrontend(new Retriever(jda), fileSystem); } diff --git a/src/main/java/com/pinapelz/MessageListener.java b/src/main/java/com/pinapelz/MessageListener.java index 642d484..3922c51 100644 --- a/src/main/java/com/pinapelz/MessageListener.java +++ b/src/main/java/com/pinapelz/MessageListener.java @@ -9,9 +9,9 @@ public class MessageListener extends ListenerAdapter { private FileSystem fileSystem; - public MessageListener(String dbHost, String dbUser, String dbPass, String dbName){ - fileSystem = new FileSystem(dbHost, dbUser, dbPass, dbName); + public MessageListener(FileSystem fileSystem){ + this.fileSystem = fileSystem; } @Override @@ -25,7 +25,7 @@ public class MessageListener extends ListenerAdapter { if(!message.getAttachments().isEmpty()){ System.out.println("Attachment Received! Filing this away now..."); for(Message.Attachment attachment : message.getAttachments()){ - fileSystem.createNewFile(message.getChannelId(), message.getChannelId(), content, attachment); + fileSystem.createNewFile(message.getChannelId(), message.getId(), content, attachment); } } diff --git a/src/main/java/com/pinapelz/Retriever.java b/src/main/java/com/pinapelz/Retriever.java new file mode 100644 index 0000000..1d78785 --- /dev/null +++ b/src/main/java/com/pinapelz/Retriever.java @@ -0,0 +1,34 @@ +package com.pinapelz; + +import net.dv8tion.jda.api.JDA; +import net.dv8tion.jda.api.entities.Message; +import net.dv8tion.jda.api.entities.channel.concrete.TextChannel; + +import java.util.concurrent.CompletableFuture; + +public class Retriever { + + private final JDA jda; + + public Retriever(JDA jda) { + this.jda = jda; + } + + public String getFileUrl(String channelId, String messageId, String fileName) { + TextChannel channel = jda.getTextChannelById(channelId); + if (channel == null) { + throw new RuntimeException("Channel not found or deleted"); + } + System.out.println(channelId + " " + messageId + fileName); + + Message message = channel.retrieveMessageById(messageId).complete(); + + for (Message.Attachment file : message.getAttachments()) { + if (file.getFileName().equals(fileName)) { + return file.getUrl(); + } + } + + throw new RuntimeException("Matching attachment not found"); + } +}
\ No newline at end of file diff --git a/src/main/java/com/pinapelz/frontend/App.kt b/src/main/java/com/pinapelz/frontend/App.kt index 4a19793..ab176da 100644 --- a/src/main/java/com/pinapelz/frontend/App.kt +++ b/src/main/java/com/pinapelz/frontend/App.kt @@ -1,9 +1,21 @@ package com.pinapelz.frontend import io.javalin.Javalin +import io.javalin.http.staticfiles.Location +import com.pinapelz.Retriever +import com.pinapelz.FileSystem -fun startFrontend() { - val app = Javalin.create() - .get("/") { ctx -> ctx.result("WIP. Not much here yet") } - .start(7070) +fun startFrontend(retriever: Retriever, fileSystem: FileSystem) { + val app = Javalin.create { + it.staticFiles.add("/public", Location.CLASSPATH) + } + app.get("/fetch") { ctx -> + val fileId = ctx.queryParam("fileId") + val fileMetadata = fileSystem.getFileById(Integer.parseInt(fileId)); + print(fileMetadata[1]) + ctx.html(retriever.getFileUrl(fileMetadata[0], fileMetadata[1], fileMetadata[2])); + + + } + app.start(7070) }
\ No newline at end of file |
